首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以将ForceBindIP仅限制为入站/出站流量?

是否可以将ForceBindIP仅限制为入站/出站流量?
EN

Stack Overflow用户
提问于 2019-10-23 19:26:51
回答 3查看 380关注 0票数 7

我使用ForcebindIP 将应用指向特定的网络适配器,如下所示:

代码语言:javascript
运行
复制
forcebindip -i 192.168.0.5  MyCSharpApp.exe

这很好用,而且应用程序不知道(或不访问) PC上的任何其他网络适配器。

是否可以将ForceBindIP仅限制为出站流量,而让应用程序从任何本地网络适配器接收数据?或者甚至为出站流量指定一个网络适配器,为入站流量指定另一个网络适配器?

我找不到额外的ForceBindIP启动参数来做这件事。

如果能帮上忙我将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2020-01-21 12:42:19

如果我没有弄错您的问题,您希望绑定您的应用程序以侦听所有可用接口上的数据包,但只通过一个给定接口将数据包返回给。我还假设它是一个服务器应用程序,您没有neiter源代码,也没有对其行为的控制。

披露:我不知道ForceBindIP内部是如何工作的,我对它的理解是基于网站上的这段话:

然后,它将注入一个动态链接库(BindIP.dll),该动态链接库将WS2_32.DLL加载到内存中,并截获

()、connect()、sendto()、WSAConnect()和WSASendTo()函数,将它们重定向到动态链接库中的代码,该代码验证它们将绑定到哪个接口,如果不是指定的接口,则(重新)绑定套接字

要克服的问题

我不相信仅仅使用一个应用级DLL注入器就可以实现您想要的配置。我将列出ForceBindIP为使其正常工作而必须克服的几个问题:

  1. to listen to a socket,应用程序必须首先将其bind()为唯一的protocol-address-port组合。应用程序可以将自己绑定到特定地址或通配符(即侦听所有接口)。显然,可以同时绑定到通配符和特定地址,如this SO question中所述。然而,从应用程序的角度来看,这将是两个不同的套接字。因此你的应用程序必须知道如何处理这种接受客户端连接的traffic.
  2. When,accept()会在上面创建一个新的套接字和参数,由Windows管理,我不相信这里有一个拦截绑定的API -到这个时候连接被认为是想象中的,我们不知何故得到了一个神奇的套接字。我们可以在一个接口上接收数据包,然后发送到另一个接口。客户端(以及途中的所有路由设备)必须知道,来自两个不同源IP地址的两个数据包实际上是同一连接的一部分,并且能够组装TCP会话(或正确地合并UDP流)。

您可以有多个具有不同优先级和规则的gefault网关(这是一个需要探索的完全不同的主题),但据我所知,这不会解决您的特定问题:大多数路由协议都假设链路是对称的,并希望数据包保持在同一接口内。有像asymmetric routingnetwork interface teaming这样的特殊情况,但它们必须在每个接口级别上实现。

一个潜在的解决方案

实现目标的一种方法(我对您的环境不太了解,无法断言它会工作)将是创建一个virtual interface,将其设置到另一个IP网络,将您的应用程序绑定到它,然后使用防火墙(例如,允许多播数据包进入“虚拟”网络),并使用metric set to 1从该网络路由到所需的默认网关。我还怀疑任何Windows都不会那么灵活,所以你可能需要一个Server Edition

我很抱歉这不是现成的解决方案,但是我希望这能给你更多关于你所面临的问题的背景,并指引你到其他方向去探索。

票数 3
EN

Stack Overflow用户

发布于 2020-01-16 20:05:04

您可以在Powershell中使用Set-NetAdapterAdvancedProperty命令来设置指定适配器的流控制

要获取所有网络适配器的名称和属性:-

代码语言:javascript
运行
复制
Get-NetAdapterAdvancedProperty -Name "*"

假设您希望名为"Ethernet 2“的网络适配器仅用于从internet接收数据,然后键入:-

代码语言:javascript
运行
复制
Set-NetAdapterAdvancedProperty -Name "Ethernet 2" -DisplayName "Flow Control" -DisplayValue "Rx Enabled"

您可以在 https://docs.microsoft.com/en-us/powershell/module/netadapter/set-netadapteradvancedproperty?view=win10-ps中找到更多信息

票数 1
EN

Stack Overflow用户

发布于 2020-01-26 14:52:58

Microsoft winsock示例在他们的示例中有一个用法,用于将套接字限制为仅发送或接收模式。这可能会有帮助。https://docs.microsoft.com/en-us/windows/win32/winsock/complete-client-code

绑定时不会施加出站和入站限制。而是后者或当建立连接时。客户端代码中与此相关的代码行位于末尾。

// shutdown the connection since no more data will be sent

iResult = shutdown(ConnectSocket, SD_SEND);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58521809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档