获取系统的 MAC 地址:eth0 与 PredictableNetworkInterfaceNames

获取系统的 MAC 地址:eth0 与 PredictableNetworkInterfaceNames

我编写了一些具有基本软件许可功能的 C 代码,其中可执行文件只有在我在 C 代码中列入白名单的系统的 MAC 地址时才会运行。我只希望它能在 Linux 上运行。

我正在访问/sys/class/net/eth0/address其中在一行中包含类似a0:b1:c2:d3:e4:f5所有小写字母的内容,这使得获取 MAC 地址非常容易。这只有在你有的情况下才有效,eth0因为我硬编码了fopen( "/sys/class/net/eth0/address", "r" );

我意识到的问题是以太网0部分。随着 BiosDevName 和/或可预测的网络接口命名现在成为默认值 [在 RHEL/CentOS 7 中],我看到的东西类似于eno1而不是eth0第一个具有 MAC 地址的网络设备。不同系统的情况可能会有很大差异。所以我正在处理/sys/class/net/<unknown>/address

获取 Linux 系统的 MAC 地址的最便携、最可靠且不难的方法是什么?我处理的服务器通常有四端口英特尔网卡,但我实际上只需要第一个。我的代码并不关心网络接口名称是什么,我只需要知道存在的一个或多个 MAC 地址。

答案1

如果您只需要提取系统的 MAC 地址并与接口配对,我们可以执行此 Bash 并将其提供给 C 程序。如果我们查看/sys/class/net/*/,我们可以看到文件中包含接口的名称uevent,而文件中包含 MAC 地址address;因此,我们可以根据接口将这两个文件组合在一起。注意:我的 bash 不是最漂亮的,可能有更好的方法来做到这一点。

[user@headdesk eth0]$ cat /sys/class/net/*/uevent /sys/class/net/*/address | grep -v IFINDEX | column | sed 's/INTERFACE=//'
eth0            fa:16:3e:ac:48:74
lo              00:00:00:00:00:00

相关内容