微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用shell脚本获取MAC地址

目前提到的用于获取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

注:我已经改变了输出的值。

统计某些文件types的磁盘空间

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

以下是一个带有以太网和WiFi接口的系统的输出

$ ./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上工作)

ifconfig获取所有信息

grep – 保持地址的行

tr – 全部清理

cut – 删除“以太”只有地址

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