在TCP Python SocketServer中捕获目标IP

2 投票
1 回答
1776 浏览
提问于 2025-04-17 14:45

我有一个在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地址,这样的结果可能就没什么用处了。

撰写回答