如何通过硬件设备查看MAC地址?

如何通过硬件设备查看MAC地址?

有没有简单的方法通过硬件设备查看MAC地址?我知道您可以将一大堆 Bash 逻辑与 sed 结合在一起来完成此操作,但我认为必须有一种更简单的方法来获取此信息。例如:您有一台带有一大堆网卡的服务器,并且您想按设备查看 MAC 地址?我可以弄清楚如何手动关联它们,或者我可以从 IPMI 中提取信息,但 Linux 似乎总是有一种快速的方法来做事 - 我只是不知道在这种情况下它是什么。我正在寻找的是这样的:

<Some command>

NIC 1 - Intel x710
<its MACs>
NIC 2 - MLX5
<its MACs>
NIC 3 - Broadcom Whatever
<its MACs>

类似的事情。重要的是确定网卡的型号:Mellanox MLX5、Intel x710等

答案1

ip link恰恰表明了这一点。我的看起来大致像

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 4000 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether aa:aa:bb:bb:cc:dd brd ff:ff:ff:ff:ff:ff
3: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:01:02:03:04:05 brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 10:0F:0E:0D:0C:0B brd ff:ff:ff:ff:ff:ff

没有“没有太多 shell 逻辑”的方式将 Linux 网络接口映射到“设备名称”(例如“NIC 1 - Intel x710”),特别是在像 x710 这样的多端口 SFP+ 卡的情况下;它们旨在提供虚拟功能,因此“一个 Linux 网络设备属于一个硬件设备”的映射在两个方向上都不起作用。

答案2

您可以通过以下方式获取网卡的所有 MAC 地址:

$ cat /sys/class/net/*/address
c8:5b:76:9e:65:9a
22:60:04:08:f0:37
00:00:00:00:00:00

34:f3:9a:01:e6:22

所以你可以轻松地将其扩展到:

$ ( cd /sys/class/net/ && for i in *; do printf '%s: %s\n' "$i" $(cat "$i"/address); done )
enp0s31f6: c8:5b:76:9e:65:9a
ipv6leakintrf0: 22:60:04:08:f0:37
lo: 00:00:00:00:00:00
tun0: 
wlp3s0: 34:f3:9a:01:e6:22

ip但实际上,解析命令的输出马库斯·穆勒给出是你最好的选择:

$ ip link | awk '$1~/^[0-9]*:/{printf "%s ", $2} /^ /{print $2}'
lo: 00:00:00:00:00:00
enp0s31f6: c8:5b:76:9e:65:9a
wlp3s0: 34:f3:9a:01:e6:22
ipv6leakintrf0: 22:60:04:08:f0:37
tun0: 

而且,如果您希望将其作为单个命令,只需将其设置为别名即可。将此行添加到 shell 的初始化文件中(~/.bashrc如果使用bash):

alias getMac="ip link | awk '\$1~/^[0-9]*:/{printf \"%s \", \$2} /^ /{print \$2}'"

然后,打开一个新终端并:

$ getMac 
lo: 00:00:00:00:00:00
enp0s31f6: c8:5b:76:9e:65:9a
wlp3s0: 34:f3:9a:01:e6:22
ipv6leakintrf0: 22:60:04:08:f0:37
tun0: 

答案3

我会保留这个开放,以防有人想出更干净的东西,但我最终做的是结合lspciethtool

[root@gputest ~]# lspci -v | grep Ethernet
04:00.0 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 Gigabit Ethernet PCIe
04:00.1 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 Gigabit Ethernet PCIe
31:00.0 Ethernet controller: Intel Corporation Ethernet Controller E810-XXV for SFP (rev 02)
        Subsystem: Intel Corporation Ethernet 25G 2P E810-XXV OCP
31:00.1 Ethernet controller: Intel Corporation Ethernet Controller E810-XXV for SFP (rev 02)
        Subsystem: Intel Corporation Ethernet 25G 2P E810-XXV OCP
98:00.0 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
98:00.1 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
b1:00.0 Ethernet controller: Mellanox Technologies MT28800 Family [ConnectX-5 Ex]
b1:00.1 Ethernet controller: Mellanox Technologies MT28800 Family [ConnectX-5 Ex]
[root@gputest ~]# ethtool -i eno8303
driver: tg3
version: 4.18.0-348.2.1.el8_5.x86_64
firmware-version: FFV21.81.3 bc 5720-v1.39
expansion-rom-version:
bus-info: 0000:04:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
[root@gputest ~]# ethtool -i eno8403
driver: tg3
version: 4.18.0-348.2.1.el8_5.x86_64
firmware-version: FFV21.81.3 bc 5720-v1.39
expansion-rom-version:
bus-info: 0000:04:00.1
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
[root@gputest ~]# ethtool -i eno12399
driver: ice
version: 4.18.0-348.2.1.el8_5.x86_64
firmware-version: 3.00 0x80008943 20.5.13
expansion-rom-version:
bus-info: 0000:31:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes

通过检查域/总线/功能编号,lspci您可以将它们与输出进行比较ethtool,并确定哪些设备名称与哪种型号的卡相关联,并从那里确定 MAC 地址。

相关内容