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}')
arpingpokazuje 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 listaby zobaczyć, który defaultrouter 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ć -6przełącznik ip -6 route list.
default via 192.168.11.1 dev eth0 proto static
Aby zobaczyć adres MAC defaultroutera Adres IP, użyj ip neighi 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 routepolecenia :
$ 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 Gatewaykolumnie 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, bashi 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 cuti 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.1z 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]'