在TCP Python SocketServer中捕获目标IP
我有一个在Linux服务器上运行的Python脚本,这台服务器有十几个IP地址。为了处理连接,我使用了Python的socketserver库中的TCPSServer,并让它监听所有的网络接口。
会有几个设备连接到这个服务器,我们需要找到一种方法来捕捉目标IP地址(也就是客户端认为自己连接的服务器的IP,而不是客户端自己的IP)。目前,我可以接收到客户端的连接,也能看到客户端的IP,但我还没找到获取目标IP的方法。
有没有人知道在socketserver类中如何捕捉目标IP?如果我能监听多个接口,那应该有办法知道是哪个接口被访问了。
最终这个程序会安装在几台服务器上,每台服务器的网络接口数量都不确定。不过我们知道,这个程序只会在基于Linux的系统上运行。所以如果有特定于操作系统的方法来实现这个功能,我也很乐意接受。
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地址,这样的结果可能就没什么用处了。