Czy istnieje polecenie systemu Linux, które pozwala mi uzyskać adres MAC mojego routera?
Czy istnieje polecenie systemu Linux, które pozwala mi uzyskać adres MAC mojego routera?
Odpowiedzi:
Lubię one-liner:
arping -f -I $(ip route show match 0/0 | awk '{print $5, $3}')
arping
pokazuje MAC powiązany z domyślnym adresem IP bramy z wyjścia ip route show match 0/0
, parsowany przez awk
.
iwconfig | grep "Access Point"
poleceniem. Myślę, że ta, która była wyłączona przez drugą, była buforowaną wersją połączenia przewodowego, którą odłączyłem, aby upewnić się, że otrzymuję trasę bezprzewodową.
Nie używaj przestarzałych poleceń ifconfig
(8), arp
(8) lub route
(8). Użyj nowego polecenia, które je zastąpi i może zrobić więcej ip
(8).
Użyj, ip route list
aby zobaczyć, który default
router ma urządzenie. Powinna to być linia, która zaczyna się od default
(lub 0.0.0.0
) i ma adres IP routera po. Jeśli używa IPv6, wystarczy dodać -6
przełącznik ip -6 route list
.
default via 192.168.11.1 dev eth0 proto static
Aby zobaczyć adres MAC default
routera Adres IP, użyj ip neigh
i wyszukaj wiersz z adresem IP i adresem MAC po lladdr
.
192.168.11.1 dev eth0 lladdr 1c:af:f7:XX:XX:XX REACHABLE
Jeśli nie znasz adresu IP routera, najprawdopodobniej jest to brama, którą możesz uzyskać z route
polecenia :
$ 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
Zwróć uwagę na linię z flagami UG
. Adres w Gateway
kolumnie tego wiersza jest tym, czego szukasz. Następnie postępuj zgodnie z sugestią 2707974 za pomocą arp -n
( pinguj adres IP, jeśli nie pojawi się na początku) i znajdź pasującą linię:
$ 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
Tutaj byłby MAC twojego routera 00:11:22:33:44:55
.
arp -n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}'
Oto jedna wkładka, która działa w dash
, bash
i 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
zwraca coś takiego:
domyślnie przez 192.168.0.1 dev eth1 proto static metric 100
otrzymujemy IP z tej linii jako trzecie pole cut
i linię grep zawierającą ten adres IP i natychmiastową przestrzeń po nim z wyjścia sąsiedztwa sieci. (wymagana jest spacja, aby uniknąć dopasowania 192.168.0.1
z 192.168.0.10
), dopasowana linia wyglądałaby następująco:
192.168.0.1 dev eth1 lladdr ca: fe: ba: be: be: af REACHABLE
CA: FE: BA: BE: BE: AF
echo ${info[5]^^}
Nie jest to kompletne rozwiązanie, ale sprawdzasz 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
To ulepszona wersja odpowiedzi Griefa. Możliwe jest, że lista tras 0/0 dla ip -4 zwraca więcej niż jedną linię (IP), w takim przypadku kompletna jedna linijka nie działa. Tak więc poniższa zmodyfikowana wersja używa tylko pierwszego wiersza, który zwraca lista tras 0/0 dla ip -4.
ip neigh|grep "$(ip -4 route list 0/0|head -1|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'