如何获得路由器的MAC地址?


13

是否有Linux命令可以让我获取路由器的MAC地址?


1
哪一个?您的路由器应该在通信的两面(传入/传出)都具有多个mac地址。
mchid 2015年

这应该进入超级用户吗?

Answers:


6

我喜欢单线:

arping -f -I $(ip route show match 0/0 | awk '{print $5, $3}')

arping显示与ip route show match 0/0解析的的输出中与默认网关IP地址关联的MAC awk


我尝试了这个(以及其他答案)。他们提供了很好的信息,但是显示的MAC地址与我要查找的地址相差两位数。我的打印机列出了两个具有相同SSID的路由器(可能是访客和常规),并希望我按MAC地址进行选择。这个答案askubuntu.com/a/222553通过iwconfig | grep "Access Point"命令给了我列出的两个之一。我认为那是有线连接的缓存版本,它减少了两倍,我拔掉了插头以确保获得无线路由。
hlongmore

10

不要使用废弃的命令ifconfig(8),arp(8)或route(8)。使用新命令替换它们,并可以做更多的事情ip(8)。

ip route list看哪个default路由器你的机器有。那应该是一个以default(或0.0.0.0)开头的行,之后是路由器的IP地址。如果使用IPv6,只需添加-6开关ip -6 route list

default via 192.168.11.1 dev eth0  proto static 

要查看default路由器IP地址的MAC地址,请使用ip neigh并查找带有IP地址和MAC地址的行lladdr

192.168.11.1 dev eth0 lladdr 1c:af:f7:XX:XX:XX REACHABLE

4

如果您不知道路由器的IP,最有可能从以下route命令获取网关:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

注意带有标志的行UG。该Gateway行列中的地址就是您要查找的地址。然后按照2707974的建议进行操作arp -n(如果一开始没有显示IP,请对其进行ping操作),并找到匹配的行:

$ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.1              ether   00:11:22:33:44:55   C                     eth0
192.168.0.2              ether   66:77:88:99:aa:bb   C                     eth0

在这里,您路由器的MAC将为00:11:22:33:44:55


2
相应的单线:arp -n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}'
Falko,2016年

3

这里是一个班轮这工作dashbash并且zsh

ip neigh|grep "$(ip -4 route list 0/0|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'
  1. ip -4 route list 0/0 返回类似:

    默认通过192.168.0.1 dev eth1 proto static metric 100

  2. 我们从该行获取IP作为第三字段,cut并从网络邻居的输出中获取包含该IP及其后面立即空间的grep行。(需要空间,以避免的匹配192.168.0.1192.168.0.10),则匹配线会是这样的:

    192.168.0.1 dev eth1 lladdr ca:fe:ba:be:be:af可到达

  3. 现在我们获取第五个字段并将其变为大写:

    CA:FE:BA:BE:BE:AF


2
多一点解释将有助于我们其他人了解您的脚本!
George Udosen '17

1
对于最后一行,有一个Bash功能,可将变量扩展为大写:echo ${info[5]^^}
David Foerster

1
@DavidFoerster我想编写一个可移植的命令,但是原始变体依赖于zsh专用的数组索引(从一个),因此我用三个最流行的shell之间的可移植变体更新了答案
Grief

2

这不是一个完整的解决方案,但是您检查了arp -n。

ddd@mmm ~ $ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
xxx.xxx.xxx.xxx          ether   00:e0:1e:b4:12:42   C                     eth0
yyy.yyy.yyy.yyy          ether   00:14:78:52:28:d2   C                     wlan0

这不是获取计算机而不是路由器上接口的MAC地址吗?
2015年

2
如果您对路由器执行ping操作(例如ping 192.168.0.1),则应将其MAC地址放在arp缓存上...
Rmano 2015年

谢谢@ 2707974,但我不知道没有mac地址,没有ip地址,我想拥有一个仅给我路由器的ip地址或mac地址的命令,因为我想在脚本python中使用该命令来显示所有arp桌子对我没有用。
user4650183 2015年

2

这是Grief答案的改进版本。ip -4路由列表0/0可能返回多条线路(IP),在这种情况下,完整的一根衬垫将不起作用。因此,以下修改后的版本仅使用ip -4路由列表0/0返回的第一行。

ip neigh|grep "$(ip -4 route list 0/0|head -1|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.