我在本地网络中有一台Ubuntu服务器,网络上有许多其他设备,包括LAN和无线设备。我想运行一个Bash脚本来查找本地网络中所有计算机上正在使用的接口的MAC地址(每台计算机只有一个)。这意味着取决于某人的笔记本电脑使用的内容(LAN或无线或其他),它只返回活动界面的地址。
我不确定使用哪个命令(也许是arp?)。 ifconfig
仅适用于我的本地计算机,但我想在Stack Overflow问题 regular expression 中执行此类Best way to extract MAC address from ifconfig's output?。
我该怎么做?
答案 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