Sockets 绕过传出连接的默认路由
我正在编写一个小应用程序,需要通过机器上的多个网络接口之一进行连接。该接口不是“默认”接口(具有默认路由的接口)。是否可以将出站TCP套接字直接绑定到特定接口 以下是一个例子:Sockets 绕过传出连接的默认路由,sockets,Sockets,我正在编写一个小应用程序,需要通过机器上的多个网络接口之一进行连接。该接口不是“默认”接口(具有默认路由的接口)。是否可以将出站TCP套接字直接绑定到特定接口 以下是一个例子: eth0: 192.168.1.10, gateway 192.168.1.1 eth1: 192.168.2.10, gateway 192.168.2.1 default gateway: 192.168.1.1 (both interfaces can reach the Internet through diff
eth0: 192.168.1.10, gateway 192.168.1.1
eth1: 192.168.2.10, gateway 192.168.2.1
default gateway: 192.168.1.1
(both interfaces can reach the Internet through different external IPs)
现在,我希望我的应用程序使用eth1
连接到外部服务器,即使系统配置为使用eth0进行外部通信
(这个问题可能很琐碎,但我只是想在花时间之前知道它是否可行)
目前,我正在使用Python和Twisted,但如果我必须使用BSD套接字,那就这样吧。来自:
SO_DONTROUTE
-不要通过网关发送,只发送到直接连接的主机。通过在套接字send(2)
操作上设置MSG\u DONTROUTE
标志,可以实现相同的效果。需要一个整数布尔标志。将套接字绑定到特定接口(或至少绑定到特定IP地址)相当简单-结果是套接字只能设置可以路由到该IP地址或从该IP地址路由的连接。。但你所说的“但我想通过互联网使用这个网关”是什么意思?哪个网关?我编辑了我的问题进行澄清,请查看更新的问题。谢谢路由是在操作系统TCP/IP堆栈级别完成的,而不是在套接字API级别,因此,基本上,在您的配置中,您的系统不知道如何通过eth1访问Internet。您可以在OS级别()启用多个默认网关,在这种情况下,Socket API应该使用它(但我从未使用过这种设置,因此不能向您保证),我知道so_DONTROUTE,但我想连接到Internet上的服务器,而不是本地LAN段。