Ausgabe

Alle Sicherheitswerkzeuge sind nur so gut wie die Ausgabe, die sie erzeugen. Komplexe Tests und Algorithmen haben einen geringen Wert, wenn sie nicht auf übersichtliche und verständliche Weise dargestellt werden. Da Nmap auf vielfältige Weise von verschiedenen Leuten und anderer Software benutzt wird, kann kein Format allein es allen recht machen. Daher bietet Nmap mehrere Formate, darunter den interaktiven Modus, den Menschen direkt lesen können, und XML, das von Software leicht geparst werden kann.

Zusätzlich zu verschiedenen Ausgabeformaten bietet Nmap Optionen zur Steuerung der Ausführlichkeit dieser Ausgabe sowie Debugging-Meldungen. Die Ausgaben können an die Standardausgabe oder an benannte Dateien gehen, die Nmap überschreiben bzw. an die es seine Ausgabe anfügen kann. Mit den Ausgabedateien können außerdem abgebrochene Scans fortgesetzt werden.

Nmap erzeugt seine Ausgabe in fünf verschiedenen Formaten. Das Standardformat heißt interaktive Ausgabe und wird an die Standardausgabe (stdout) gesendet. Es gibt auch die normale Ausgabe, die ähnlich zur interaktiven Ausgabe ist, außer dass sie weniger Laufzeitinformation und Warnungen ausgibt, weil man davon ausgeht, dass sie erst nach Abschluss des Scans analysiert wird und nicht, während er noch läuft.

Die XML-Ausgabe ist eines der wichtigsten Ausgabeformate, da sie einfach nach HTML konvertiert, von Programmen wie Nmap-GUIs geparst oder in Datenbanken importiert werden kann.

Die zwei verbleibenden Ausgabeformate sind die einfache grepbare Ausgabe, in der die meiste Information über einen Zielhost in einer einzigen Zeile enthalten ist, und sCRiPt KiDDi3 0utPUt für Benutzer, die sich selbst als |<-r4d sehen.

Die interaktive Ausgabe ist standardmäßig vorgegeben und verfügt über keine eigenen Kommandozeilenoptionen, aber die anderen vier Formate benutzen dieselbe Syntax. Sie erwarten ein Argument, den Namen der Datei, in der die Ergebnisse gespeichert werden sollen. Es können mehrere Formate angegeben werden, aber jedes nur einmal. Vielleicht möchten Sie z.B. eine normale Ausgabe für eine eigene Untersuchung speichern und eine XML-Ausgabe desselben Scans für eine programmbasierte Analyse. Das erreichen Sie mit den Optionen -oX myscan.xml -oN myscan.nmap. Auch wenn in diesem Kapitel der Kürze wegen einfache Namen wie myscan.xml benutzt werden, empfehlen sich im Allgemeinen aussagekräftigere Namen. Welche Namen Sie wählen, ist Geschmackssache, aber ich benutze lange Namen, die das Scandatum und ein oder zwei Worte über den Scan enthalten, in einem Verzeichnis, das den Namen der gescannten Firma enthält.

Auch wenn diese Optionen Ergebnisse in Dateien speichern, gibt Nmap weiterhin die interaktive Ausgabe wie üblich auf die Standardausgabe aus. Zum Beispiel speichert der Befehl nmap -oX myscan.xml target XML in myscan.xml und füllt die Standardausgabe mit demselben interaktiven Ergebnis, wie es auch ohne Angabe von -oX der Fall wäre. Das können Sie ändern, indem Sie ein Minuszeichen als Argument für eines der Formate angeben. Dann schaltet Nmap die interaktive Ausgabe ab und gibt stattdessen Ergebnisse im gewünschten Format auf den Standardausgabestrom aus. Das heißt, der Befehl nmap -oX - target schreibt nur die XML-Ausgabe auf die Standardausgabe. Ernste Fehler werden weiterhin auf den normalen Standardfehlerstrom, stderr, ausgegeben.

