Python 多网卡获取IP和MAC地址
简介
在网络编程中,有时候我们需要获取计算机上的多个网卡的IP和MAC地址。Python提供了一些库和方法来实现这个功能。本文将介绍如何通过Python来获取多个网卡的IP和MAC地址,并给出相应的代码示例。
流程概述
下面是实现该功能的大致流程:
步骤 | 动作 | 代码示例 |
---|---|---|
1 | 导入所需库 | import socket |
2 | 获取所有网卡名称 | interfaces = socket.if_nameindex() |
3 | 遍历网卡名称,获取IP和MAC地址 | for interface in interfaces: <br> get_ip_and_mac(interface[1]) |
4 | 输出IP和MAC地址 | print("接口名:%s,IP地址:%s,MAC地址:%s" % (name, ip, mac)) |
代码实现
步骤 1:导入所需库
首先,我们需要导入socket
库来实现IP和MAC地址的获取。
import socket
步骤 2:获取所有网卡名称
使用socket.if_nameindex()
方法可以获取所有网卡的名称和索引。这个方法返回一个包含网卡名称和索引的列表。
interfaces = socket.if_nameindex()
步骤 3:遍历网卡名称,获取IP和MAC地址
接下来,我们需要遍历网卡名称列表,并获取每个网卡的IP和MAC地址。这里我们可以定义一个函数get_ip_and_mac(interface_name)
来实现获取IP和MAC地址的操作。
def get_ip_and_mac(interface_name):
# 创建一个socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 使用ioctl方法获取网卡的IP和MAC地址
info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', interface_name.encode('utf-8')[:15]))
# 解析IP和MAC地址
ip = socket.inet_ntoa(info[20:24])
mac = ':'.join(['%02x' % b for b in info[18:24]])
# 输出IP和MAC地址
print("接口名:%s,IP地址:%s,MAC地址:%s" % (interface_name, ip, mac))
步骤 4:输出IP和MAC地址
在遍历网卡名称列表时,我们调用get_ip_and_mac(interface_name)
函数来获取每个网卡的IP和MAC地址,并输出结果。
for interface in interfaces:
get_ip_and_mac(interface[1])
完整代码
下面是完整的代码实现:
import socket
import fcntl
import struct
def get_ip_and_mac(interface_name):
# 创建一个socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 使用ioctl方法获取网卡的IP和MAC地址
info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', interface_name.encode('utf-8')[:15]))
# 解析IP和MAC地址
ip = socket.inet_ntoa(info[20:24])
mac = ':'.join(['%02x' % b for b in info[18:24]])
# 输出IP和MAC地址
print("接口名:%s,IP地址:%s,MAC地址:%s" % (interface_name, ip, mac))
interfaces = socket.if_nameindex()
for interface in interfaces:
get_ip_and_mac(interface[1])
总结
通过上述代码,我们可以实现获取多个网卡的IP和MAC地址。需要注意的是,执行上述代码需要在具有足够权限的环境中运行,否则可能会出现权限问题。
标签:socket,python,IP,地址,网卡,MAC,ip,interface From: https://blog.51cto.com/u_16175497/6731205