Jak uzyskać adres MAC mojego routera?


13

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


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.


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

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.


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


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

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]'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.