Esiste un comando Linux che mi consente di ottenere l'indirizzo MAC del mio router?
Esiste un comando Linux che mi consente di ottenere l'indirizzo MAC del mio router?
Risposte:
Mi piacciono i one-liner:
arping -f -I $(ip route show match 0/0 | awk '{print $5, $3}')
arping
mostra il MAC associato all'indirizzo IP del gateway predefinito dall'output di ip route show match 0/0
, analizzato da awk
.
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.
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 list
per vedere quale default
router 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 -6
l'interruttore, ip -6 route list
.
default via 192.168.11.1 dev eth0 proto static
Per visualizzare l'indirizzo MAC dell'indirizzo default
IP del router, utilizzare ip neigh
e 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
Se non conosci l'IP del tuo router, molto probabilmente è il tuo gateway che puoi ottenere dal route
comando :
$ 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 Gateway
colonna 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
.
arp -n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}'
Ecco una riga che funziona in 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
restituisce qualcosa del tipo:
impostazione predefinita tramite 192.168.0.1 dev eth1 proto static metric 100
otteniamo IP da quella linea come terzo campo con cut
e 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.1
con 192.168.0.10
), la linea abbinata sarebbe simile a:
192.168.0.1 dev eth1 lladdr ca: fe: ba: be: be: af REACHABLE
CA: FE: BA: BE: BE: AF
echo ${info[5]^^}
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
ping 192.168.0.1
) dovresti avere il suo indirizzo MAC nella cache arp ...
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]'