Python SocketServer - 获取自身IP

3 投票
2 回答
2685 浏览
提问于 2025-04-18 02:15

我正在用Python3的socketserver模块创建一个简单的TCP服务器。我想知道这个服务器的IP地址是什么。

我注意到在socketserver(其实是BaseServer)里有一个叫server_address的属性,但它返回的IP是'0.0.0.0'。我还尝试使用socket对象并运行gethostbyname(),但是Python说这个socket对象没有gethostbyname这个属性。举个例子:

server = socketserver.TCPServer(...)
print(server.server_address) # gives me ('0.0.0.0', [correct port])
print(server.socket.gethostbyname()) # AttributeError

根据我的理解,0.0.0.0是用来表示“未知”的,所以服务器没有看到它自己的IP。这是对的吗?那可能的解决办法是什么呢?

2 个回答

2

你在套接字服务器中看到的0.0.0.0,意思是你没有指定某个特定的网络接口IP地址来让你的服务器进行监听。现在,它会在服务器上所有可用的IP地址(网络接口)上进行监听。

如果你想获取服务器的IP地址(如果可以通过DNS解析的话),你可以使用下面的代码:

import socket 
socket.gethostbyname(socket.getfqdn())
2

这件事如果没有外部服务器的帮助是做不到的,因为在你和另一台电脑之间可能有很多网络地址转换器(NAT)。我想如果你在用某种自定义协议的话,可以让客户端告诉你它连接的地址。

考虑到这一点(很多人可能会觉得这是一种变通方法),但这可能是唯一的办法——你可以这样做:

import urllib.request
external_ip = urllib.request.urlopen('http://ifconfig.me/ip').read()

撰写回答