Jak znaleźć wszystkie używane adresy IP w sieci

94

W mojej pracy jest dużo komputerów i chcę żartować. Mogę zamknąć komputer przez sieć, ale znalezienie adresów IP jest dla mnie trudne.

Jak mogę łatwo znaleźć wszystkie internetowe adresy IP od 192.168.1.aa do 192.168.1.zz?

Eric Carvalho
źródło
4
spróbujangry ip scanner
Web-E
możliwy duplikat Jak znaleźć nieużywany adres IP w sieci?
Lekensteyn,
2
poważnie? chcesz, aby nasza pomoc w prank twoich współpracowników?
Dan H

Odpowiedzi:

141

Zasadniczo nmapjest dość przydatny do szybkiego skanowania sieci.

Aby zainstalować nmap, wprowadź następujące polecenie w terminalu:

sudo apt-get install nmap

Po zainstalowaniu aplikacji wprowadź następujące polecenie:

nmap -sn 192.168.1.0/24

To pokaże, którzy hosty odpowiedzieli na żądania ping w sieci między 192.168.1.0 a 192.168.1.255.


W przypadku starszych wersji Nmap użyj -sP:

nmap -sP 192.168.1.0/24

Dodatkowe informacje można znaleźć na następujących stronach:

Podręcznik instalacji NMAP

Przewodnik referencyjny NMAP

Jest to bardzo przydatne narzędzie do nauki.

Kevin Bowen
źródło
2
Nie wszyscy gospodarze odpowiadają na pingi. ARP to droga, przynajmniej w IPv4.
Marcin Kamiński,
3
to mi wystarczy i działa w Internecie
1
czy to tylko mój komputer, czy to polecenie trwa wiecznie?
JohnMerlino
4
Uwaga: aby przyspieszyć skanowanie nmap, należy dodać flagi -T4 (prędkość) i -n (tylko numerycznie).
Sergiy Kolodyazhnyy
3
Pamiętaj, że potrzebujesz polecenia sudo dla polecenia nmap, w przeciwnym razie zwracane są zero wyników.
machineaddict
40

Jeśli wszystkie komputery w sieci to Ubuntu lub inna dystrybucja korzystająca z avahi-daemon( DNS-SD ), możesz uzyskać ich szczegółową listę (z nazwą hosta i adresem IP), wykonując:

avahi-browse -rt _workstation._tcp

Jeśli chcesz poznać wszystkie adresy IP używane w sieci, możesz użyć arp-scan:

sudo arp-scan 192.168.1.0/24

Ponieważ nie jest instalowany domyślnie, musisz go zainstalować za pomocą sudo apt-get install arp-scan. arp-scanwysyła pakiety ARP do sieci lokalnej i wyświetla otrzymane odpowiedzi, dzięki czemu pokazuje nawet zaporowe hosty (które blokują ruch na podstawie pakietów IP).

Eric Carvalho
źródło
3
To polecenie jest zdecydowanie lepsze niż powyższe. Uruchamianie nmap trwało wieki, ale ten odpowiedział natychmiast z węzłami w określonej sieci.
JohnMerlino
3
W moim przypadku bardzo często arp-scannie można znaleźć wszystkich urządzeń powiązanych z moją siecią bezprzewodową. Teraz na przykład sudo arp-scan 192.168.2.0/24pokazuje 2 wyniki (.1 i .1), podczas gdy nmap -sn 192.168.2.0/24pokazuje 4 wyniki (.1, .2, .3 i .4). Wydaje się, że nmapjest to bardziej dokładne (wiem na pewno, że do sieci podłączone są 4 urządzenia). Dlaczego to?
tigerjack89
2
Może znalazłem odpowiedź w komentarzu do innego pytania. „Należy zauważyć, że niektóre urządzenia mogą się nie pojawiać, chyba że są włączone. Mój nexus 4 nie pojawi się, chyba że ekran jest włączony”. Interesujące jest jednak to, że te same urządzenia zawsze reagują na pingi z nmap.
tigerjack89
arp-scanjest miłe !
forzagreen
17

Uwaga dla czytelnika : Oryginalna odpowiedź została opublikowana jakiś czas temu, kiedy uczyłem się tylko skryptowania powłoki. Zobacz poprawioną wersję poniżej, aby uzyskać nowy i ulepszony skrypt, który działa znacznie szybciej.

Oryginalna odpowiedź

nmapbyłby moim wyborem nr 1, ale co, jeśli go nie masz? Zrób to sam, używając skryptu ping, który ręcznie przechodzi przez każdy możliwy adres IP w sieci. Mamy tutaj tylko pętlę while, w której ustawiamy ostatnią liczbę w adresie, wykonujemy cichy pojedynczy ping na adres, sprawdzamy, czy polecenie się powiodło, czy nie (a jeśli się powiedzie, to host jest oczywiście w górze) i printfinstrukcja. Szybki i brudny sposób, napisanie go zajęło mi około 10 minut, ale środowisko wykonawcze może być nieco wolne.

#!/bin/sh
# set -x
NUM=1

