Kann nmap nur Hosts mit bestimmten offenen Ports anzeigen?

18

Können nmapalle Hosts im lokalen Netzwerk aufgelistet werden, auf denen sowohl SSH als auch HTTP geöffnet sind? Dazu kann ich Folgendes ausführen:

nmap 192.168.1.1-254 -p22,80 --open

Dies listet jedoch Hosts auf, bei denen JEDER der Listenports offen ist, wohingegen ich Hosts hätte, bei denen ALLE Ports offen sind. Außerdem ist die Ausgabe recht ausführlich:

# 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

Was ich suche, wird einfach wie folgt ausgegeben:

192.168.1.16

Da der oben genannte Host der einzige mit ALLEN offenen Ports ist.

Ich kann die Ausgabe sicherlich nachbearbeiten, aber ich möchte mich nicht auf das Ausgabeformat von nmap verlassen, sondern nmap sollte es tun, wenn es einen Weg gibt.

Brian
quelle
Wenn Sie nur einen Port testen möchten, 'nmap -p 22 | grep -B3 open 'ist ein einfacher Weg.
Luciano Andress Martini

Antworten:

10

Es gibt keine Möglichkeit, dies in Nmap zu tun, aber Ihr Kommentar, dass Sie sich nicht auf das Ausgabeformat von nmap verlassen möchten, lässt mich darauf hinweisen, dass Nmap zwei stabile Ausgabeformate für maschinenlesbares Parsen hat. Das ältere ist Grepable output ( -oG) , das für die Verarbeitung mit Perl, awk und grep gut geeignet ist , aber einige der fortgeschritteneren Ausgaben (wie NSE-Skriptausgabe, Portgründe, Traceroute usw.) fehlen. Das vollständigere Format ist XML output ( -oX) , es kann jedoch für Ihre Zwecke zu viel sein.

Sie können diese Ausgaben entweder in Dateien mit -oG, -oXoder -oA(beide Formate plus "normale" Textausgabe) speichern oder direkt an stdout senden:nmap 192.168.1.1-254-p22,80 --open -oG - | awk '/22\/open.*80\/open/{print $2}'

bonsaiviking
quelle
1
Das ist perfekt, genau das, was ich suchte (die -oG -)
Brian
2

Betrachten Sie auch diesen awkEinzeiler:

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

Es werden alle Hosts mit allen angegebenen offenen Ports wie folgt gedruckt:

 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
Sonnenfänger
quelle
Sie müssen -p nach dem Testen hinzugefügt haben. Das '-' in der Befehlszeile gehört direkt nach -oG
Wayne
1

Versuchen Sie den folgenden Befehl:

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

Dadurch wird nach Ihren Ports in Ihrem Bereich gesucht und die Ausgabe in einem übersichtlichen Format auf offene Ports umgeleitet. Anschließend werden die IP-Adressen gedruckt, die einem dieser Kriterien entsprechen.

Marshall Hallenbeck
quelle
Willkommen bei U & L! Beachten Sie, dass die akzeptierte Antwort von vor ~ 3 Jahren eine einfachere Version davon hat, bei der awk zum Greifen und Drucken verwendet wird.
Jeff Schaller
1
Meins ist meiner Meinung nach besser, da Sie keine zusätzlichen Daten für weitere Ports hinzufügen müssen, die über die Port-Option hinausgehen. Sein erfordert, dass Sie Ihre awk auch mit jedem Port aktualisieren, was unnötig ausführlich ist.
Marshall Hallenbeck