用Python查找我连接的所有网络适配器的脚本

1 投票
2 回答
1598 浏览
提问于 2025-04-18 14:47

我有一台笔记本电脑,它通过一个或多个网络适配器连接到我所在组织的网络。我不太确定该从哪里开始,或者应该在哪里寻找原生的Python方法或其他资源。

我想知道如何用Python发现我连接的所有网络适配器或网络接口卡(NIC)。我希望尽量不使用第三方库,但如果必须使用也没关系。

最终,我想写一个工具,能够持续监测每个网络的连接状态和连接质量。不过,我首先得弄清楚我连接了哪些网络适配器,以及有多少个。

2 个回答

0

我最近需要类似的东西,于是想出了一个用 psutil 实现的解决方案:

>>> import psutil

>>> psutil.net_if_addrs().keys()
dict_keys(['lo', 'eth0', 'docker0'])

我并不是说这个方法比现在大家接受的答案更好、更快、更合适或者更轻量。我只是觉得记录其他解决方案也挺好的。

1

netifaces 是一个不错的起点。从文档中可以看到:

我一直觉得,从Python中获取机器网络接口的地址很麻烦,没什么简单的方法。 [...]

这个包就是为了帮助解决这个问题。

这里有一些相关的例子:

>>> netifaces.interfaces()
['lo0', 'gif0', 'stf0', 'en0', 'en1', 'fw0']

>>> netifaces.ifaddresses('lo0')
{18: [{'addr': ''}],
  2: [{'peer': '127.0.0.1', 'netmask': '255.0.0.0', 'addr': '127.0.0.1'}],
 30: [{'peer': '::1', 'netmask': 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', 'addr': '::1'}, {'peer': '', 'netmask': 'ffff:ffff:ffff:ffff::', 'addr': 'fe80::1%lo0'}]}

你可以通过 pip install netifaces 来安装它。

撰写回答