【发布时间】:2013-04-23 00:24:24
【问题描述】:
我现在这样做:
def get_inet_ip():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('mysite.com', 80))
return s.getsockname()[0]
这是基于: Finding local IP addresses using Python's stdlib
但是,这看起来有点可疑。据我所知,它打开一个到 mysite.com:80 的套接字,然后返回该套接字的第一个地址,假设它是一个 IPv4 地址。这似乎有点狡猾......我认为我们无法保证会是这样。
这是我的第一个问题,它安全吗?在启用 IPv6 的服务器上,是否会意外返回 IPv6 地址?
我的第二个问题是如何以类似的方式获取 IPv6 地址。我将修改函数以采用可选的 ipv6 参数。
【问题讨论】:
-
这不是 IPv4 的可靠方法。
-
是的,我不这么认为。请进一步解释。