我有一个在Linux服务器上运行的Python脚本,该服务器有十几个与之关联的IP地址。我从Python的socketserver库中实现了一个TCPSServer,并让它监听所有网络接口。
多个设备将连接到此服务器,我们需要能够以某种方式捕获目标的IP地址(不是客户端的IP地址,而是客户端认为它连接的服务器的IP地址)至)。现在,我可以接收客户端连接,我可以看到客户端IP,但我无法找到获取目标IP的方法。
有没有人知道在socketserver类上捕获目标IP的方法?看起来如果我可以监听多个接口,就会有一种方法来判断哪个接口被命中了。
这将最终安装在多个服务器上,每个服务器都有未知数量的网络接口。但是,我们知道这只会存在于Linux基础系统上。因此,如果有一种特定于操作系统的方法,那么我也可以这样做。
答案 0 :(得分: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等价物,据我所知,这不会有用。