Für viele Anwender ist Nmap als Open-Source-Werkzeug das Tool der Wahl, wenn große Netzwerke schnell und zuverlässig gescannt werden müssen. Darüber hinaus kann Nmap Betriebssysteme und Dienste erkennen und über die Nmap Scripting Engine (NSE) zusätzliche Prüfungen auf einem IT-System durchführen. Als Alternative dazu könnte man das Tool masscan ansehen. Dieser sehr schnelle Portscanner reicht aber lange nicht an den Funktionsumfang von Nmap heran.
Nmap ist in der Lage die Scanergebnisse in verschiedensten Formaten auszugeben. Die wichtigsten sind nachfolgen kurz dargestellt:
-oN
(normale Ausgabe)<filespec>
-oX
(XML-Ausgabe)<filespec>
-oG
(grepbare Ausgabe)<filespec>
-oA
(Ausgabe in allen Formaten)<basename>
Leider besteht keine automatische Möglichkeit, sie Ausgabe in eine Tabellenkalkulation (wie. z.B. Excel) einzulesen, bzw. als csv-Datei auszugeben. Hierzu werden zusätzliche Tools benötigt, die sich aber ohne Probleme in eine Kommandozeile integrieren und ausführen lassen.
Eine mögliches Python-Skript möchte ich hier kurz vorstellen. NmaptoCSV unterstützt die Nmap-Versionen 5 bzw. 6 und die normale bzw. grepbare Ausgabe. Dabei kann eine Vielzahl an Informationen (z.B. IP, FQDN, MAC Adresse und Hersteller, offene Ports, TCP/UDP Protokolle, Dienste und Versionen, installiertes Betriebssystem, Anzahl der Hops zum Ziel) in das csv-Format überführt werden.
Nachdem das Python-Skript heruntergeladen wurde, kann Nmap wie gewohnt in der Kommandozeile ausgeführt werden. Das Ergebnis wird dann an nmaptocsv.py übergeben und in ein csv-Format umgewandelt. Über den Parameter -f kann gesteuert werden, welche Informationen in die csv-Datei gelangen.
Usage: nmaptocsv.py [options]
Options:
-h, --help show this help message and exit
-i INPUT, --input=INPUT
Nmap scan output file (stdin if not specified)
-o OUTPUT, --output=OUTPUT
csv output filename (stdout if not specified)
-f FORMAT, --format=FORMAT
csv column format { fqdn, hop_number, ip, mac_address,
mac_vendor, port, protocol, os, service, version }
(default : ip-fqdn-port-protocol-service-version)
-n, --newline insert a newline between each host for better
readability
-s, --skip-header do not print the csv header
Die Leistungsfähigkeit dieser Kombination möchte ich in zwei Beispielen darstellen. Im ersten Beispiel sollen aktive Host in einem Netzwerk ermittelt werden. Hier reicht ein einfacher Ping-Scan (-sP) aus. In der csv-Datei sollen nur die antwortenden Systeme mit IP-Adresse und der FQDN erscheinen. Eine möglicher Befehl in der Kommandozeile könnte wie folgt aussehen:
nmap -sP 192.168.1.0/24 -oN - | ./nmaptocsv.py -f ip-fqdn -o netzwerk.csv
Im zweiten Beispiel soll zusätzlich das Betriebssystem und die Anzahl der Hops zum Ziel ermittelt werden:
nmap -p 22,80,135,139,445 -O --osscan-limit 192.168.0.0/16 -oN - | ./nmaptocsv.py -f ip-fqdn-os-hop_number -o netzwerk.csv
Abschließend möchte ich noch folgendes bemerken: Für die erfolgreiche Bestimmung des Betriebssystems führt Nmap verschiedene Prüfungen durch, die je nach eingesetzter Methode sehr zeitaufwendig sind. Als Voraussetzung muss auf den zu prüfenden Hosts mindestens ein Port offen und ein Port geschlossen sein. Die Option –osscan-limit legt fest, dass keine OS-Erkennung durchgeführt wird, wenn die vorher genannten Kriterien nicht erfüllt sind. Dies trägt zur einer weiteren Beschleunigung des Scans bei.
Möchte man große Netze in einer kurzen Zeit prüfen, so sollte über den Parameter -p nur begrenzte Ports abgefragt werden. Auf der anderen Seite führen aber unzureichende Informationen zu ungenauen Ergebnissen bei der Betriebssystemerkennung. Man kommt also nicht umhin, über eigene Tests die optimalen Parameter für das jeweilige Netzwerk herauszufinden.