while [ $NUM -lt 256  ];do 
    ping -q -c 1 192.168.0.$NUM > /dev/null 
    RESULT=$(echo $?)
    if [ $RESULT -eq 0 ]; then 
        printf 192.168.0.$NUM"\n"
    fi
    NUM=$(expr $NUM + 1)
done

Ponowna odpowiedź

Oryginalnie opublikowałem tę odpowiedź w sierpniu 2015 roku. Od tego czasu dowiedziałem się nieco więcej o skryptach powłoki, a kiedy zobaczyłem ten skrypt, pomyślałem, że warto ponownie przejrzeć tę odpowiedź, aby dodać kilka ulepszeń. Oto kilka pomysłów:

  • Skrypt jest oczywiście powolny i pingczeka na odpowiedź hosta. Domyślnie pingdla dwóch RTT, które mogą się różnić w zależności od stopnia przeciążenia twojej sieci, i, o ile rozumiem, protokół TCP podwaja czas oczekiwania za każdym razem (przynajmniej zgodnie z tym ). Więc możemy zmusić pingdo przekroczenia limitu czasu z -w 1flagą. Ponieważ mamy 256 adresów i zakładamy 1 sekundę na każdy adres, skrypt zajmie około 256/60 = 4,27 minuty.

  • Wykonanie polecenia, a następnie przechwycenie statusu wyjścia $?nie było tak naprawdę konieczne. if ... then;...fiMoże działać bezpośrednio na komendy. Innymi słowy, wystarczy to zrobić:

    if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
    then
         <some other code here>
    fi
    
  • printfKomenda może być zapisane jako tak:

    printf "IP %s is up\n" 192.168.0."$NUM"
    

    Jest to bardziej zmiana stylistyczna, ale jest spójna z tym, jak printfdziała i wygląda w wielu innych językach, ze "$NUM"zmienną cytowania . Cytowanie tutaj nie jest konieczne - ponieważ mamy do czynienia tylko z liczbami, nie musimy przewidywać podziału słów ze względu na spacje w zmiennej.

  • Znacznie lepszą poprawę wydajności można osiągnąć, jeśli spawnujemy kilka procesów w tle. Poniższa edycja skryptu właśnie to robi. Włożyłem pingi printfdo funkcji, pingf(tak, banalne imię, wiem). Teraz jest też jedna mainfunkcja, która wykonuje zapętlanie i wywoływanie pingf.

#!/bin/sh
# Uncomment for debugging
#set -x
pingf(){
    if ping -w 2 -q -c 1 192.168.0."$1" > /dev/null ;
    then 
        printf "IP %s is up\n" 192.168.0."$1"
    fi
}

main(){

    NUM=1
    while [ $NUM -lt 255  ];do 
        pingf "$NUM" &
        NUM=$(expr "$NUM" + 1)
    done
    wait
}

main

O ile lepiej to działa? Właściwie nieźle zajmuje kilka sekund.

$ time ./ping_script.sh                                                                      
IP 192.168.0.1 is up
IP 192.168.0.101 is up
IP 192.168.0.27 is up
IP 192.168.0.29 is up
    0m02.50s real     0m00.01s user     0m00.12s system

O czym należy pamiętać

  • Windows (jak sądzę od wersji Windows 7) zaczął blokować odpowiedź na żądania echa ICMP. Jest wiele pytań na ten temat w Ask Ubuntu i innych witrynach typu „Hej, mój komputer z Linuksem może być pingowany, ale nie na Windowsie, co jest grane?” Pamiętaj tylko, że w przypadku nowszych wersji systemu Windows musisz włączyć reakcję na echo ICMP.
Sergiy Kolodyazhnyy
źródło
2
Lubię takie rozwiązanie
Szenis,
15

Netdiscover może być twoją odpowiedzią.

Aby zainstalować przez terminal:

sudo apt-get install netdiscover

przykładowe użycie:

sudo netdiscover -r 192.168.1.0/24 -i wlan0

Adres IP z adresami MAC wyświetli się na twoim terminalu. Zobacz zrzut ekranu

wprowadź opis zdjęcia tutaj

mam nadzieję, że ci pomogę

odniesienie

SP3B
źródło
Wygląda na bardzo wadliwy, za pierwszym razem i*** buffer overflow detected ***: netdiscover terminated .
Pablo A
To narzędzie nie znajduje kilku rzeczy w mojej sieci.
Anthony
4

fpingjest doskonałym narzędziem do skanowania wielu hostów w sieci za pomocą ICMP. Jeśli nie jest zainstalowany, możesz go zainstalować:

sudo apt-get install fping

fping wysyła pakiety ICMP ECHO_REQUEST i oznacza hosta jako Up, jeśli pobierze ECHO_RESPONSE od hosta.

Na przykład, aby przeskanować hosty podsieci 192.168.1.0/24, możesz:

fping -g 192.168.1.0/24

Dla określonej liczby hostów, np. Od 192.168.1.15do 192.168.1.140:

fping -g 192.168.1.15 192.168.1.140

fping jest wysoce konfigurowalny, np. ile pakietów zostanie wysłanych, czas oczekiwania na odpowiedź, format wyjściowy itp.

Sprawdź, man fpingaby uzyskać więcej pomysłów.

heemayl
źródło