我有一台服务器,拥有两个不同的网络接口,每个接口都有不同的IP地址。如何创建一个套接字,以便它将通过特定的IP地址发送数据?
我更喜欢Python的示例,但这个问题是语言无关的,所以可以使用任何语言。
编辑:请不要给我“你不能这样做”作为答案。我的意思是,这是一台计算机。我可以按照自己的意愿进行任何操作,例如-我可以在运行时编程地禁用其中一个我不想要的接口。我正在寻找更好的解决方案。
我有一台服务器,拥有两个不同的网络接口,每个接口都有不同的IP地址。如何创建一个套接字,以便它将通过特定的IP地址发送数据?
我更喜欢Python的示例,但这个问题是语言无关的,所以可以使用任何语言。
编辑:请不要给我“你不能这样做”作为答案。我的意思是,这是一台计算机。我可以按照自己的意愿进行任何操作,例如-我可以在运行时编程地禁用其中一个我不想要的接口。我正在寻找更好的解决方案。
您可以将套接字绑定到特定设备。
我不知道如何在Python中实现,但是使用伯克利套接字API(在C中)需要调用setsockopt()
函数,使用选项SO_BINDTODEVICE
。
您需要传递一个接口描述符,它的类型为struct ifreq
。理想情况下,您应该使用ioctl()
获取接口描述符的内容,并请求SIOCGIFINDEX
- 将接口名称(例如eth0)作为参数传递。
编辑:我刚刚进行了快速搜索,并找到了此处关于Python套接字方法的文档。其中包括setsockopt()
方法。
仅作一点提示 - 我真正需要的是绑定到特定的IP,只是为了完整起见,解决方案是在创建后绑定套接字。Python代码如下:
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的代码