2

我有一个在 Linux 服务器上运行的 Python 脚本,该服务器有十几个与之关联的 IP 地址。我从 Python 的 socketserver 库中实现了一个 TCPSServer,并让它监听所有的网络接口。

多个设备将连接到该服务器,我们需要能够以某种方式捕获目标的 IP 地址(不是客户端的 IP 地址,而是客户端认为它正在连接的服务器的 IP 地址)。现在,我可以接收客户端连接,我可以看到客户端 IP,但我无法弄清楚获取目标 IP 的方法。

有谁知道在 socketserver 类上捕获目标 IP 的方法?似乎如果我可以监听多个接口,就会有一种方法可以判断哪个接口被击中。

这最终将安装在几台服务器上,每台服务器都有未知数量的网络接口。但是,我们确实知道这只会存在于基于 Linux 的系统上。因此,如果有特定于操作系统的方法来执行此操作,我也可以。

4

1 回答 1

1

如果你有一个socket对象,你可以使用socket.getsockname()它来获取它绑定的 IP 地址。所以类似于:

# IPv4
client = listening_socket.accept()
(ipv4,port) = client.getsockname()

# IPv6
client = listening_socket.accept()
(address, port, flow_info, scope_id) = client.getsockname()

从来没有在绑定到所有接口的多宿主服务器上测试它socket——据我所知,可能会返回 IPv4 0.0.0.0 或 IPv6 等价物,这并不是那么有用。

于 2013-02-04T21:02:42.287 回答