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

use*_*183 16 command-line networking

是否有 Linux 命令允许我获取路由器的 MAC 地址?

And*_*ers 13

不要使用过时的命令ifconfig(8)、arp(8) 或route(8)。使用替换它们的新命令并且可以执行更多操作,ip(8)。

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

default via 192.168.11.1 dev eth0  proto static 
Run Code Online (Sandbox Code Playgroud)

要查看default路由器 IP 地址的 MAC 地址,请使用ip neigh并查找lladdr.e之后包含 IP 地址和 MAC 地址的行

192.168.11.1 dev eth0 lladdr 1c:af:f7:XX:XX:XX REACHABLE
Run Code Online (Sandbox Code Playgroud)

如果在列表中没有找到机器,则需要连接到它,因为它已经从列表中删除了一段时间不使用。所以试试吧:

ping -c 3 192.168.11.1
Run Code Online (Sandbox Code Playgroud)

然后ip neigh再次尝试该命令。该选项-c 3将限制ping为仅发送三个ICMP ECHO消息然后结束。如果未设置,它将一直运行,直到您使用C-c.


gli*_*dud 7

如果您不知道路由器的 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
Run Code Online (Sandbox Code Playgroud)

请注意带有标志的行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
Run Code Online (Sandbox Code Playgroud)

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

  • 对应的单行:``arp ​​-n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}'`` (2认同)

Eri*_*lho 7

我喜欢单线:

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

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


Gri*_*ief 5

这是适用于dash,bash和的单行代码zsh

ip neigh|grep "$(ip -4 route list 0/0|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'
Run Code Online (Sandbox Code Playgroud)
  1. ip -4 route list 0/0返回类似以下内容:

默认通过 192.168.0.1 dev eth1 proto static metric 100

  1. 我们从该行获取 IP 作为第三个字段,并使用cutgrep 行包含该 IP 以及从网上邻居的输出中紧随其后的空格。(需要空格以避免与 匹配192.168.0.1192.168.0.10,匹配的行将类似于:

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

  1. 现在我们得到第五个字段并将其设为大写:

CA:FE:BA:BE:BE:AF

  • 多一点解释将有助于我们其他人理解您的脚本! (2认同)