可靠地检测物理网络地址

可靠地检测物理网络地址

我正在尝试找到一种方法来列出连接到某个主机的所有网卡/接口的物理(也称为 MAC)地址。问题是,我希望在我的 Debian live(挤压)USB 映像上使用此功能,该映像已插入具有广泛不同硬件的许多不同盒子中。因此,无线驱动程序(例如)在我的 USB 记忆棒上并不总是可用,因此我无法从ifconfig.

我的印象是,我可以通过查询有问题的接口名称在/sys/class/net/*/address哪里来实现这一点。*但这种情况并非如此。我认为即使没有安装设备驱动程序,也应该有一种方法来查询硬件的物理地址。

所以我的问题是:

  1. 即使未安装设备驱动程序,是否真的可以查询网络设备的物理地址?
  2. 如果可以的话,怎样做?

答案1

这是不可能以可靠的方式实现的。网卡需要驱动程序支持,有时需要注入固件才能启动,从而能够回答对其物理地址的查询。

几乎所有有线接口都受标准 Debian 内核支持(至少,我不知道有哪个有线接口不支持,它们非常简单且标准)。无线接口要复杂得多,并且并非所有接口都受支持。他们有时需要专有固件,默认情况下,该固件未打包在 Debian 安装中。

编辑

对于那些对技术细节感兴趣的人,我弄清楚了 Linux 内核如何知道特定接口的 MAC 地址。每个网络驱动程序的结构中有一个字段netdevice用于将自身注册到驱动程序。该字段必须由驱动程序在将设备注册到内核之前填充。有关更多详细信息,请参阅linux/netdevice.hLinux 设备驱动程序,第 3 版,作者:Jonathan Corbet、Greg Kroah-Hartman 和 Alessandro Rubini,第 17.3 节(http://makelinux.net/ldd3/)。

相关内容