目前我这样做:
def get_inet_ip():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('mysite.com', 80))
return s.getsockname()[0]
这是基于: 使用 Python 的 stdlib 查找本地 IP 地址
但是,这看起来有点可疑。据我所知,它会打开一个到 mysite.com:80 的套接字,然后返回该套接字的第一个地址,假设它是一个 IPv4 地址。这似乎有点狡猾......我认为我们不能保证会是这样。
这是我的第一个问题,它安全吗?在启用 IPv6 的服务器上,是否会意外返回 IPv6 地址?
我的第二个问题是如何以类似的方式获取 IPv6 地址。我将修改函数以采用可选的 ipv6 参数。