Anders als bei anderen Nmap-Argumenten ist das Leerzeichen zwischen dem Options-Flag für eine Ausgabedatei (z.B. -oX) und dem Dateinamen oder Minuszeichen obligatorisch. Falls Sie die Leerzeichen weglassen und Argumente wie z.B. -oG- oder -oXscan.xml angeben, erzeugt Nmap aus Gründen der Rückwärtskompatibilität Ausgabedateien im normalen Format, die jeweils die Namen G- und Xscan.xml haben.

All diese Argumente unterstützen strftime-ähnliche Umwandlungen im Dateinamen. %H, %M, %S, %m, %d, %y und %Y sind alle exakt gleich wie in strftime. %T entspricht %H%M%S, %R entspricht %H%M und %D entspricht %m%d%y. Ein %, dem ein anderes Zeichen folgt, ergibt nur genau dieses Zeichen (%% ergibt ein Prozentzeichen). Also erzeugt -oX 'scan-%T-%D.xml' eine XML-Datei in der Form scan-144840-121307.xml.

Nmap bietet auch Optionen zur Steuerung der Scan-Ausführlichkeit und Optionen, um an Ausgabedateien anzuhängen, statt sie zu überschreiben. All diese Optionen werden unten beschrieben.

Nmap-Ausgabeformate
-oN <filespec> (normale Ausgabe)

Verlangt, dass eine normale Ausgabe in der angegebenen Datei gespeichert wird. Wie oben erwähnt, unterscheidet sich das leicht von der interaktiven Ausgabe.

-oX <filespec> (XML-Ausgabe)

Verlangt, dass eine XML-Ausgabe in der angegebenen Datei gespeichert wird. Nmap fügt eine DTD (Document Type Definition) hinzu, mit der XML-Parser Nmaps XML-Ausgabe validieren können. Diese ist vor allem für die Benutzung durch Programme gedacht, kann aber auch Menschen bei der Interpretation von Nmaps XML-Ausgabe helfen. Die DTD definiert die gültigen Elemente des Formats und zählt an vielen Stellen die dafür erlaubten Attribute und Werte auf. Die neueste Version ist immer unter https://nmap.org/data/nmap.dtd verfügbar.

XML bietet ein stabiles Format, das man mit Software leicht parsen kann. Solche XML-Parser sind für alle wichtigen Programmiersprachen wie C/C++, Perl, Python und Java gratis verfügbar. Manche Leute haben sogar Anbindungen für die meisten dieser Sprachen geschrieben, um speziell die Ausgabe und Ausführung von Nmap zu steuern. Beispiele sind Nmap::Scanner und Nmap::Parser für Perl in CPAN. In fast allen Fällen, in denen eine nicht-triviale Anwendung eine Schnittstelle zu Nmap benutzt, ist XML das bevorzugte Format.

Die XML-Ausgabe verweist auf ein XSL-Stylesheet, mit dem man die Ergebnisse als HTML formatieren kann. Am einfachsten benutzt man das, indem man einfach die XML-Ausgabe in einem Webbrowser wie Firefox oder IE lädt. Standardmäßig funktioniert das nur auf dem Rechner, auf dem Sie Nmap ausgeführt haben (oder auf einem, der ähnlich konfiguriert ist), weil der Pfad zu nmap.xsl darin festkodiert ist. Um portable XML-Dateien zu erzeugen, die auf allen mit dem Web verbundenen Rechnern als HTML angezeigt werden, können Sie die Optionen --webxml oder --stylesheet benutzen.

-oS <filespec> (ScRipT KIdd|3-Ausgabe)

Die Script-Kiddie-Ausgabe ist ähnlich zur interaktiven Ausgabe, mit dem Unterschied, dass sie nachbearbeitet ist, um die 'l33t HaXXorZ besser anzusprechen! Vorher haben sie wegen dessen konsistent richtiger Schreibweise und Buchstabierung auf Nmap herabgesehen. Humorlose Menschen sollten wissen, dass diese Option sich über Script Kiddies lustig macht, bevor sie mich dafür angreifen, dass ich ihnen helfe.

