唯一能读取网卡eeprom中出厂烧录物理mac地址的方法是sudo ethtool -p iface,因ip link show、/sys/class/net/xxx/address等仅显示当前生效mac,可能被ip link set临时修改,无法用于硬件身份核验。

ethtool -P 是唯一能读取网卡 EEPROM 中出厂烧录的物理 MAC 地址的方法,其他所有方式(包括 ip link show、/sys/class/net/xxx/address、ifconfig)返回的都是当前生效地址,可能已被临时修改。
为什么 ip link show 显示的不是物理地址
ip link show ens33 输出中 link/ether 后的值,是内核当前使用的 MAC,它可被 ip link set dev ens33 address 00:11:22:33:44:55 随时覆盖。重启后若未持久化配置,会还原;但只要改过,所有常规命令就都显示新值。这导致它无法用于硬件身份核验、资产登记或 License 绑定等场景。
ethtool -P 必须加 sudo 且参数是大写 P
常见错误包括:
- 漏掉
sudo→ 提示Operation not permitted或无输出 - 误用小写
-p→ 触发网卡指示灯闪烁,不输出地址 - 对虚拟设备执行(如
vethabc123、docker0)→ 返回No data available - 对部分 Realtek、USB 或老旧 Intel 千兆网卡执行 → 返回全零
00:00:00:00:00:00或空行
正确用法:sudo ethtool -P ens33,输出形如 Permanent address: 00:11:22:33:44:55。
怎么确认你查的是真实物理网卡
系统里常有多个 en* 接口,但并非全是物理网卡。容易混淆的有:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
enp0s3、ens160这类是典型物理网卡名(来自lspci绑定) -
ens33可能是 VMware 虚拟网卡,也可能是物理口——得靠lspci -k | grep -A 3 -i ethernet看驱动是否绑定到真实 PCIe 设备 -
enp0s31f6这类名字可能对应板载 Intel I219-V,而enp0s20f0u2c4很可能是 USB 网卡
安全做法:先运行 lspci | grep -i ethernet,再用 lspci -vv -s [slot] 查看 Subsystem 字段,部分厂商会把 MAC 编码进字符串里。
脚本中安全获取永久 MAC 的 fallback 逻辑
不能假设 ethtool -P 总可用。推荐按优先级尝试:
- 先跑
sudo ethtool -P "$iface" 2>/dev/null | awk '/Permanent address:/ {print $3}',检查是否为合法xx:xx:xx:xx:xx:xx格式 - 失败则查 BIOS/UEFI 设置界面(部分主板支持查看板载网卡原始 MAC)
- 再失败可翻设备标签、包装盒,或用厂商工具(如 Dell Command | Configure)导出硬件报告
注意:/sys/class/net/xxx/address 读起来快、无需 root,但它和 ip link show 是同一来源,永远不是“物理”地址——这点在写审计脚本时最容易忽略。










