使用 Python 检测可用的网络适配器
Detecting Available Network Adapters With Python
我想检测连接到 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 连接的适配器的最佳方法是什么?
使用 psutil.net_if_stats()
仅获取 up 和 运行 网络接口:
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']
有一个 python 包 get-nic 提供 NIC 状态,up\down,ip addr,mac addr 等
pip install get-nic
from get_nic import getnic
getnic.interfaces()
Output: ["eth0", "wlo1"]
interfaces = getnic.interfaces()
getnic.ipaddr(interfaces)
Output:
{'lo': {'state': 'UNKNOWN', 'inet4': '127.0.0.1/8', 'inet6': '::1/128'}, 'enp3s0': {'state': 'DOWN', 'HWaddr': 'a4:5d:36:c2:34:3e'}, 'wlo1': {'state': 'UP', 'HWaddr': '48:d2:24:7f:63:10', 'inet4': '10.16.1.34/24', 'inet6': 'fe80::ab4a:95f7:26bd:82dd/64'}}
有关详细信息,请参阅 GitHub 页面:https://github.com/tech-novic/get-nic-details
我想检测连接到 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 连接的适配器的最佳方法是什么?
使用 psutil.net_if_stats()
仅获取 up 和 运行 网络接口:
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']
有一个 python 包 get-nic 提供 NIC 状态,up\down,ip addr,mac addr 等
pip install get-nic
from get_nic import getnic
getnic.interfaces()
Output: ["eth0", "wlo1"]
interfaces = getnic.interfaces()
getnic.ipaddr(interfaces)
Output:
{'lo': {'state': 'UNKNOWN', 'inet4': '127.0.0.1/8', 'inet6': '::1/128'}, 'enp3s0': {'state': 'DOWN', 'HWaddr': 'a4:5d:36:c2:34:3e'}, 'wlo1': {'state': 'UP', 'HWaddr': '48:d2:24:7f:63:10', 'inet4': '10.16.1.34/24', 'inet6': 'fe80::ab4a:95f7:26bd:82dd/64'}}
有关详细信息,请参阅 GitHub 页面:https://github.com/tech-novic/get-nic-details