ethtool -P 是查看网卡永久 MAC 地址最直接可靠的方式,该地址由厂商烧录于硬件EEPROM中,不受软件修改影响,适用于授权、审计等需唯一不可变标识的场景。

在 Linux 中,ethtool -P 是查看网卡**永久 MAC 地址(Permanent MAC Address)**最直接、最可靠的方式,该地址由网卡厂商烧录在 EEPROM 或闪存中,通常不会被系统启动时的配置或用户修改覆盖,因此非常适合用于授权、审计、设备绑定等需要唯一且不可变标识的场景。
确认网卡设备名并检查是否支持 -P 参数
先用 ip link show 或 ls /sys/class/net/ 列出物理网卡(如 eth0、enp3s0、ens33 等),注意排除 lo、docker0、veth* 等虚拟接口。
运行以下命令验证是否支持 -P:
ethtool -P eth0 2>/dev/null || echo "不支持 -P(可能是老旧驱动或虚拟网卡)"
若返回 Permanent address: xx:xx:xx:xx:xx:xx,说明支持;若报错 No data available 或 Operation not supported,则该网卡驱动未实现该接口(常见于某些 USB 网卡、VMware 虚拟网卡、或极老内核)。
使用 ethtool -P 获取永久 MAC 地址
执行命令(以 eth0 为例,替换为实际网卡名):
ethtool -P eth0
输出示例:
Permanent address: 00:1a:2b:3c:4d:5e
这个值即为硬件出厂时写入的 MAC 地址,与当前运行时的 Current address(可通过 ip link show eth0 | grep link/ether 查看)可能不同(例如被 ip link set eth0 address 或 macchanger 修改过)。
批量采集与审计脚本建议
对于多网卡服务器或批量审计,可使用如下简洁命令提取所有物理网卡的永久 MAC:
for iface in $(find /sys/class/net -maxdepth 1 -type l ! -lname '*virtual*' -printf '%f\n' 2>/dev/null | grep -E '^(en|eth|em|p[0-9]|bond)'); do [ -d "/sys/class/net/$iface/device" ] && echo "$iface: $(ethtool -P "$iface" 2>/dev/null | awk '{print $3}')"; done | sort
说明:
- 过滤掉虚拟网卡(
! -lname '*virtual*')和回环接口 - 只处理有
/device目录的物理网卡(排除 team/bond slave、veth 等) - 自动跳过不支持
-P的接口(2>/dev/null) - 结果形如:
enp0s3: 00:0c:29:ab:cd:ef
注意事项与替代方案
当 ethtool -P 不可用时,可尝试以下方法(但可靠性略低):
-
读取 sysfs 固定路径:部分驱动将永久 MAC 暴露在
/sys/class/net/eth0/device/uevent中(搜索ADDR=行),或/sys/class/net/eth0/address—— 但该文件显示的是当前 MAC,非永久值,不可直接用于审计 -
使用 lspci + vendor tool:对 Intel 网卡,可用
sudo lspci -vv -s $(lspci | grep Ethernet | head -1 | cut -d' ' -f1) | grep -A10 "Capabilities.*PCIe.*MAC",再配合eeupdate工具读取 ROM,但需额外安装且非通用 - BIOS/UEFI 设置界面:部分服务器主板在网卡设置页会显示“Factory MAC”或“Burned-in MAC”,适合离线核查
务必避免依赖 ifconfig、ip link 显示的当前 MAC 地址做授权校验,因其易被动态修改,不具备审计刚性。











