Come posso ottenere l'indirizzo MAC del mio router?


13

Esiste un comando Linux che mi consente di ottenere l'indirizzo MAC del mio router?


1
quale? il router dovrebbe avere più indirizzi mac per entrambi i lati della comunicazione (in entrata / in uscita).
mchid

Questo dovrebbe andare in Super User?

Risposte:


6

Mi piacciono i one-liner:

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

arpingmostra il MAC associato all'indirizzo IP del gateway predefinito dall'output di ip route show match 0/0, analizzato da awk.


Ho provato questo (e altre risposte). Danno buone informazioni, ma l'indirizzo MAC mostrato era spento da due cifre da quello che stavo cercando. La mia stampante elenca due router con lo stesso SSID (probabilmente guest e normale) e vuole che scelga per indirizzo MAC. Questa risposta askubuntu.com/a/222553 mi dà uno dei due elencati, con il iwconfig | grep "Access Point"comando. Penso che quello che era spento da due era la versione cache della connessione cablata, che ho staccato per cercare di assicurarmi di ottenere il percorso wireless.
hlongmore

10

Non utilizzare i comandi obsoleti ifconfig(8), arp(8) o route(8). Usa il nuovo comando che li sostituisce e può fare di più, ip(8).

Usa ip route listper vedere quale defaultrouter ha la tua macchina. Dovrebbe essere una linea che inizia con default(o 0.0.0.0) e dopo l'indirizzo IP al router. Se si utilizza IPv6, basta aggiungere -6l'interruttore, ip -6 route list.

default via 192.168.11.1 dev eth0  proto static 

Per visualizzare l'indirizzo MAC dell'indirizzo defaultIP del router, utilizzare ip neighe cercare la riga con l'indirizzo IP e l'indirizzo MAC successivi lladdr.

192.168.11.1 dev eth0 lladdr 1c:af:f7:XX:XX:XX REACHABLE

4

Se non conosci l'IP del tuo router, molto probabilmente è il tuo gateway che puoi ottenere dal 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

Nota la linea con le bandiere UG. L'indirizzo nella Gatewaycolonna di quella riga è quello che stai cercando. Quindi segui il suggerimento di 2707974 con arp -n( esegui il ping dell'IP se inizialmente non viene visualizzato) e trova la riga corrispondente:

$ 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

Qui sarebbe il MAC del tuo router 00:11:22:33:44:55.


2
Il corrispondente one-liner:arp -n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}'
Falko

3

Ecco una riga che funziona in 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 restituisce qualcosa del tipo:

    impostazione predefinita tramite 192.168.0.1 dev eth1 proto static metric 100

  2. otteniamo IP da quella linea come terzo campo con cute grep line contenente quell'IP e lo spazio immediato dopo l'output del vicinato di rete. (lo spazio è necessario per evitare la corrispondenza di 192.168.0.1con 192.168.0.10), la linea abbinata sarebbe simile a:

    192.168.0.1 dev eth1 lladdr ca: fe: ba: be: be: af REACHABLE

  3. Ora otteniamo il quinto campo e lo rendiamo maiuscolo:

    CA: FE: BA: BE: BE: AF


2
Una spiegazione in più aiuterebbe il resto di noi a capire la tua sceneggiatura!
George Udosen,

1
Per l'ultima riga c'è una funzione di Bash che espande una variabile in maiuscolo:echo ${info[5]^^}
David Foerster

1
@DavidFoerster Volevo scrivere un comando portatile ma la variante originale si basava sull'indicizzazione dell'array specifica di zsh (da una), quindi ho aggiornato la risposta con la variante portatile tra le tre shell più popolari
Grief

2

Non è una soluzione completa, ma controlli 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

Questo non ottiene l'indirizzo MAC delle interfacce sul computer, non sul router?
Wilf,

2
Se esegui il ping del tuo router (diciamo ping 192.168.0.1) dovresti avere il suo indirizzo MAC nella cache arp ...
Rmano

grazie @ 2707974 ma non so nessun indirizzo mac nessun indirizzo ip e voglio avere un comando che mi dia solo l'indirizzo IP o l'indirizzo mac del mio router perché voglio usare il comando in uno script python per quello mostra tutto arp la tabella non è utile per me.
user4650183

2

Questa è una versione migliorata della risposta di Grief. È possibile che IP -4 route route 0/0 restituisca più di una riga (IP), nel qual caso la linea completa non funziona. Pertanto, la seguente versione modificata utilizza solo la prima riga restituita dall'elenco indirizzi IP -4 0/0.

ip neigh|grep "$(ip -4 route list 0/0|head -1|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.