-oG <filespec> (grepbare Ausgabe)

Dieses Ausgabeformat wird zum Schluss beschrieben, weil es als überholt gilt. Das XML-Ausgabeformat ist wesentlich leistungsstärker und für erfahrene Benutzer fast genauso bequem. XML ist eim Standard, für den Dutzende hervorragender Parser verfügbar sind, während die grepbare Ausgabe nur mein eigener einfacher Hack ist. XML ist erweiterbar und kann neue Nmap-Eigenschaften unterstützen, die ich beim grepbaren Format aus Platzgründen oft weglassen muss.

Dessen ungeachtet ist die grepbare Ausgabe immer noch recht beliebt. Es ist ein einfaches Format, das pro Zeile einen Host auflistet und das mit Unix-Standardwerkzeugen wie grep, awk, cut, sed, diff und auch mit Perl auf triviale Weise durchsucht und geparst werden kann. Selbst ich benutze es für einmalige schnelle Tests in der Kommandozeile. Zum Beispiel kann man alle Hosts, auf denen der SSH-Port offen ist oder auf denen Solaris läuft, auf einfache Weise mit einem grep bestimmen, das die Hosts findet, umgeleitet in einen awk- oder cut-Befehl, der die gewünschten Felder ausgibt.

Die grepbare Ausgabe besteht aus Kommentaren (Zeilen, die mit einem # anfangen) sowie aus Zielzeilen. Eine Zielzeile enthält eine Kombination aus sechs benannten Feldern, durch Tabulatoren getrennt, gefolgt von einem Doppelpunkt. Diese Felder lauten Host, Ports, Protocols, Ignored State, OS, Seq Index, IP ID und Status.

Das wichtigste dieser Felder ist im Allgemeinen Ports, das Details zu einem interessanten Port enthält. Es ist eine mit Kommata getrennte Liste von Port-Einträgen, wobei jeder Eintrag einen interessanten Port darstellt und aus sieben mit Schrägstrichen (/) getrennten Unterfeldern besteht. Diese Unterfelder lauten: Port number, State, Protocol, Owner, Service, SunRPC info und Version info.

Wie bei der XML-Ausgabe kann diese Manpage auch hier nicht das vollständige Format dokumentieren. Eine detailliertere Betrachtung des grepbaren Ausgabeformats in Nmap finden Sie from https://nmap.org/book/output-formats-grepable-output.html.

-oA <basename> (Ausgabe in allen Formaten)

Aus Gründen der Bequemlichkeit können Sie Scan-Ergebnisse mit -oA <basename> gleichzeitig in normalem, in XML- und in grepbarem Format speichern. Sie werden jeweils in <basename>.nmap, <basename>.xml und <basename>.gnmap, gespeichert. Wie in den meisten Programmen können Sie vor den Dateinamen ein Präfix mit einem Verzeichnispfad darin setzen, z.B. ~/nmaplogs/foocorp/ unter Unix oder c:\hacking\sco unter Windows.

-v (größere Ausführlichkeit)

Erhöht die Ausführlichkeit, d.h. Nmap gibt mehr Informationen über den laufenden Scan aus. Offene Ports werden angezeigt, direkt nachdem sie gefunden werden, und es werden Schätzungen für die Dauer bis zur Fertigstellung angegeben, falls Nmap meint, dass ein Scan mehr als ein paar Minuten benötigt. Noch mehr Information erhalten Sie, wenn Sie diese Option zweimal oder noch öfter angeben.

Die meisten Änderungen betreffen nur die interaktive Ausgabe, manche betreffen auch die normale und die Script-Kiddie-Ausgabe. Die anderen Ausgabearten sind für die Weiterverarbeitung durch Maschinen gedacht, d.h. Nmap kann in diesen Formaten standardmäßig alle Details angeben, ohne einen menschlichen Leser zu ermüden. Allerdings gibt es in den anderen Modi einige Änderungen, bei denen die Ausgabegröße durch Weglassen einiger Details erheblich reduziert werden kann. Zum Beispiel wird eine Kommentarzeile in der grepbaren Ausgabe, die eine Liste aller gescannten Ports enthält, nur im wortreichen Modus ausgegeben, weil sie ziemlich lang werden kann.

-d [level] (erhöhe oder setze Debugging-Stufe)

Wenn nicht einmal der wortreiche Modus genug Daten für Sie liefert, können Sie beim Debugging noch wesentlich mehr davon bekommen! Wie bei der Ausführlichkeits-Option (-v) wird auch das Debugging mit einem Kommandozeilen-Flag eingeschaltet (-d), und die Debug-Stufe kann durch eine mehrfache Angabe gesteigert werden. Alternativ dazu können Sie eine Debug-Stufe auch als Argument an -d übergeben. So setzt z.B. -d9 die Stufe neun. Das ist die höchste verfügbare Stufe, die Tausende von Zeilen produziert, sofern Sie keinen sehr einfachen Scan mit sehr wenigen Ports und Zielen ausführen.

Eine Debugging-Ausgabe ist sinnvoll, wenn Sie einen Fehler in Nmap vermuten oder wenn Sie einfach verwirrt darüber sind, was und warum Nmap etwas genau macht. Da dieses Merkmal überwiegend für Entwickler gedacht ist, sind Debug-Zeilen nicht immer selbsterklärend. Vielleicht bekommen Sie etwas wie: Timeout vals: srtt: -1 rttvar: -1 to: 1000000 delta 14987 ==> srtt: 14987 rttvar: 14987 to: 100000. Wenn Sie eine Zeile nicht verstehen, ist Ihre einzige Zuflucht, sie zu ignorieren, im Quellcode nachzuschauen oder Hilfe auf der Entwicklerliste (nmap-dev). zu erfragen. Manche Einträge sind selbsterklärend, aber je höher die Debug-Stufe ist, desto obskurer werden die Meldungen.

--reason (Gründe für Host- und Portzustände)

Gibt die Gründe an, warum ein Port auf einen bestimmten Zustand gesetzt wurde und warum ein Host als ein- oder ausgeschaltet betrachtet wird. Diese Option zeigt die Paketart an, die einen Port- oder Hostzustand ermittelt hat, z.B. ein RST-Paket von einem geschlossenen Port oder ein Echo Reply von einem eingeschalteten Host. Die Information, die Nmap angeben kann, hängt von der Art des Scans oder Pings ab. Der SYN-Scan und der SYN-Ping (-sS und -PS) sind sehr detailliert, aber der TCP-Connect-Scan (-sT) wird durch die Implementierung des connect-Systemaufrufs beschränkt. Dieses Merkmal wird automatisch von der Debug-Option (-d) aktiviert, und die Ergebnisse werden auch dann in XML-Protokolldateien gespeichert, wenn diese Option gar nicht angegeben wird.

--stats-every <time> (periodische Timing-Statistik ausgeben)

Gibt periodisch eine Timing-Statusmeldung nach einem Intervall der Länge <time> aus. Dabei kann diese Zeitangabe beschrieben werden, wie in „Timing und Performance“ dargestellt, d.h. Sie können z.B. --stats-every 10s benutzen, um alle 10 Sekunden eine Statusaktualisierung zu erhalten. Diese erscheint in der interaktiven Ausgabe (auf dem Bildschirm) und in der XML-Ausgabe.

--packet-trace (gesendete und empfangene Pakete und Daten mitverfolgen)

Bewirkt, dass Nmap für jedes gesendete oder empfangene Paket eine Zusammenfassung ausgibt. Das wird bei der Fehlersuche oft gemacht, ist aber auch eine willkommene Methode für Neulinge, um genau zu verstehen, was Nmap unter der Oberfläche macht. Um zu verhindern, dass Tausende von Zeilen ausgegeben werden, möchten Sie vielleicht eine beschränkte Anzahl zu scannender Ports angeben, z.B. mit -p20-30. Wenn Sie nur wissen möchten, was im Versionserkennungssubsystem vor sich geht, benutzen Sie stattdessen --version-trace. Wenn Sie nur an einer Script-Mitverfolgung interessiert sind, geben Sie --script-trace an. Mit --packet-trace erhalten Sie all das zusammen.

--open (zeige nur offene (oder möglicherweise offene) Ports an)

Manchmal interessieren Sie sich nur für Ports, mit denen Sie tatsächlich eine Verbindung herstellen können (offene Ports), und wollen Ihre Ergebnisse nicht mit anderen Ports überhäufen, die geschlossen, gefiltert und geschlossen|gefiltert sind. Die Ausgabe wird normalerweise nach dem Scan mit Werkzeugen wie grep, awk und Perl angepasst, aber dieses Merkmal wurde auf überwältigend vielfachen Wunsch hinzugefügt. Geben Sie --open an, um nur offene, offene|gefilterte und ungefilterte Ports zu sehen. Diese drei Ports werden ganz wie gewöhnlich behandelt, d.h. dass offen|gefiltert und ungefiltert in Zählungen zusammengefasst werden, wenn es eine sehr große Anzahl davon gibt.

--iflist (liste Schnittstellen und Routen auf)

Gibt die Liste der Schnittstellen und Systemrouten aus, die Nmap entdeckt hat. Das ist hilfreich bei der Fehlersuche bei Routing-Problemen oder fehlerhaften Gerätebeschreibungen (z.B. wenn Nmap eine PPP-Verbindung als Ethernet behandelt).

--log-errors (protokolliere Fehler/Warnungen in eine Datei im normalen Ausgabeformat)

Von Nmap ausgegebene Warnungen und Fehlermeldungen gehen normalerweise nur auf den Bildschirm (interaktive Ausgabe), was die Ordnung aller Ausgabedateien im normalen Format (üblicherweise mit -oN angegeben) nicht stört. Wenn Sie diese Meldungen in den angegebenen normalen Ausgabedateien wirklich sehen möchten, können Sie diese Option benutzen. Diese ist dann hilfreich, wenn Sie die interaktive Ausgabe nicht übersehen oder wenn Sie Fehler beim Debugging speichern möchten. Die Fehlermeldungen und Warnungen werden auch im interaktiven Modus weiterhin erscheinen. Bei den meisten Fehlern bezüglich schlechter Kommandozeilenargumente wird das nicht funktionieren, da Nmap seine Ausgabedateien eventuell noch nicht initialisiert hat. Außerdem benutzen einige Nmap-Fehlermeldungen und -Warnungen ein anderes System, das diese Option noch nicht unterstützt.

Eine Alternative zu --log-errors ist die Umleitung der interaktiven Ausgabe (inklusive des Standardfehlerstroms) in eine Datei. Die meisten Unix-Shells machen einem diesen Ansatz leicht, aber auf Windows kann er schwierig sein.

--append-output (an Ausgabedateien hinzufügen, statt sie zu überschreiben)

Wenn Sie einen Dateinamen für ein Ausgabeformat wie z.B. -oX oder -oN angeben, wird diese Datei standardmäßig überschrieben. Wenn Sie deren Inhalt lieber behalten und die neuen Ergebnisse anhängen möchten, benutzen Sie die Option --append-output. Dann wird bei allen angegebenen Ausgabedateinamen dieses Nmap-Aufrufs an die Dateien angehängt, statt sie zu überschreiben. Mit XML-Scandaten (-oX) funktioniert das nicht so gut, da die erzeugte Datei im Allgemeinen nicht mehr sauber geparst wird, es sei denn, Sie reparieren sie von Hand.

--resume <filename> (abgebrochenen Scan fortsetzen)

Manche umfangreichen Nmap-Läufe benötigen sehr viel Zeit – in der Größenordnung von Tagen. Solche Scans laufen nicht immer bis zum Ende. Vielleicht gibt es Beschränkungen, die verhindern, dass man Nmap während der normalen Arbeitszeit ausführen kann, das Netzwerk könnte abstürzen, der Rechner, auf dem Nmap läuft, könnte einen geplanten oder ungeplanten Neustart erleben oder Nmap selbst könnte abstürzen. Der Administrator, der Nmap ausführt, könnte es auch aus irgendeinem anderen Grund abbrechen, indem er ctrl-C eingibt. Und den ganzen Scan von vorne neu zu starten, ist eventuell nicht wünschenswert. Wenn ein normales (-oN) oder ein grepbares (-oG) Protokoll geführt wurde, kann der Benutzer Nmap jedoch bitten, den Scan bei dem Ziel fortzusetzen, an dem es beim Abbruch gearbeitet hat. Geben Sie einfach die Option --resume an und übergeben Sie die normale/grepbare Ausgabedatei als Argument. Andere Argumente sind nicht erlaubt, da Nmap die Ausgabedatei parst, um dieselben Argumente zu benutzen, die zuvor benutzt wurden. Rufen Sie Nmap einfach als nmap --resume <logfilename> auf. Nmap fügt neue Ergebnisse dann an die Datendateien an, die im vorherigen Lauf angegeben wurden. Diese Fortsetzung funktioniert nicht aus XML-Ausgabedateien, weil es schwierig wäre, die zwei Läufe in einer gültigen XML-Datei zu kombinieren.

--stylesheet <path or URL> (setze XSL-Stylesheet, um eine XML-Ausgabe zu transformieren)

Die Nmap-Distribution enthält ein XSL-Stylesheet namens nmap.xsl zum Betrachten oder Übersetzen einer XML-Ausgabe nach HTML. Die XML-Ausgabe enthält eine xml-stylesheet-Anweisung, die auf nmap.xml an der Stelle verweist, wo es von Nmap ursprünglich installiert wurde (oder im aktuellen Arbeitsverzeichnis unter Windows). Laden Sie einfach Nmaps XML-Ausgabe in einem modernen Webbrowser, und er sollte nmap.xsl im Dateisystem finden und benutzen, um die Ergebnisse darzustellen. Wenn Sie ein anderes Stylesheet benutzen möchten, geben Sie es als Argument für --stylesheet an. Dabei müssen Sie den vollständigen Pfadnamen oder die URL angeben. Sehr häufig wird --stylesheet https://nmap.org/data/nmap.xsl benutzt. Das sagt einem Browser, dass er die neueste Version des Stylesheets von Nmap.Org laden soll. Die Option --webxml macht dasselbe, verlangt aber weniger Tipparbeit und Merkfähigkeit. Wenn man das XSL von Nmap.Org lädt, wird es einfacher, die Ergebnisse auf einem Rechner anzuschauen, auf dem kein Nmap (und folglich auch kein nmap.xsl) installiert ist. Daher ist die URL oft nützlicher, doch aus Datenschutzgründen wird standardmäßig das nmap.xsl im lokalen Dateisystem benutzt.

--webxml (lade Stylesheet von Nmap.Org)

Diese bequeme Option ist nur ein Alias für --stylesheet https://nmap.org/data/nmap.xsl.

--no-stylesheet (lasse XSL-Stylesheet-Deklaration im XML weg)

Geben Sie diese Option an, wenn Nmap in seiner XML-Ausgabe auf keinerlei XSL-Stylesheet verweisen soll. Die xml-stylesheet-Anweisung wird dann weggelassen.