windows – Socket.Bind和IP源路由,具有多个本地网络接口
我编写了一个在系统(Win7)上运行的工具,它有两个网络接口,每个网络接口链接到一个不同的子网,每个子网都有自己的网关,然后链接到两个独立的远程网络(每个网关后都有防火墙).我正在使用Socket.Bind(在执行Connect之前)通过两个NIC启动传出TCP连接到每个相关NIC的IP地址.第一个NIC工作正常,但对于第二个NIC,我收到SocketException:“尝试对无法访问的网络进行套接字操作”.
我最初的理解是,由于套接字绑定到具有其网关定义的具体NIC的本地端点,因此连接应该路由到此网关,因此应该可以工作.但是,似乎忽略了源IP地址,并且路由根据本地路由表工作(即第二个NIC的连接请求转到第一个,默认,网络并因为它有错误的子网而被拒绝). 调整本地路由表有所帮助,但它让我想知道套接字绑定到特定本地IP的能力背后的整个推理. 做了一些额外的阅读,我发现确实存在“源IP路由”这样的事情,但是由于安全原因,在Windows中默认禁用它(通过DisableIPSourceRouting注册表设置),如图所示.这里: > http://msdn.microsoft.com/en-us/library/ff648853.aspx 问题: >如果我原来的理解是正确的(即Socket.Bind应该足够了) – 为什么没有修改路由表就无法工作? 非常感谢. 解决方法
好的,经过一些阅读,这里有一些关于正在发生的事情的高级解释.我仍然需要在我的系统中验证以下结论.显然,选择网络接口时通常会忽略本地绑定.相反,路由表用于此目的.但是,在强主机模型中(默认情况下为Vista和更新版本,在XP中不存在),源IP在路由表查找中用作“约束”.
>关于强主机模型与弱主机模型的简要说明: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 00_Rust安装及Hello World
- Windows Phone 8 – 在后台生成锁屏图像
- active-directory – 内置的“提供远程协助”因权
- 使用Windows XP,Qt Creator 4.5.2(Windows 32位)
- 与在NTFS上存储数百万个文件相关的性能
- dll – 如何解决“运行时错误”429’:ActiveX组
- Windows/Linux命令查看文件MD5,SHA1,SHA256 文件
- 迁移 – 将服务器迁移到新硬件 – SBS 2008
- Windows Azure – 如何更改表存储帐户的区域?
- windows-server-2012-r2 – Windows Server 2012