使用Python检测可用的网络适配器

时间:2019-07-18 11:53:15

标签: python networking psutil

我想检测连接到DHCP并从中获取IP的可用网络接口。我正在使用以下脚本来生成可用适配器的列表。

import psutil
addrs = psutil.net_if_addrs()
all_network_interfaces = addrs.keys()
available_networks = []
for value in all_network_interfaces:
    if addrs[value][1][1].startswith("169.254"):
        continue
    else:
        available_networks.append(value)
print(available_networks)

以169.254开头的是使用自动专用IP寻址(APIPA)的适配器,因此我想将它们过滤掉。当我使用以太网电缆连接时,此脚本将显示相关的适配器,如果在仍然连接以太网的情况下也通过WiFi连接,则会将WiFi添加到列表中。但是,从WiFi断开连接后,WiFi适配器仍保留IP,并且仍存在于列表中。我认为我的适配卡有问题(可能是功能)。绕过此方法并仅获取具有DHCP连接的适配器的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

使用psutil.net_if_stats()仅使正常运行网络接口:

import psutil

addresses = psutil.net_if_addrs()
stats = psutil.net_if_stats()

available_networks = []
for intface, addr_list in addresses.items():
    if any(getattr(addr, 'address').startswith("169.254") for addr in addr_list):
        continue
    elif intface in stats and getattr(stats[intface], "isup"):
        available_networks.append(intface)

print(available_networks)

示例输出:

['lo0', 'en0', 'en1', 'en2', 'en3', 'bridge0', 'utun0']

答案 1 :(得分:0)

有一个python软件包get-nic,它提供了NIC状态,up \ down,ip addr,mac addr等

pip install get-nic

从get_nic导入getnic

getnic.interfaces()

输出:[“ eth0”,“ wlo1”]

请参阅GitHub页面以获取更多信息: https://github.com/tech-novic/get-nic-details