加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – Socket.Bind和IP源路由,具有多个本地网络接口

发布时间:2020-12-14 05:29:55 所属栏目:Windows 来源:网络整理
导读:我编写了一个在系统(Win7)上运行的工具,它有两个网络接口,每个网络接口链接到一个不同的子网,每个子网都有自己的网关,然后链接到两个独立的远程网络(每个网关后都有防火墙).我正在使用Socket.Bind(在执行Connect之前)通过两个NIC启动传出TCP连接到每个相关NI
我编写了一个在系统(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
> http://www.bloggersbase.com/disableipsourcerouting/

问题:

>如果我原来的理解是正确的(即Socket.Bind应该足够了) – 为什么没有修改路由表就无法工作?
>如果我的理解不正确(即Socket.Bind被忽略并且使用了路由) – 拥有Socket.Bind是什么意思?为什么要这样做?
>另外,我想更好地理解,启用源IP路由的实际风险是什么(最好是可能的漏洞利用示例)?
>非常感谢任何解决需求而无需手动修改本地路由表的想法.

非常感谢.

解决方法

好的,经过一些阅读,这里有一些关于正在发生的事情的高级解释.我仍然需要在我的系统中验证以下结论.显然,选择网络接口时通常会忽略本地绑定.相反,路由表用于此目的.但是,在强主机模型中(默认情况下为Vista和更新版本,在XP中不存在),源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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读