Como obtenho o endereço MAC do meu roteador?

13

Existe um comando Linux que me permita obter o endereço MAC do meu roteador?

user4650183
fonte
1
qual? seu roteador deve ter vários endereços mac para os dois lados da comunicação (entrada / saída).
Mchid 04/04
Isso deve ocorrer no Superusuário?

Respostas:

6

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.

Eric Carvalho
fonte
Eu tentei isso (e outras respostas). Eles fornecem boas informações, mas o endereço MAC mostrado foi desativado em dois dígitos do que eu estava procurando. Minha impressora lista dois roteadores com o mesmo SSID (provavelmente convidado e regular) e quer que eu escolha o endereço MAC. Esta resposta askubuntu.com/a/222553 fornece um dos dois listados, com o 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.
precisa saber é o seguinte
10

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
Anders
fonte
4

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.

glibdud
fonte
2
O one-liner correspondente:arp -n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}'
Falko
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]'
  1. ip -4 route list 0/0 retorna algo como:

    padrão via 192.168.0.1 dev eth1 proto static metric 100

  2. 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

  3. Agora obtemos o quinto campo e o colocamos em maiúsculas:

    CA: FE: BA: BE: BE: AF

Luto
fonte
2
Um pouco mais de explicação ajudaria o resto de nós a entender seu script!
George Udosen 22/03
1
Para a última linha, há um recurso Bash que expande uma variável para maiúscula:echo ${info[5]^^}
David Foerster 22/03
1
@DavidFoerster eu queria escrever um comando portátil, mas a variante originais invocada específicas de indexação de matriz para zsh (de um) para que eu atualizei a resposta com a variante portátil entre três a maioria das conchas populares
Grief
2

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
2707974
fonte
Isso não obtém o endereço MAC das interfaces no computador, não no roteador?
Wilf
2
Se você ping seu roteador (por exemplo ping 192.168.0.1) então você deve ter seu endereço MAC no cache de arp ...
Rmano
obrigado @ 2707974 mas eu não sei nenhum endereço mac nenhum endereço ip e quero ter um comando que me dê apenas o endereço ip ou endereço mac do meu roteador, porque eu quero usar o comando em um script python para esse show all arp mesa não é útil para mim.
user4650183
2

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]'
Schtibb
fonte