linux – ethtool获取永久MAC地址返回全0

我需要读取网络适配器的永久(烧录)MAC地址.由于MAC地址很容易被欺骗,我需要读取写在EEPROM上的真实地址.我需要在Linux上使用C来完成它.

我尝试使用ethtool非常好,工作正常.但是在某些系统上,它不能像预期的那样工作.

ethtool -P eth0

返回:

Permanent address: 00:00:00:00:00:00

ethtool -e eth0

返回:

Cannot get EEPROM data: Operation not supported

网络适​​配器具有以下信息:

>司机:ucc_geth
>版本:1.1
> firmware-version:N / A.
> bus-info:QUICC ENGINE

Linux内核版本是:2.6.32.13

问题是:我能解决任何更新(驱动程序,内核等)的问题吗?

另外,我使用C中的ioctl函数进行相同的ethtool调用.有没有办法在代码中解决这个问题?或者还有其他方法可以从EEPROM获取永久MAC地址吗?

最佳答案
如果您信任本地计算机不要欺骗,ifconfig和ip addr都会为您提供硬件的MAC地址.

如果您不信任本地计算机,则ethtool,ifconfig和ip都不会为您提供所需的信息.由于MAC欺骗有非常合理的原因(例如,以太网卡上的热故障),所有驱动程序仅报告当前的“虚拟”MAC地址,因为如果您需要欺骗地址,则对某些工具不会有好处报告固件地址和其他报告软地址.没有ioctl可以或应该给你硬地址.

要获得硬地址,需要直接读取器件寄存器,因此完全取决于器件.

快速查看ucc_geth.c driver似乎表明芯片本身支持MAC地址重新分配(这是有道理的,因为它需要能够从以太网中发送到其软地址的数据包).这意味着您需要非常慎重地确保获得驱动程序自由地说出的硬地址:

/* For more details see the hardware spec.  */

转载注明原文:linux – ethtool获取永久MAC地址返回全0 - 代码日志