Czy można wyświetlić nmap
listę wszystkich hostów w sieci lokalnej, które mają otwarte SSH i HTTP? Aby to zrobić, mogę uruchomić coś takiego:
nmap 192.168.1.1-254 -p22,80 --open
Wyszczególnia to jednak hosty, które mają DOWOLNE porty listy otwarte, natomiast chciałbym, aby hosty, które WSZYSTKIE porty były otwarte. Ponadto dane wyjściowe są dość szczegółowe:
# nmap 192.168.1.1-254 -p22,80 --open
Starting Nmap 6.47 ( http://nmap.org ) at 2015-12-31 10:14 EST
Nmap scan report for Wireless_Broadband_Router.home (192.168.1.1)
Host is up (0.0016s latency).
Not shown: 1 closed port
PORT STATE SERVICE
80/tcp open http
Nmap scan report for new-host-2.home (192.168.1.16)
Host is up (0.013s latency).
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 254 IP addresses (7 hosts up) scanned in 3.78 seconds
To, czego szukam, to po prostu wynik:
192.168.1.16
ponieważ powyższy host jest jedynym z WSZYSTKIMMI otwartymi portami.
Z pewnością mogę przetworzyć dane wyjściowe, ale nie chcę polegać na formacie wyjściowym nmap, wolałbym, aby nmap to zrobił, jeśli istnieje sposób.
Odpowiedzi:
Nie ma sposobu, aby to zrobić w Nmap, ale twój komentarz o tym, że nie chcesz „polegać na formacie wyjściowym nmap”, pozwala mi zauważyć, że Nmap ma dwa stabilne formaty wyjściowe do parsowania do odczytu maszynowego. Starsza z nich to wyjście Grepable (
-oG
) , które działa dobrze przy przetwarzaniu w Perl, awk i grep, ale brakuje niektórych bardziej zaawansowanych danych wyjściowych (takich jak dane wyjściowe skryptu NSE, przyczyny portów, traceroute itp.). Bardziej kompletnym formatem jest format wyjściowy XML (-oX
) , ale może być zbyt wysoki dla Twoich celów.Możesz zapisać te dane wyjściowe w plikach za pomocą
-oG
,-oX
lub-oA
(oba formaty plus „normalne” wyjście tekstowe), lub możesz wysłać jeden bezpośrednio na standardowe wyjście:nmap 192.168.1.1-254-p22,80 --open -oG - | awk '/22\/open.*80\/open/{print $2}'
źródło
-oG -
)Rozważ również ten
awk
jednowarstwowy:Spowoduje to wydrukowanie wszystkich hostów ze wszystkimi określonymi otwartymi portami w następujący sposób:
źródło
Spróbuj wykonać następujące polecenie:
Spowoduje to wyszukanie portów w twoim zakresie i potokowanie danych wyjściowych w formacie grep, szukając otwartych portów, a następnie wydrukowanie adresów IP, które spełniają którekolwiek z tych kryteriów.
źródło