乐闻世界logo
搜索文章和话题

如何使用 Python 的 stdlib 查找本地 IP 地址

4 个月前提问
4 个月前修改
浏览次数19

1个答案

1

Python的标准库中有一个叫做 socket的模块,它提供了底层的网络接口支持,包括获取主机名和IP地址等功能。

以下是一个使用 socket模块获取本地IP地址的例子:

python
import socket def get_local_ip(): try: # 创建一个socket对象 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 尝试连接到一个不存在的地址 s.connect(("10.255.255.255", 1)) # 获取本地IP地址 IP = s.getsockname()[0] except Exception as e: print(f"无法获取IP地址: {e}") IP = "127.0.0.1" finally: # 关闭socket s.close() return IP # 获取并打印本地IP地址 local_ip = get_local_ip() print(f"本地IP地址是: {local_ip}")

在这个例子中,我们首先尝试创建一个UDP socket(因为UDP不需要像TCP那样实际建立连接,这样可以更快捷地获取IP地址)。然后,我们尝试连接到一个通常不存在的地址("10.255.255.255"是一个广播地址,而端口1是随便选的一个端口)。这个操作让操作系统必须选择一个有效的本地IP来发送数据包,虽然数据包并不会真正发送出去。然后,我们通过调用 getsockname()方法获取这个socket绑定的本地IP地址。

最后,我们确保在操作完成后关闭socket,并处理可能出现的异常,确保程序的健壮性。

这种方法的一个优点是它通常可以返回与外部世界通信的IP地址,而不仅仅是 localhost (127.0.0.1)。不过,这种方法也有潜在的问题,比如在某些特殊的网络配置下可能无法正确工作。这时,可能需要结合使用其他方法或工具,比如查询系统的网络配置。

2024年8月5日 02:13 回复

你的答案