使用Bash脚本返回本地网络中活动接口的MAC地址

时间:2011-07-06 04:18:12

标签: networking ubuntu local mac-address

我在本地网络中有一台Ubuntu服务器,网络上有许多其他设备,包括LAN和无线设备。我想运行一个Bash脚本来查找本地网络中所有计算机上正在使用的接口的MAC地址(每台计算机只有一个)。这意味着取决于某人的笔记本电脑使用的内容(LAN或无线或其他),它只返回活动界面的地址。

我不确定使用哪个命令(也许是arp?)。 ifconfig仅适用于我的本地计算机,但我想在Stack Overflow问题 regular expression 中执行此类Best way to extract MAC address from ifconfig's output?

我该怎么做?

2 个答案:

答案 0 :(得分:0)

对于已启用的接口,大多数unix在ifconfig(8)输出的标志行上提供“UP”标志,您可以匹配该标志。

eth0      Link encap:Ethernet  HWaddr 00:01:29:a3:f6:1d  
          inet addr:192.168.0.254  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::201:29ff:fea3:f61d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:35163720 errors:0 dropped:0 overruns:0 frame:0
          TX packets:36652372 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:32425323589 (32.4 GB)  TX bytes:4255769808 (4.2 GB)
          Interrupt:17 

(注意第4行的UP

但是,您可以启用多个接口,在这种情况下,您可能需要查看路由以确定哪个接口将用于默认路由的路径(ifconfig -rn将有助于此)

$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
.
.
.
0.0.0.0         192.168.0.1     0.0.0.0         UG        0 0          0 eth0

此处0.0.0.0条目是默认路由,192.168.0.1将是将用作默认路由的主机,eth0是流量将被传递的接口。

答案 1 :(得分:0)

使用UNIX arp命令很容易实现,但您只能看到ARP表中主机的MAC地址。使用子网中的每个主机填充表的最佳方法是将nmap与-sP arg一起使用。

简而言之:

netstat -rn (local subnet/mask)

然后

/sbin/arp -n