在 Python 中获取 IP 地址

Shivam Arora 2023年1月30日 2021年7月9日
  1. 在 Python 中使用 socket.gethostname() 函数获取本地 IP 地址
  2. 在 Python 中使用 socket.getsockname() 函数获取本地 IP 地址
  3. 在 Python 中使用 netifaces 模块获取本地 IP 地址
在 Python 中获取 IP 地址

IP 地址是从 0.0.0.0 到 255.255.255.255 的一串数字,每个数字的地址范围为 0 到 255。它可以唯一标识网络上的设备。

在本文中,我们将使用 Python 获取本地 IP 地址。

在 Python 中使用 socket.gethostname() 函数获取本地 IP 地址

我们可以使用 Python 中的 socket 模块来创建网络连接并通过网络发送消息。

函数 gethostname() 返回当前正在执行 Python 的系统主机名。

例如,

import socket
print(socket.gethostbyname(socket.gethostname()))

输出:

192.168.0.118

在 Python 中使用 socket.getsockname() 函数获取本地 IP 地址

如果计算机设备有连接到 Internet 的路由,那么我们可以使用 getsockname() 函数。它以元组的形式返回 IP 地址和端口。

请参考下面的代码。

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

输出:

192.168.0.112

此方法返回本地机器的主 IP,即默认路由。

我们也可以使用这个函数来创建一个不需要任何可路由互联网访问的用户定义函数。

请参考下面的代码。

import socket
def extract_ip():
    st = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:       
        st.connect(('10.255.255.255', 1))
        IP = st.getsockname()[0]
    except Exception:
        IP = '127.0.0.1'
    finally:
        st.close()
    return IP
print(extract_ip())

输出:

192.168.0.112

上述方法适用于所有接口。它还适用于所有公共、私有、外部 IP。这种方法在 Linux、Windows 和 OSX 上很有效。

在 Python 中使用 netifaces 模块获取本地 IP 地址

netifaces 模块用于提供有关网络接口及其状态的信息。

我们可以使用它来获取本地机器的 IP 地址,如下所示。

from netifaces import interfaces, ifaddresses, AF_INET
for ifaceName in interfaces():
    addresses = [i['addr'] for i in ifaddresses(ifaceName).setdefault(AF_INET, [{'addr':'No IP addr'}] )]
    print(' '.join(addresses))

输出:

No IP addr
No IP addr
No IP addr
No IP addr
192.168.0.104
127.0.0.1

相关文章 - Python Network