ハードウェアデバイスを介して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

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: 

単一のコマンドとして使用するには、エイリアスとして作成します。シェルの初期化ファイルに次の行を追加します(~/.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

誰かがよりきちんとしたことを思い出す場合に備えて、これを開いておきます。しかし、結局私がしたことは、次のものlspciと組み合わせることでしたethtool

[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アドレスを決定できます。

関連情報