如何创建一个指向特定网络接口的传出套接字?
问题描述:
我有一个服务器有两个不同的网络接口,每个接口都有不同的IP地址。我怎样才能创建一个套接字,以便它会出去一个特定的IP地址?如何创建一个指向特定网络接口的传出套接字?
我更喜欢Python的例子,但问题是语言不可知的,所以射杀。
编辑:请不要给我“你不能”作为答案。我的意思是,这是一台电脑。例如,我可以做任何我喜欢的事情 - 我可以通过编程方式禁用我不想要的一个界面。我正在寻找更漂亮的东西。
答
您当然可以将套接字绑定到特定设备。
我不知道如何在Python中做到这一点,但使用berkeley套接字api(在C中),您需要使用选项SO_BINDTODEVICE
调用setsockopt()
。您输入struct ifreq
类型的接口描述符。理想情况下,您将通过使用ioctl()
并请求SIOCGIFINDEX
- 将接口名称(例如。eth0)作为参数来获取接口描述符的内容。
编辑:只是做了一个快速搜索,发现this在Python中的套接字方法的文档。 setsockopt()
就是其中之一。
答
请注意 - 我真正需要的是绑定到特定的IP地址,并且为了完整起见,解决方案是在创建后绑定套接字。来源蟒蛇:
import socket
s = socket.socket()
s.bind(("127.0.0.1", 0))
s.connect(("321.12.131.432", 80))
非常感谢您!我会尝试并报告。 – Mikle 2008-12-03 07:34:44
仅适用于Linux。那么OS X呢? – Dor 2012-09-15 15:56:43