
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
http://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 http://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.
Optionen für Ausführlichkeit und Debugging -
-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 the section called “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.
Weitere Ausgabeoptionen -
--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 http://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 http://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.
|
|