Czy nmap może wyświetlać tylko hosty z określonymi portami?


18

Czy można wyświetlić nmaplistę 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.


Jeśli chcesz przetestować tylko jeden port, 'nmap -p 22 | grep -B3 open 'jest łatwym sposobem.
— Luciano Andress Martini

Odpowiedzi:


10

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, -oXlub -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}'


1
To doskonały, tylko to, co szukałem (w -oG -)
— Brian

2

Rozważ również ten awkjednowarstwowy:

nmap -Pn -oG -p22,80,443,445 - 100.100.100.100 | awk '/open/{ s = ""; for (i = 5; i <= NF-4; i++) s = s substr($i,1,length($i)-4) "\n"; print $2 " " $3 "\n" s}'

Spowoduje to wydrukowanie wszystkich hostów ze wszystkimi określonymi otwartymi portami w następujący sposób:

 100.100.100.100 (some-domain.com)
 22/open/tcp//ssh
 80/open/tcp//http
 443/open/tcp//microsoft-ds
 445/open/tcp//https-alt

Musisz dodać -p po przetestowaniu tego. „-” w wierszu poleceń należy wpisać zaraz po -oG
— Wayne

1

Spróbuj wykonać następujące polecenie:

nmap --open -p 22,80 192.168.1.1-254 -oG - | grep "/open" | awk '{ print $2 }'

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.


Witamy w U&L! Zauważ, że zaakceptowana odpowiedź sprzed około 3 lat ma prostszą wersję, w której używa awk do grep i drukowania.
— Jeff Schaller

1
Twierdzę, że moje jest lepsze, ponieważ nie musisz dodawać dodatkowych danych dla większej liczby portów poza opcją portu. On wymaga od ciebie aktualizacji awk dla każdego portu, co jest niepotrzebnie gadatliwe.
— Marshall Hallenbeck
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.