使用socket库获取本地IP地址

socket库在Python中提供了广泛的网络通信功能。使用这个数据库可以很容易地获得当地主机的IP地址。需要注意的是,获得的IP地址将是运行该代码的设备连接的局域网中的IP地址,而非公共IP。

下面介绍了如何使用socket库查询本地IP地址的方法:

 import socket def get_local_ip(): try: # 创建一个socket对象 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 无需连接,一个UDP数据包直接通过socket发送。 s.connect(("8.8.8.8", 80)) # 获取socket绑定地址,即本地IP ip = s.getsockname()[0] finally: # 关闭socket连接连接 s.close() return ip # 打印本地IP地址 print(get_local_ip()) 

在这个代码中,首先尝试创建一个socket对象,然后使用这个对象到一个外部地址“8.8.发送UDP数据包8.8。这样做的目的是让socket在内部进行必要的网络配置,并且绑定一个IP地址,也就是我们的本地IP。发送数据包后,我们不需要真正将任何数据发送到外部网络,只需通过getsockname()获取绑定的IP地址即可。

使用os和ifconfig命令获得IP地址

除使用socket库外,还可执行系统命令“ifconfig"(在大多数类Unix系统中有效)或"ipconfig"(在Windows中)获取本地IP地址。下面是一个在Python中调用系统命令并分析结果以获取IP地址的例子:

 import os import re def get_ip_from_system_command(): # 按照不同的操作系统执行相应的命令获取网络配置信息 operating_system = os.name if operating_system == 'nt': # Windows command = 'ipconfig' else: # Unix or Linux command = 'ifconfig' # 执行系统命令 result = os.popen(command).read() # IP地址格式的正则表达式匹配 ip_regex = r'(d+.d+.d+.d+)' ips = re.findall(ip_regex, result) # 假设首先匹配的IP是本地IP return ips[0] if ips else None # 打印本地IP地址 print(get_ip_from_system_command()) 

在上述代码中,我们首先确定系统类型,然后执行系统命令。 "ipconfig" 或 "ifconfig";然后用正则表达式提取输出结果中的IP地址。这种方法的一个限制是,它可能会提取多个IP地址,所以我们需要额外的逻辑来确定哪个是我们真正需要的本地IP地址。

综上所述,通过以上两种方法中的任何一种,你都可以在Python中获得当地网络环境下的IP地址。每种方法都有其特定的使用场景和限制,可以根据实际需要选择合适的方法。