Nmap Scanergebnisse im csv-Format ausgeben

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 <filespec> (normale Ausgabe)
  • -oX <filespec> (XML-Ausgabe)
  • -oG <filespec> (grepbare Ausgabe)
  • -oA <basename> (Ausgabe in allen Formaten)

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.

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Diese Seite verwendet Cookies, um die Nutzerfreundlichkeit zu verbessern. Mit der weiteren Verwendung stimmst du dem zu.

Datenschutzerklärung