当前,提到的用于获取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版本。
请注意,接口名称和MAC地址是一行中的第一个和最后一个字段,没有前导空格。
如果缩进的一行之一包含inet addr:最新的接口名称,则应打印MAC地址。
inet addr:
ifconfig -a | awk '/^[a-z]/ { iface=$1; mac=$NF; next } /inet addr:/ { print iface, mac }'
请注意,多个接口可能符合您的条件。然后,脚本将打印多行。(; exit如果您始终只想打印第一个匹配项,则可以在最后一个大括号之前添加。)
; exit