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.
如果您不知道路由器的 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.
我喜欢单线:
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。
这是适用于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)
ip -4 route list 0/0返回类似以下内容:默认通过 192.168.0.1 dev eth1 proto static metric 100
cutgrep 行包含该 IP 以及从网上邻居的输出中紧随其后的空格。(需要空格以避免与 匹配192.168.0.1)192.168.0.10,匹配的行将类似于:192.168.0.1 dev eth1 lladdr ca:fe:ba:be:be:af 可到达
CA:FE:BA:BE:BE:AF