目录
  • 方法一
  • 方法二
  • 方法三
  • 附:本机IP与127.0.0.1及localhost的区别
    • 127.0.0.1
    • localhost
    • 本机IP
    • 解决方法
  • 总结

    方法一

    #获取本机IP地址
    def get_local_ip():
        # s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        # s.connect(('8.8.8.8', 80))
        # ip = s.getsockname()[0]
        # s.close()
        ip = socket.gethostbyname(socket.gethostname())
        return ip

    运行结果:

    D:\Python3.8.6\python.exe D:/PythonWorkSpace/someip/Common/get_IP_adress.py
    192.168.42.44

    Process finished with exit code 0

    方法二

    #获取公网IP地址
    def get_public_ip():
        response = requests.get("http://httpbin.org/ip")
        data = response.json()
        ip = data['origin']
        return ip

    运行结果:

    D:\Python3.8.6\python.exe D:/PythonWorkSpace/someip/Common/get_IP_adress.py
    223.76.212.244

    Process finished with exit code 0

    方法三

    # 获取本机所有 IP 地址
    def get_all_ip():
        hostname = socket.gethostname()
        ip_list = []
        # 获取IP地址信息
        addr_infos = socket.getaddrinfo(hostname, None)
        for addr in addr_infos:
            ip_list.append(addr[4][0])
        # print(ip_list)
        return ip_list

    运行结果:

    D:\Python3.8.6\python.exe D:/PythonWorkSpace/someip/Common/get_IP_adress.py
    fe80::f439:ac0:9050:c9f
    fe80::1d73:c1cf:c1ca:6d0d
    fe80::9d23:6620:a01:aa33
    fe80::856d:dbe3:ada3:a32a
    192.168.42.44
    172.29.11.5
    192.168.114.1
    192.168.64.1

    Process finished with exit code 0

    附:本机IP与127.0.0.1及localhost的区别

    127.0.0.1

    • 环回地址是主机用于向自身发送通信的一个特殊地址。同一台主机上的两项服务若使用环回地址而非分配的主机地址,就可以绕开TCP/IP协议栈的下层。

    • IPv4的环回地址为:127.0.0.0到127.255.255.255都是环回地址

    • 当操作系统初始化本机的TCP/IP协议栈时,设置协议栈本身的IP地址为127.0.0.1(保留地址),并注入路由表

    127.0.0.1是保留地址之一,来检验本机TCP/IP协议栈,ping 127.0.0.1一般作为测试本机TCP/IP协议栈正常与否的判断之一。

    localhost

    localhost首先是一个域名,也是本机地址,它可以被配置为任意的IP地址。不过通常情况下都指向:(如下)

    • IPv4:表示 127.0.0.1

    • IPv6:表示 [::1]

    本机IP

    本机IP,可以理解为本机有三块网卡:

    • 一块网卡叫做loopback(虚拟网卡)
    • 一块叫做ethernet(有线网卡)
    • 一块叫做wlan(你的无线网卡)

    联网,网卡传输,受防火墙和网卡限制

    解决方法

    获取本机IP有其它的方法:

    import os
    import socket
    
    gw = os.popen("ip -4 route show default").read().split()
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect((gw[2], 0))
    ipaddr = s.getsockname()[0]
    gateway = gw[2]
    host = socket.gethostname()
    
    print("IP:", ipaddr, " GW:", gateway, " Host:", host)
    

    或者

    import os
    import socket
    
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("8.8.8.8", 80))
    ip = s.getsockname()[0]
    
    print("IP:", ip) 

    总结

    到此这篇关于Python获取ip地址的3种方法的文章就介绍到这了,更多相关Python获取ip地址内容请搜索本网站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本网站!

    您可能感兴趣的文章:

    • python 获取本机ip地址的两个方法
    • Python正则表达式匹配和提取IP地址
    • 分享Python获取本机IP地址的几种方法
    • python获取本机所有IP地址的方法
    • 教你使用Python从文件中提取IP地址