python 获取计算机的网卡信息

如何使用Python获取计算机的网卡信息

计算机的网卡信息是指计算机上已安装的网络适配器的信息,包括网卡的名称、MAC地址、IP地址等。在Python中,可以使用一些库来获取并处理计算机的网卡信息,如netifaces、psutil等。

1. 使用netifaces库获取网卡信息

netifaces是一个Python库,用于跨平台地获取计算机的网络接口信息。下面是使用netifaces库来获取计算机的网卡信息的示例代码:

import netifaces

# 获取计算机所有的网络接口信息

interfaces = netifaces.interfaces()

# 遍历所有网络接口,获取每个网络接口的详细信息

for interface in interfaces:

# 获取网络接口的名称

name = interface

# 获取网络接口的MAC地址

mac_address = netifaces.ifaddresses(interface)[netifaces.AF_LINK][0]['addr']

# 获取网络接口的IP地址

ip_address = netifaces.ifaddresses(interface)[netifaces.AF_INET][0]['addr']

# 打印网络接口的信息

print(f"网络接口名称:{name}")

print(f"MAC地址:{mac_address}")

print(f"IP地址:{ip_address}")

print("-" * 50)

上述代码中,首先使用netifaces库的interfaces()方法获取计算机上所有网络接口的名称列表,然后使用遍历循环获取每个网络接口的详细信息。在循环中,使用netifaces.ifaddresses(interface)方法获取网络接口的各种地址信息,其中netifaces.AF_LINK表示获取MAC地址,netifaces.AF_INET表示获取IP地址。

注意:在使用netifaces库之前,需要先使用pip install netifaces命令安装该库。

2. 使用psutil库获取网卡信息

psutil是一个跨平台的进程和系统工具库,可以用于获取各种系统信息,包括计算机的网卡信息。下面是使用psutil库获取计算机的网卡信息的示例代码:

import psutil

# 获取计算机所有的网络接口信息

interfaces = psutil.net_if_addrs()

# 遍历所有网络接口,获取每个网络接口的详细信息

for interface, addresses in interfaces.items():

# 遍历每个网络接口的地址信息

for address in addresses:

# 获取网络接口的名称

name = interface

# 获取网络接口的地址类型

if address.family == psutil.AF_LINK:

# 获取网络接口的MAC地址

mac_address = address.address

elif address.family == psutil.AF_INET:

# 获取网络接口的IP地址

ip_address = address.address

# 打印网络接口的信息

print(f"网络接口名称:{name}")

print(f"MAC地址:{mac_address}")

print(f"IP地址:{ip_address}")

print("-" * 50)

上述代码中,首先使用psutil库的net_if_addrs()方法获取计算机上所有网络接口的详细信息,然后使用遍历循环获取每个网络接口的名称和地址信息。在循环中,使用address.family判断地址的类型,psutil.AF_LINK表示MAC地址,psutil.AF_INET表示IP地址。

注意:在使用psutil库之前,需要先使用pip install psutil命令安装该库。

3. 进一步处理网卡信息

获取到计算机的网卡信息后,我们可以进一步对这些信息进行处理。例如,可以通过判断网卡的MAC地址来判断网络接口的类型,或者通过判断IP地址的子网掩码来查找特定子网的接口。

下面是对获取到的网卡信息进行处理的示例代码:

import netifaces

# 获取计算机所有的网络接口信息

interfaces = netifaces.interfaces()

# 遍历所有网络接口,获取每个网络接口的详细信息

for interface in interfaces:

# 获取网络接口的MAC地址

mac_address = netifaces.ifaddresses(interface)[netifaces.AF_LINK][0]['addr']

# 根据MAC地址判断网络接口的类型

if mac_address.startswith("00:00:00"):

interface_type = "虚拟网卡"

else:

interface_type = "物理网卡"

# 获取网络接口的IP地址

ip_address = netifaces.ifaddresses(interface)[netifaces.AF_INET][0]['addr']

# 根据IP地址的掩码判断是否为内网接口

if ip_address.startswith("192.168.") or ip_address.startswith("10.") or ip_address.startswith("172."):

network_type = "内网"

else:

network_type = "外网"

# 打印网络接口的信息

print(f"网络接口名称:{interface}")

print(f"MAC地址:{mac_address}({interface_type})")

print(f"IP地址:{ip_address}({network_type})")

print("-" * 50)

上述代码中,根据MAC地址的开头部分判断网络接口的类型,如果以00:00:00开头,则为虚拟网卡;否则为物理网卡。同时,根据IP地址的开头部分判断网络接口的网络类型,如果以192.168.、10.或172.开头,则为内网接口;否则为外网接口。

总结

本文介绍了如何使用Python获取计算机的网卡信息。通过使用netifaces或psutil等库,我们可以轻松地获取计算机上已安装的网络适配器的信息,并进行进一步的处理。这些信息对于网络配置、网络故障排查等方面都非常有用。

需要注意的是,在使用这些库之前,需要先使用pip命令安装相应的库。在编写代码时,还需要注意处理异常情况,如网络接口不存在、地址信息为空等。

后端开发标签