一尘不染

使用Shell脚本获取MAC地址

linux

当前,提到的用于获取MAC地址的所有解决方案始终使用eth0。但是,如果接口不是以eth0开头,该怎么办呢?同样在OS X上,接口名称也不同。
eth0接口也可能存在但未使用。即不活跃,它没有一个IP。

因此,有没有一种方法可以获取第一个可用接口Active的MAC地址(即,它具有一个inet地址,我什至不希望有人拥有inet6)。

例如

eth0      Link encap:Ethernet  HWaddr <some addr>
          inet6 addr: <some addr> Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:123
          RX packets:123 errors:123 dropped:123 overruns:123 frame:123
          TX packets:123 errors:123 dropped:123 overruns:123 carrier:123
          collisions:123 txqueuelen:123 
          RX bytes:123 (123 MB)  TX bytes:123 (123 KB)
          Interrupt:123 Memory:00000000-00000000

eth1      Link encap:Ethernet  HWaddr <some addr>
          inet addr:<some addr>  Bcast:<some addr>  Mask:<some addr>
          inet6 addr: <some addr> Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:123 Metric:123
          RX packets:123 errors:123 dropped:123 overruns:123 frame:123
          TX packets:123 errors:123 dropped:123 overruns:123 carrier:123
          collisions:123 txqueuelen:123 
          RX bytes:123 (123 MB)  TX bytes:123 (123 KB)
          Interrupt:123 Memory:00000000-00000000

注意:我更改了输出值。

因此,在这种情况下,我想要的是eth1而不是eth0的HWaddr。我如何找到它?它还应适用于所有Linux版本。


阅读 1145

收藏
2020-06-03

共1个答案

一尘不染

请注意,接口名称和MAC地址是一行中的第一个和最后一个字段,没有前导空格。

如果缩进的一行之一包含inet addr:最新的接口名称,则应打印MAC地址。

ifconfig -a |
awk '/^[a-z]/ { iface=$1; mac=$NF; next }
    /inet addr:/ { print iface, mac }'

请注意,多个接口可能符合您的条件。然后,脚本将打印多行。(; exit如果您始终只想打印第一个匹配项,则可以在最后一个大括号之前添加。)

2020-06-03