如何使用Python获取带子网掩码的本地网络地址?
获取本地网络地址与子网掩码的Python实现
你可以通过第三方库netifaces轻松获取本地网络的IP地址、子网掩码及网络地址,该库跨平台支持Windows、Linux和macOS。
步骤1:安装netifaces库
首先通过pip安装依赖:
pip install netifaces
步骤2:编写代码提取网络信息
以下代码会遍历所有网络接口,提取IPv4相关信息并存入变量:
import netifaces import struct import socket # 存储所有网络接口信息的列表 network_info_list = [] # 获取系统中所有网络接口 interfaces = netifaces.interfaces() for iface in interfaces: # 获取当前接口的所有地址信息 addr_details = netifaces.ifaddresses(iface) # 筛选IPv4类型的地址(AF_INET对应IPv4) if netifaces.AF_INET in addr_details: ipv4_data = addr_details[netifaces.AF_INET][0] # 提取IP地址和子网掩码 ip_addr = ipv4_data['addr'] subnet_mask = ipv4_data['netmask'] # 计算网络地址(IP与子网掩码按位与) ip_packed = socket.inet_aton(ip_addr) mask_packed = socket.inet_aton(subnet_mask) network_packed = struct.pack('!I', struct.unpack('!I', ip_packed)[0] & struct.unpack('!I', mask_packed)[0]) network_addr = socket.inet_ntoa(network_packed) # 将信息存入字典,再加入列表 interface_info = { 'interface_name': iface, 'ip_address': ip_addr, 'subnet_mask': subnet_mask, 'network_address': network_addr } network_info_list.append(interface_info) # 打印结果(可根据需求直接使用network_info_list变量) for info in network_info_list: print(f"接口: {info['interface_name']}") print(f"IP地址: {info['ip_address']}") print(f"子网掩码: {info['subnet_mask']}") print(f"网络地址: {info['network_address']}\n")
关键说明
netifaces.interfaces():返回系统中所有网络接口的名称(如eth0、Wi-Fi等)netifaces.ifaddresses(iface):获取指定接口的所有地址类型信息AF_INET:代表IPv4地址族,通过它筛选出IPv4相关数据- 网络地址计算:将IP和子网掩码转换为二进制后按位与,再转回字符串格式,得到当前网段的网络地址
如果不想依赖第三方库,也可以通过调用系统命令(如ipconfig或ifconfig)并解析输出,但这种方法兼容性差且易出错,推荐优先使用netifaces。
内容的提问来源于stack exchange,提问作者Jay Chung
相关产品推荐
相关产品推荐

