Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 绕过传出连接的默认路由_Sockets - Fatal编程技术网

Sockets 绕过传出连接的默认路由

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

我正在编写一个小应用程序,需要通过机器上的多个网络接口之一进行连接。该接口不是“默认”接口(具有默认路由的接口)。是否可以将出站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 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段。