Skanuję moją sieć, aby znaleźć adresy IP za pomocą tych dwóch poleceń.
arp -a nmap -sn 192.168.1.0/24
Z jakiegoś powodu moja inteligentna wtyczka (i niektóre inne urządzenia z Androidem) pojawiają się tylko podczas skanowania wykonanego za pomocą arp -a
. Czy ktoś zna przyczynę?
Odpowiedź
arp -a
wypisuje zapisaną w pamięci podręcznej listę hosty / urządzenia, które rozmawiały z tym hostem. Dlatego jeśli zobaczysz swoją inteligentną wtyczkę i inne urządzenia na wyjściu, jest to dowód, że rozmawiali z tym hostem od ostatniego ponownego uruchomienia Pi lub ponownego uruchomienia jego „sieciowanie .
W skrócie:
Twój nmap wykonuje skanowanie ZEWNĘTRZNE określonej podsieci z poziomu Pi.
Twój arp wyjście to lista IP: mapowania adresów mac hostów, z którymi Twój pi wymienił ruch.
Tak więc skanowanie nmap może pokazać wiele hostów, podczas gdy pamięć podręczna arp informuje, że tylko hosty, z którymi rozmawiało twoje Pi
Pamięć podręczna arp Pi pod adresem 192.168.1.21 jest pokazana poniżej:
arp -av gateway (192.168.1.18) at d4:ca:6d:XX:XX:5e [ether] on eth0 gateway (192.168.3.126) at d6:ca:6d:XX:XX:26 [ether] on wlan0 pi3Bplus-2 (192.168.1.22) at b8:27:eb:XX:XX:3c [ether] on eth0
Dane wyjściowe arp pokażą adres ip: mac mapowania dla (2) typów hostów:
A) hosty (” tj. pi3Bplus-2 „) w tej samej podsieci co twoja pi, która może bezpośrednio wymieniać ruch i
B) Routery („tj. brama „) wymagane do kierowania ruchu do hostów poza podsiecią twojego hosta.
Zwróć uwagę, że 192.168.1. 22 znajduje się w 192.168.1. 21 „cache: To” dlatego, że pingowałem .22 z .21. Więc wpis i n Pamięć podręczna arp jest dowodem prawidłowej łączności między hostami podczas rozwiązywania problemów. Oczywiście, gdyby ICMP został zablokowany w zaporze, ping nie powiedzie się, a host „s IP: mac nie byłoby obecne w pamięci podręcznej arp.
Należy również pamiętać, że pamięć podręczna arp to NOT trwałe! jeśli zrestartujesz Pi lub nawet połączenie sieciowe, zniszczy pamięć podręczną arp. Co możesz chcieć zrobić podczas testowania.
Komentarze
- W Twojej odpowiedzi jest kilka rzeczy, które mogą być mylące. Cytat: ” to ' dowód rozmawiali z tym hostem od ostatniego restartu Pi lub restartu jego ' sieci. ” – Nie, adres IP jest usuwany z pamięci podręcznej po 5 minutach, jeśli przedtem nie było ' ta (nowe, kontynuowane itp.). Jeśli będziesz kontynuować połączenie po 10 minutach, pojawi się żądanie nowego arp. Nawet th chociaż zdalne urządzenie jest aktywne, nie znajdziesz go w pamięci podręcznej przez 5 minut.
- Cytat: ” Tak więc wpis w pamięci podręcznej arp jest dowód poprawnej łączności między hostami ” – Nie, jeśli wyłączysz zdalne urządzenie i spojrzysz na pamięć podręczną ARP w ciągu 5 minut, znajdziesz jego adres IP. To wszystko może utrudniać rozwiązywanie problemów, ponieważ coś może działać, ale wkrótce potem nie ' t, w szczególności jeśli żądanie ARP w jednym kierunku nie działa ' t działa poprawnie.
- @Ingo arp aging powinno tak działać, ale z mojego doświadczenia wynika, że czyszczenie pamięci nie ' t czyści nieaktualne wpisy według zdefiniowanego okresu. Testy w mojej odpowiedzi zostały wykonane przy użyciu 2 Pi ' adresów zaadresowanych w tej samej podsieci (połączonej z tym samym przełącznikiem), pingując się kilka razy & zatrzymując ich pingi. Jeśli powtórzysz ten test i będziesz uruchamiać
ip -statistics neighbour
okresowo, ' zobaczysz wpisy ARP oznaczone ” nieaktualne ” pozostają, nawet jeśli są starsze niż 20 minut! Więc rozumiem, jak powinno działać starzenie się arp, ale powtórz i ' zobaczysz, że wpisy mogą trwać dłużej niż 5 minut. Świetna uwaga !!! - Właśnie zrobiłem różne doświadczenia;) Podczas pracy z proxy arp natknąłem się na sytuację, w której żądanie arp działa tylko w jednym kierunku, od zdalnego urządzenia do RasPi. Połączenie działało tylko wtedy, gdy zdalne urządzenie było podłączone do RasPi – przez 5 min.Odwrotna sytuacja czasami działała (w ciągu 5 minut po połączeniu ze zdalnego), a czasami nie ' t. Bardzo trudno było znaleźć ten przerywany błąd (rozwiązano go w trybie rozwiązłym).
- W każdym razie – co pokazuje nasza dyskusja iw co wierzę: proszenie pamięci podręcznej arp o adresy IP nie jest bezpiecznym rozwiązaniem, chyba że pinguj adres rozgłoszeniowy przed sprawdzeniem pamięci podręcznej ARP. Ale to ' to możliwość, której nie zasugeruję ze względu na obciążenie sieci.
Odpowiedź
To nie jest pytanie specyficzne dla Raspberry Pi. W każdym razie udzielę szczegółowej odpowiedzi, ponieważ znalezienie adresu IP Raspberry Pi jest tutaj bardzo często zadawanym pytaniem i problemem.
nmap to skaner sieciowy i robi to, czego oczekujesz: aktywnie skanuje sieć w poszukiwaniu urządzeń.
Polecenie arp (lepiej użyj ip neighbor
) nie jest skanerem. Pokazuje tylko zawartość lokalnej pamięci podręcznej arp.
Do ustanowienia połączeń Ethernet używany jest protokół arp. Pyta, które urządzenia Ethernet z adresem mac mają jaki adres IP. Znalezione mapowanie adresu mac na adres IP jest przechowywane w lokalnej pamięci podręcznej ARP, domyślnie przez 5 minut. To mapowanie ma miejsce dla każdego nawiązanego połączenia, nawet jeśli zdalne urządzenie nie odpowiada na zapytania ping
. Ale to również oznacza, że nie możesz znaleźć urządzenia w pamięci podręcznej arp, jeśli nie było połączenia w ciągu ostatnich 5 minut.
Twoje polecenie nmap -sn 192.168.1.0/24
wykonaj tylko proste skanowanie ping z wyłączonym skanowaniem portów. To nie znajdzie urządzeń, które blokują odpowiedzi ping. Może to spowodować, że znajdziesz adresy IP w pamięci podręcznej arp, ale nie znajdziesz ich przy aktywnym skanowaniu ping. Możesz spróbować użyć:
rpi ~$ nmap -Pn 192.168.1.0/24
Spowoduje to przeskanowanie pierwszych 1000 portów na wszystkich 255 adresach IP w sieci. Oczywiście zajmie to bardzo dużo czasu. Możesz rozważyć użycie tylko jednego portu do skanowania lub innych opcji dla nmap w celu znalezienia urządzeń.
Odpowiedź
Odwoływanie się do inne odpowiedzi tutaj, wymyśliłem ten skrypt, aby znaleźć adres IP mojego pi:
Oczekuje ustawienia zmiennej środowiskowej RASPI_MAC_ADDR
(adres MAC twoja pi). Używa arp
do przeszukiwania wartości w pamięci podręcznej, w przeciwnym razie uruchamia nmap
, aby spróbować go znaleźć.
#!/bin/bash search_for_pi() { PI_IP_ADDR_LINE="$(arp -a | grep -m1 "$RASPI_MAC_ADDR")" } # run `arp -a` to find the pi"s mac address readonly RASPI_MAC_ADDR="${RASPI_MAC_ADDR:?Could not find RASPI_MAC_ADDR environment variable}" search_for_pi [[ -z "$PI_IP_ADDR_LINE" ]] && { # if the pi IP is not in cache, run an outward nmap scan to try and find it nmap -sP 192.168.1.0/24 >&2 search_for_pi [[ -z "$PI_IP_ADDR_LINE" ]] && { printf "Couldn"t find a device on the network with the mac address: %s\n" "${RASPI_MAC_ADDR}" >&2 exit 1 } } grep -oP "\([\d\.]+\)" <<<"$PI_IP_ADDR_LINE" | tr -d "()"
Wyjście nmap
jest przekierowywane do STDERR, więc mogę to zrobić:
alias pi="ssh pi@$(findpi-ip)"
Zaktualizowany skrypt here
.
Komentarze
- Pytanie brzmi: z jakiegoś powodu moja inteligentna wtyczka (i niektóre inne urządzenia z Androidem) pojawiają się tylko podczas skanowania wykonanego za pomocą arp -a. Czy ktoś zna przyczynę?
- Czy są to produkty z zakresu 192.168.1 …. czy 10.1.10 ….? Możesz zobaczyć mój zaktualizowany skrypt tutaj