目前提到的用于获取MAC地址的所有解决scheme都始终使用eth0。 但是,如果不是eth0,我的接口以eth1开头。 在OS X上,接口名称也是不同的。
接口eth0也可能存在,但未被使用。 即不活跃,它没有一个IP。
那么是否有一种方法可以获得第一个可用接口的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
注:我已经改变了输出的值。
Bash Shell – The:Command
检测字符设备是否在Linux中与termios api(c ++)断开连接
–enable-phar = shared我是否需要重新编译PHP才能安装Composer?
无法只用Linux date命令设置一年
所以在这种情况下,我需要HWaddr为eth1而不是eth0。 我如何find它? 也应该适用于所有的Linux版本。
x86 linux cr3注册解除引用(我怎样才能到达一个页面目录?)
在Linux和Windows下混合使用cin和getline
NVCC CUDA交叉编译无法find“-lcudart”
Linux中的Python Pickle文件与Mac不兼容?
SCP文件从本地到Heroku服务器
注意接口名称和MAC地址是一行中的第一个和最后一个字段,没有前导空格。
如果其中一个缩进行包含inet addr:则应打印最新的接口名称和MAC地址。
ifconfig -a | awk '/^[az]/ { iface=$1; mac=$NF; next } /inet addr:/ { print iface,mac }'
请注意,多个界面可以符合您的标准。 然后,该脚本将打印多行。
你可以做如下
ifconfig <Interface ex:eth0,eth1> | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
你也可以得到所有接口的MAC地址如下
cat /sys/class/net/*/address
对于特定的接口,如eth0
cat /sys/class/net/eth0/address
最好的Linux特定解决方案是使用sysfs:
$ IFACE=eth0 $ read MAC </sys/class/net/$IFACE/address $ echo $IFACE $MAC eth0 00:ab:cd:12:34:56
此方法与其他方法相比非常干净,并且不会产生额外的进程,因为read是POSIX shell的内置命令,包括非BASH shell。 但是,如果你需要OS X的可移植性,那么你将不得不使用ifconfig和sed方法,因为OS X没有象sysfs这样的虚拟文件系统接口。
$ ip route show default | awk '/default/ {print $5}'
返回: eth0 (我的在线界面)
$ cat /sys/class/net/$(ip route show default | awk '/default/ {print $5}')/address
返回: ec:a8:6b:bd:55:05 (eth0的macaddress,我的在线界面)
终端形象
在现代GNU / Linux系统上,您可以看到列出/sys/class/net/内容的可用网络接口 ,例如:
$ ls /sys/class/net/ enp0s25 lo virbr0 virbr0-nic wlp2s0
您可以检查一个接口是否正在查看设备目录中的operstate 。 例如,下面是如何查看enp0s25是否启动:
$ cat /sys/class/net/enp0s25/operstate up
然后你可以得到该接口的MAC地址 :
$ cat /sys/class/net/enp0s25/address ff:00:ff:e9:84:a5
例如 ,下面是一个简单的bash脚本,它打印活动界面的MAC地址:
#!/bin/bash # Print active NICs MAC addresses D='/sys/class/net' for nic in $( ls $D ) do echo $nic if grep -q up $D/$nic/operstate then echo -n ' ' cat $D/$nic/address fi done
$ ./getmacifup.sh enp0s25 ff:00:ff:e9:84:a5 lo wlp2s0
有关详细信息,请参阅内核文档
请记住,从2015年开始,大多数GNU / Linux发行版都切换到systemd ,不再使用ethX接口命名方案 – 现在,他们使用基于硬件拓扑的更强大的命名约定,请参阅:
可预测的网络接口名称
systemd / SRC / udev的/ udev的-内置-net_id.c
获取eth0的MAC地址:
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep HWADDR | cut -c 9-25
例:
[me@machine ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep HWADDR | cut -c 9-25 55:b5:00:10:be:10
哦,如果你只想要mac的以太网mac地址,你可以使用:
ifconfig | grep "ether*" | tr -d ' ' | tr -d 't' | cut -c 6-42
(在Macintosh上工作)
grep – 保持地址的行
tr – 全部清理
cut – 删除“以太”只有地址
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。