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?
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?
Odpowiedzi:
Zasadniczo nmap
jest 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:
Jest to bardzo przydatne narzędzie do nauki.
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-scan
wysył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).
arp-scan
nie można znaleźć wszystkich urządzeń powiązanych z moją siecią bezprzewodową. Teraz na przykład sudo arp-scan 192.168.2.0/24
pokazuje 2 wyniki (.1 i .1), podczas gdy nmap -sn 192.168.2.0/24
pokazuje 4 wyniki (.1, .2, .3 i .4). Wydaje się, że nmap
jest to bardziej dokładne (wiem na pewno, że do sieci podłączone są 4 urządzenia). Dlaczego to?
nmap
.
arp-scan
jest miłe !
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.
nmap
był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 printf
instrukcja. 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
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 ping
czeka na odpowiedź hosta. Domyślnie ping
dla 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ć ping
do przekroczenia limitu czasu z -w 1
flagą. 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;...fi
Moż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
printf
Komenda 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 printf
dział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 ping
i printf
do funkcji, pingf
(tak, banalne imię, wiem). Teraz jest też jedna main
funkcja, 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
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
mam nadzieję, że ci pomogę
*** buffer overflow detected ***: netdiscover terminated
.
fping
jest 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.15
do 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 fping
aby uzyskać więcej pomysłów.
angry ip scanner