在 Windows 下如何使用 Python 获取网卡名称

在 python 下想用 scapy,里面 iface 需要网卡名字,通过函数 show_interfaces()可以得到如下:

INDEX IFACE
11 VMware Virtual Ethernet Adapter for VMnet0
13 Killer E2200 Gigabit Ethernet Controller

那么有没有办法直接得到网卡名字的 list?


在 Windows 下如何使用 Python 获取网卡名称
4 回复

有个 WMI 包可以获取硬件信息


在Windows下获取网卡名称,可以用netifaces库,或者直接用wmi模块。netifaces跨平台,但wmi是Windows专用,信息更全。

先装库:

pip install netifaces wmi

netifaces的示例:

import netifaces

def get_network_interfaces():
    interfaces = netifaces.interfaces()
    for iface in interfaces:
        print(f"网卡: {iface}")
        addrs = netifaces.ifaddresses(iface)
        if netifaces.AF_INET in addrs:
            for addr_info in addrs[netifaces.AF_INET]:
                ip = addr_info.get('addr', 'N/A')
                print(f"  IPv4: {ip}")
        print()

if __name__ == "__main__":
    get_network_interfaces()

wmi的示例(能拿到更详细的描述,比如“Realtek PCIe GbE Family Controller”):

import wmi

def get_nic_names_wmi():
    c = wmi.WMI()
    for nic in c.Win32_NetworkAdapter(PhysicalAdapter=True):
        print(f"网卡名称: {nic.Name}")
        print(f"  描述: {nic.Description}")
        print(f"  适配器类型: {nic.AdapterType}")
        print(f"  MAC地址: {nic.MACAddress}")
        print()

if __name__ == "__main__":
    get_nic_names_wmi()

第一个方法拿到的名字是像“以太网”、“本地连接* 12”这种系统标识,第二个方法能拿到硬件厂商的实际名称。看你要哪种。

简单说,要简单标识用netifaces,要详细硬件信息用wmi

ifaddr.get_adapters()

def get_netcard():
netcard_info = []
info = psutil.net_if_addrs()
for k, v in info.items():
for item in v:
if item[0] == 2 and not item[1] == ‘127.0.0.1’:
netcard_info.append(k)
return netcard_info

回到顶部