如何创建一个指向特定网络接口的传出套接字?

如何创建一个指向特定网络接口的传出套接字?

问题描述:

我有一个服务器有两个不同的网络接口,每个接口都有不同的IP地址。我怎样才能创建一个套接字,以便它会出去一个特定的IP地址?如何创建一个指向特定网络接口的传出套接字?

我更喜欢Python的例子,但问题是语言不可知的,所以射杀。

编辑:请不要给我“你不能”作为答案。我的意思是,这是一台电脑。例如,我可以做任何我喜欢的事情 - 我可以通过编程方式禁用我不想要的一个界面。我正在寻找更漂亮的东西。

您当然可以将套接字绑定到特定设备。

我不知道如何在Python中做到这一点,但使用berkeley套接字api(在C中),您需要使用选项SO_BINDTODEVICE调用setsockopt()。您输入struct ifreq类型的接口描述符。理想情况下,您将通过使用ioctl()并请求SIOCGIFINDEX - 将接口名称(例如。eth0)作为参数来获取接口描述符的内容。


编辑:只是做了一个快速搜索,发现this在Python中的套接字方法的文档。 setsockopt()就是其中之一。

+0

非常感谢您!我会尝试并报告。 – Mikle 2008-12-03 07:34:44

+0

仅适用于Linux。那么OS X呢? – Dor 2012-09-15 15:56:43

请注意 - 我真正需要的是绑定到特定的IP地址,并且为了完整起见,解决方案是在创建后绑定套接字。来源蟒蛇:

import socket 
s = socket.socket() 
s.bind(("127.0.0.1", 0)) 
s.connect(("321.12.131.432", 80)) 

import socket 
s = socket.socket() 
s.bind((get_ip_address('eth0'), 0)) 

Quora