📜  本地 ip - Python (1)

📅  最后修改于: 2023-12-03 14:55:26.670000             🧑  作者: Mango

本地 IP - Python

概述

本文介绍如何在 Python 中获取本地 IP 地址。在网络编程中,获取本地 IP 地址是非常常见的操作,用于绑定本地端口和监听网络连接。

方法一:使用 socket 库
import socket

def get_local_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        # 随便发起一个 UDP 请求
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    except Exception:
        ip = '127.0.0.1'
    finally:
        s.close()
    return ip

上面的代码使用了 socket 库,通过发起一个 UDP 请求,然后获取 socket 的 IP 地址。需要注意的是,如果本机没有网络连接,这种方法可能无法获取正确的 IP 地址。

方法二:使用 netifaces 库
import netifaces

def get_local_ip():
    interfaces = netifaces.interfaces()
    for interface in interfaces:
        # 排除虚拟接口和 loopback 接口
        if interface.startswith('lo') or interface.startswith('vir'):
            continue
        addrs = netifaces.ifaddresses(interface)
        if netifaces.AF_INET in addrs:
            return addrs[netifaces.AF_INET][0]['addr']
    return '127.0.0.1'

上面的代码使用了 netifaces 库,它可以方便地获取网络接口信息。该方法首先获取所有的网络接口,然后遍历这些接口,找到第一个 IPv4 地址不是 loopback 或虚拟接口地址的接口,返回该接口的 IP 地址。

总结

本文介绍了两种方法获取本地 IP 地址,分别是使用 socket 库和 netifaces 库。两种方法的差别在于,socket 库方法依赖于网络连接,可能会受到网络环境的影响,而 netifaces 库方法则不依赖于网络连接,可以稳定地获得本地 IP 地址。