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

Networking 使用Bash脚本返回本地网络中活动接口的MAC地址,networking,ubuntu,local,mac-address,Networking,Ubuntu,Local,Mac Address,我在本地网络中有一台Ubuntu服务器,网络上有许多其他设备,包括局域网和无线设备。我想运行一个脚本来找出在本地网络中所有机器上使用的接口的MAC地址(每台机器只有一个)。这意味着,根据某人的笔记本电脑使用的是什么(局域网、无线或其他),它将只返回活动接口的地址 我不确定使用哪个命令(可能是arp?)ifconfig仅适用于我的本地计算机,但我想从堆栈溢出问题中执行类似的操作 如何实现这一点?对于启用的接口,大多数unix在ifconfig(8)输出的标志行上提供了一个“UP”标志,您可以在该标

我在本地网络中有一台Ubuntu服务器,网络上有许多其他设备,包括局域网和无线设备。我想运行一个脚本来找出在本地网络中所有机器上使用的接口的MAC地址(每台机器只有一个)。这意味着,根据某人的笔记本电脑使用的是什么(局域网、无线或其他),它将只返回活动接口的地址

我不确定使用哪个命令(可能是arp?)
ifconfig
仅适用于我的本地计算机,但我想从堆栈溢出问题中执行类似的操作

如何实现这一点?

对于启用的接口,大多数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行的
向上

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


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

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

简言之:

netstat -rn (local subnet/mask)
然后

netstat -rn (local subnet/mask)
/sbin/arp -n