接口和协议组成 python3 中使用 gethostbyname () 获取本地的 ip 并不是真实的 ip,这是为什么?

phoenix · July 16, 2018 · Last by 初学狗 replied at July 16, 2018 · 2120 hits

解释下:
1、我本地使用 ipv4,静态 ip 上网
2、ipconfig 获取的 ip 可以肯定是正确的
3、为什么 getgethostbyname() 获取的竟是这个 ip 呢,不解,有大佬解释下嘛?不胜感激~~~

最佳回复

gethostbyname 根据主机名反查机器 IP, 这个是很不靠谱的一种方法,最终的结果和一些 hosts 与环境变量的设置有关,有时候返回的并不能和预期一致.
推荐使用如下代码,如果大量调用建议做缓存:

def get_host_ip():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip

共收到 1 条回复 时间 点赞

gethostbyname 根据主机名反查机器 IP, 这个是很不靠谱的一种方法,最终的结果和一些 hosts 与环境变量的设置有关,有时候返回的并不能和预期一致.
推荐使用如下代码,如果大量调用建议做缓存:

def get_host_ip():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip

phoenix 关闭了讨论 26 Sep 09:51
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up