Jak uzyskać adres MAC mojego routera?

13

Czy istnieje polecenie systemu Linux, które pozwala mi uzyskać adres MAC mojego routera?

użytkownik4650183
źródło
1
Który? router powinien mieć wiele adresów mac dla obu stron komunikacji (przychodzącej / wychodzącej).
mchid
Czy powinno to być w Super User?

Odpowiedzi:

6

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.

Eric Carvalho
źródło
Próbowałem tego (i innych odpowiedzi). Dają dobre informacje, ale pokazany adres MAC był wyłączony dwiema cyframi od tego, czego szukałem. Moja drukarka wyświetla dwa routery z tym samym identyfikatorem SSID (prawdopodobnie gościa i zwykłego) i chce, żebym wybrał według adresu MAC. Ta odpowiedź askubuntu.com/a/222553 daje mi jeden z dwóch wymienionych, z 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ą.
hlongmore,
10

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
Anders
źródło
4

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.

glibdud
źródło
2
Odpowiedni liniowiec:arp -n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}'
Falko
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]'
  1. ip -4 route list 0/0 zwraca coś takiego:

    domyślnie przez 192.168.0.1 dev eth1 proto static metric 100

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

  3. Teraz otrzymujemy piąte pole i robimy to wielkimi literami:

    CA: FE: BA: BE: BE: AF

Smutek
źródło
2
Trochę więcej wyjaśnień pomoże reszcie z nas zrozumieć twój skrypt!
George Udosen
1
W ostatnim wierszu znajduje się funkcja Bash, która rozwija zmienną do wielkich liter:echo ${info[5]^^}
David Foerster
1
@DavidFoerster Chciałem napisać przenośne polecenie, ale oryginalny wariant polegał na indeksowaniu tablic specyficznych dla zsh (z jednego), więc zaktualizowałem odpowiedź z wariantem przenośnym między trzema najpopularniejszymi powłokami
Grief
2

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
2707974
źródło
Czy to nie dostaje adresu MAC interfejsów na komputerze, a nie na routerze?
Wilf
2
Jeśli ping 192.168.0.1
pingujesz
dziękuję @ 2707974, ale nie znam adresu MAC bez adresu IP i chcę mieć polecenie, które da mi tylko adres IP lub adres MAC mojego routera, ponieważ chcę użyć polecenia w skrypcie python do tego pokazania wszystkich arp stół nie jest dla mnie przydatny.
user4650183
2

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]'
Schtibb
źródło