如何为EXECIFIC网络接口创建传出套接字?

时间:2008-12-02 21:57:12

标签: networking language-agnostic ip

我的服务器有两个不同的网络接口,每个接口都有不同的IP地址。如何创建一个套接字以便它可以输出特定的IP地址?

我更喜欢python示例,但问题是语言不可知,所以请开枪。

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

3 个答案:

答案 0 :(得分:14)

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

我不知道如何在python中执行此操作,但使用berkeley套接字api(在C中),您需要使用setsockopt()选项调用SO_BINDTODEVICE

传入接口描述符,类型为struct ifreq。理想情况下,您可以使用ioctl()获取接口描述符的内容,并请求SIOCGIFINDEX - 将接口名称(例如eth0)作为参数传递。


编辑:刚刚进行了快速搜索,并在python中找到了this套接字方法的文档。 setsockopt()就在其中。

答案 1 :(得分:12)

只需注意一点 - 我真正需要的是绑定到特定的IP,并且为了完整起见,解决方案是在创建后绑定套接字。 python中的源代码:

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

答案 2 :(得分:2)

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

来自Quora