24

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

我更喜欢 python 示例,但问题与语言无关,所以赶紧走开。

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

4

3 回答 3

15

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

我不知道如何在 python 中做到这一点,但是使用 berkeley socket api(在 C 中)你需要调用setsockopt(),使用选项SO_BINDTODEVICE.

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


编辑:刚刚做了一个快速搜索,发现了python中套接字方法的这个文档。setsockopt()是其中之一。

于 2008-12-02T22:17:07.187 回答
15

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

import socket
s = socket.socket()
s.bind(("127.0.0.1", 0))
s.connect(("321.12.131.432", 80))
于 2009-03-20T10:18:53.423 回答
1
import socket
s = socket.socket()
s.bind((get_ip_address('eth0'), 0))

来自知乎

于 2015-08-11T15:51:14.440 回答