Existe um comando Linux que me permita obter o endereço MAC do meu roteador?
Existe um comando Linux que me permita obter o endereço MAC do meu roteador?
Respostas:
Eu gosto de one-liners:
arping -f -I $(ip route show match 0/0 | awk '{print $5, $3}')
arpingmostra o MAC associado ao endereço IP do gateway padrão da saída de ip route show match 0/0, analisado por awk.
iwconfig | grep "Access Point"comando Acho que a que estava desativada por duas foi a versão em cache da conexão com fio, que desconectei para tentar ter certeza de que estava recebendo a rota sem fio.
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 listpara ver qual defaultroteador sua máquina possui. Essa deve ser uma linha que começa com default(ou 0.0.0.0) e depois tem o endereço IP para o roteador. Se você usa o IPv6, basta adicionar o -6switch ip -6 route list,.
default via 192.168.11.1 dev eth0 proto static
Para ver o endereço MAC do endereço defaultIP do roteador, use ip neighe procure a linha com o endereço IP e o endereço MAC depois lladdr.
192.168.11.1 dev eth0 lladdr 1c:af:f7:XX:XX:XX REACHABLE
Se você não conhece o IP do seu roteador, provavelmente é o seu gateway que você pode obter com o routecomando :
$ 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
Observe a linha com as bandeiras UG. O endereço na Gatewaycoluna dessa linha é o que você está procurando. Em seguida, siga a sugestão de 2707974 com arp -n(execute ping no IP se ele não aparecer primeiro) e encontre a linha correspondente:
$ 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.
arp -n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}'
Aqui está um forro que trabalha em dash, bashe 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 proto static metric 100
obtemos o IP dessa linha como terceiro campo, com uma cutlinha grep contendo esse IP e o espaço imediato após a saída da vizinhança da rede. (é necessário espaço para evitar a correspondência de 192.168.0.1com 192.168.0.10), a linha combinado seria algo como:
192.168.0.1 dev eth1 lladdr ca: fe: ba: be: be: af REACHABLE
CA: FE: BA: BE: BE: AF
echo ${info[5]^^}
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
ping 192.168.0.1) então você deve ter seu endereço MAC no cache de arp ...
Esta é uma versão aprimorada da resposta de Grief. É possível que a lista de rotas ip -4 0/0 retorne mais de uma linha (IP); nesse caso, o liner completo não funcionará. Portanto, a seguinte versão modificada usa apenas a primeira linha que a lista de rotas ip -4 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]'