如何在Python中获取网卡名称?

36 投票
9 回答
103483 浏览
提问于 2025-04-16 04:50

有没有办法获取机器上网卡的名称,比如 eth0、lo 这些?如果有的话,应该怎么做呢?

我查了一些资料,但到目前为止只找到了一些代码,可以获取 IP 地址和 MAC 地址,比如下面这个:

import socket
socket.gethostbyname(socket.gethostname())

如果能对这些代码给点建议,那就太好了。

9 个回答

45

在Linux系统中,你可以通过查看/sys/class/net/这个文件夹里的内容来列出网络连接。

os.listdir('/sys/class/net/')

不过我不太确定这个方法在所有的Linux版本上都能用。

53

我用过一个很棒的Python库,叫做 psutil。这个库可以在Linux、Windows和OSX等多个平台上使用,支持的Python版本从2.6到3.6都有。

Psutil提供了一个叫做 net_if_addrs() 的函数。这个函数会返回一个字典,字典的键是网络接口卡(NIC)的名称,而值是一个包含每个地址的命名元组的列表。这个元组里包括了地址类型、NIC地址、子网掩码、广播地址和目标地址等信息。

下面是一个简单的例子,使用 net_if_addrs() 函数,它会打印出一个包含NIC名称的Python列表:

import psutil

addrs = psutil.net_if_addrs()
print(addrs.keys())
13

我觉得标准库里没有什么可以用来查询这些名称的工具。

如果我在Linux系统上需要这些名称,我会解析一下ifconfig的输出结果或者查看/proc/net/dev里的内容。你可以看看这个博客文章,里面有类似的问题。

撰写回答