我最初的理解是,由于套接字绑定到具有其网关定义的具体NIC的本地端点,因此连接应该路由到此网关,因此应该可以工作.但是,似乎忽略了源IP地址,并且路由根据本地路由表工作(即第二个NIC的连接请求转到第一个,默认,网络并因为它有错误的子网而被拒绝).
调整本地路由表有所帮助,但它让我想知道套接字绑定到特定本地IP的能力背后的整个推理.
做了一些额外的阅读,我发现确实存在“源IP路由”这样的事情,但是由于安全原因,在Windows中默认禁用它(通过DisableIPSourceRouting注册表设置),如图所示.这里:
> http://msdn.microsoft.com/en-us/library/ff648853.aspx
> http://www.bloggersbase.com/disableipsourcerouting/
问题:
>如果我原来的理解是正确的(即Socket.Bind应该足够了) – 为什么没有修改路由表就无法工作?
>如果我的理解不正确(即Socket.Bind被忽略并且使用了路由) – 拥有Socket.Bind是什么意思?为什么要这样做?
>另外,我想更好地理解,启用源IP路由的实际风险是什么(最好是可能的漏洞利用示例)?
>非常感谢任何解决需求而无需手动修改本地路由表的想法.
非常感谢.
解决方法
>关于强主机模型与弱主机模型的简要说明:
http://technet.microsoft.com/en-us/magazine/2007.09.cableguy.aspx
>有关上述内容与XP版本有何不同的解释:
http://blogs.technet.com/b/networking/archive/2009/04/24/source-ip-address-selection-on-a-multi-homed-windows-computer.aspx