Eu gosto de one-liners:
arping -f -I $(ip route show match 0/0 | awk '{print , }')
arping
mostra o MAC associado ao endereço IP do gateway padrão da saída de ip route show match 0/0
, analisada por awk
.
Existe um comando do Linux que me permite obter o endereço MAC do meu roteador?
Eu gosto de one-liners:
arping -f -I $(ip route show match 0/0 | awk '{print , }')
arping
mostra o MAC associado ao endereço IP do gateway padrão da saída de ip route show match 0/0
, analisada por awk
.
Não use os comandos obsoletos ifconfig
(8), arp
(8) ou route
(8). Use o novo comando que os substitui e pode fazer mais, ip
(8).
Use ip route list
para ver qual default
de roteador sua máquina possui. Essa deve ser uma linha que comece com default
(ou 0.0.0.0
) e tenha o endereço IP para o roteador depois. Se você usa o IPv6, basta adicionar a opção -6
, ip -6 route list
.
default via 192.168.11.1 dev eth0 proto static
Para ver o endereço MAC do endereço IP dos default
de roteadores, use ip neigh
e procure a linha com o endereço IP e o endereço MAC após lladdr
.
192.168.11.1 dev eth0 lladdr 1c:af:f7:XX:XX:XX REACHABLE
Se você não sabe o IP do seu roteador, provavelmente é o seu gateway que você pode obter do comando 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
Anote a linha com os sinalizadores UG
. O endereço na coluna Gateway
dessa linha é o que você está procurando. Em seguida, siga a sugestão do 2707974 com arp -n
(execute ping no IP se ele não aparecer primeiro) e encontre o linha de correspondência:
$ 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
Aqui, o MAC do seu roteador seria 00:11:22:33:44:55
.
Não é uma solução completa, mas você verifica 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
Aqui está o one-liner, que funciona em dash
, bash
e zsh
:
ip neigh|grep "$(ip -4 route list 0/0|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'
ip -4 route list 0/0
retorna algo como:
padrão via 192.168.0.1 dev eth1 métrica estática 100
obtemos IP dessa linha como terceiro campo com cut
e grep contendo esse IP e espaço imediato após a saída da vizinhança da rede. (o espaço é necessário para evitar a correspondência de 192.168.0.1
com 192.168.0.10
), a linha correspondente seria algo como:
192.168.0.1 dev eth1 lladdr ca: fe: ba: ser: ser: af REACHHABLE
CA: FE: BA: BE: BE: AF
Esta é uma versão melhorada da resposta do Grief. É possível que a lista de roteamento ip -4 0/0 retorne mais de uma linha (IP), caso em que o liner completo não funciona. Portanto, a seguinte versão modificada usa apenas a primeira linha que a lista de rotas ip 0/0 retorna.
ip neigh|grep "$(ip -4 route list 0/0|head -1|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'
Tags command-line networking