在 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 获取网卡名称
有个 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

