【问题标题】:Socket.Bind and IP source routing, with multiple local network interfacesSocket.Bind 和 IP 源路由,具有多个本地网络接口
【发布时间】:2010-11-03 16:46:17
【问题描述】:

我编写了一个在具有两个网络接口的系统 (Win7) 上运行的工具,每个网络接口都链接到不同的子网,每个都有自己的网关,然后链接到两个独立的远程网络(每个网关后面都有传出防火墙)。我使用Socket.Bind(在使用Connect之前)通过两个NIC 发起传出TCP 连接到每个相关NIC 的IP 地址。第一个 NIC 工作正常,但对于第二个 NIC,我收到 SocketException“尝试对无法访问的网络进行套接字操作”

我最初的理解是,由于套接字绑定到具体 NIC 的本地端点,该端点已定义其网关,因此连接应该路由到该网关,因此应该可以工作。但是,似乎忽略了源 IP 地址,并且路由正在根据本地路由表工作(即第二个 NIC 的连接请求转到第一个,默认,网络并因为子网错误而被拒绝)。

调整本地路由表有帮助,但它让我想知道套接字绑定到特定本地 IP 的能力背后的全部原因。

做了一些额外的阅读,我发现确实有“源IP路由”之类的东西,但是由于安全原因,它在Windows中默认禁用(通过DisableIPSourceRouting注册表设置),如上所述,例如这里:

问题:

  1. 如果我最初的理解是正确的(即Socket.Bind 应该足够了)——为什么不修改路由表就不能工作?
  2. 如果我的理解不正确(即 Socket.Bind 被忽略并使用路由) - 拥有 Socket.Bind 有什么意义?为什么要这么做?
  3. 另外,我想更好地了解,启用源 IP 路由的实际风险是什么(最好有可能的利用示例)?
  4. 任何在不手动修改本地路由表的情况下解决需求的想法将不胜感激。

非常感谢。

【问题讨论】:

    标签: windows sockets routing tcp


    【解决方案1】:

    好的,经过阅读,这里有一些关于正在发生的事情的高级解释。我仍然需要在我的系统中验证以下结论。显然,选择网络接口时通常会忽略本地绑定。相反,路由表用于此。但是,在 强主机模型(Vista 和更新版本的默认设置,在 XP 中不存在)中,源 IP 用作路由表查找中的“约束”。

    【讨论】:

      猜你喜欢
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      相关资源
      最近更新 更多