在Windows中使用特定的网络接口作为套接字

时间:2010-01-14 16:03:09

标签: windows networking binding sockets bind

除了更改路由表之外,Windows中是否有可靠的方法强制新创建的套接字使用特定的网络接口?我知道接口的IP地址bind()并不能保证这一点。

1 个答案:

答案 0 :(得分:16)

(好的第二次幸运..)

仅供参考,这里有另一个问题perform connect() on specific network adapter沿着同样的路线......

根据The Cable Guy

  

Windows XP和WindowsServer®2003   使用弱主机模型进行发送和   接收所有IPv4接口和   发送和发送的强大主机模型   接收所有IPv6接口。您   无法配置此行为。该   下一代TCP / IP堆栈   Windows Vista和Windows Server 2008   支持强大的主机发送和   通过接收IPv4和IPv6   默认在除。之外的所有接口上   Teredo隧道接口   Teredo主机专用继电器。

所以在Windows XP和Windows Server 2003 IP4中回答你的问题(这次正确),但是对于IP6是的。对于Windows Vista和Windows 2008是(除了某些情况)。

同样来自http://www.codeguru.com/forum/showthread.php?t=487139

  

在Windows上,对bind()的调用会影响   卡片选择仅传入流量,   没有外出的流量。因此,在一个   客户端在多宿主系统中运行   (即多个接口卡),   它是选择的网络堆栈   使用的卡,它使它   选择完全基于   目标IP,而后者又是基于IP的   在路由表上。对bind()的调用   不会影响卡的选择   无论如何。

     

这与某事有关   称为“弱端系统”的东西   (“弱E / S”)模型。 Vista改为了   强E / S模型,所以问题可能   在Vista下不会出现。但所有先前的   Windows版本使用弱E / S.   模型。

     

弱E / S模型,它是   路由表决定哪张卡   用于a中的传出流量   多宿主系统。

     

看看这些线程是否提供了一些   洞察:

     

“多宿主上的本地套接字绑定   Windows XP中的主机无法正常工作   http://www.codeguru.com/forum/showthread.php?t=452337

     

“如何将端口连接到指定的端口   网卡?“在   http://www.codeguru.com/forum/showthread.php?t=451117。   这个帖子提到了   CreateIpForwardEntry()函数,其中   (我认为)可以用来创建一个   在路由表中输入以便全部   指定的传出IP流量   服务器通过指定路由   适配器。

     

“使用2个以太网卡”   http://www.codeguru.com/forum/showthread.php?t=448863

     

“多宿主上的奇怪绑定行为   系统“在   http://www.codeguru.com/forum/showthread.php?t=452368

希望有所帮助!