Ports scannen mit Masscan

NmapBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie den Umgang mit Masscan, einem extrem leistungsfähigen TCP-Port-Scanner für effiziente Netzwerk-Reconnaissance. Sie sammeln praktische Erfahrung, indem Sie Masscan aus dem Quellcode installieren, Scan-Parameter konfigurieren, Scans in privaten Netzwerkbereichen durchführen und die Ergebnisse analysieren.

Am Ende dieses Labs werden Sie in der Lage sein, Ziele präzise zu definieren, Hochgeschwindigkeits-Scans auszuführen, die Ausgabe zur Identifizierung offener Ports zu interpretieren und Ihre Funde in gängige Formate für Berichte und weiterführende Analysen zu exportieren.

Dies ist ein geführtes Lab, das Schritt-für-Schritt-Anleitungen bietet, um Sie beim Lernen und Üben zu unterstützen. Folgen Sie den Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrung zu sammeln. Historische Daten zeigen, dass dies ein Lab für Anfänger mit einer Abschlussquote von 100 % ist. Es hat eine positive Bewertungsrate von 98 % von Lernenden erhalten.

Masscan aus dem Quellcode installieren

Im ersten Schritt werden Sie Masscan kompilieren und installieren. Masscan ist ein unglaublich schneller Port-Scanner, der theoretisch das gesamte Internet in wenigen Minuten scannen kann. Wir installieren das Tool direkt aus dem Quellcode, um sicherzustellen, dass wir die aktuellste Version verwenden. Die erforderlichen Build-Tools und Bibliotheken sind in Ihrer Umgebung bereits vorinstalliert.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project befinden, dem vorgesehenen Arbeitsbereich für dieses Lab.

cd ~/project

Laden Sie als Nächstes den Masscan-Quellcode mit git aus dem offiziellen GitHub-Repository herunter.

git clone https://github.com/robertdavidgraham/masscan --depth 1

Dieser Befehl erstellt ein neues Verzeichnis namens masscan, das den Quellcode enthält. Wechseln Sie in dieses Verzeichnis.

cd masscan

Kompilieren Sie nun den Quellcode mit dem Befehl make. Dieser Befehl liest das Makefile im Verzeichnis und erstellt die ausführbare Binärdatei.

make

Nach Abschluss der Kompilierung finden Sie die ausführbare Datei masscan im Verzeichnis bin. Sie können den Erfolg des Builds überprüfen, indem Sie die Version abfragen.

./bin/masscan --version

Sie sollten eine Ausgabe ähnlich dieser sehen:

Masscan version 1.3.9-integration ( https://github.com/robertdavidgraham/masscan )
Compiled on: Aug 29 2025 11:15:09
Compiler: gcc 11.4.0
OS: Linux
CPU: x86 (64 bits)
GIT version: unknown

Um den Befehl masscan systemweit verfügbar zu machen, installieren Sie ihn schließlich in ein Standardverzeichnis wie /usr/local/bin. Das mitgelieferte Makefile enthält ein install-Ziel, das dies für Sie erledigt.

sudo make install

Dieser Befehl kopiert die masscan-Binärdatei nach /usr/local/bin/, was sich im PATH Ihres Systems befindet. Sie können Masscan nun von jedem beliebigen Verzeichnis aus aufrufen.

Überprüfen Sie die Installation:

masscan --version

Wenn die Versionsnummer angezeigt wird, ist Masscan korrekt installiert.

Zielbereich definieren

Bevor Sie einen Scan starten, müssen Sie festlegen, welche IP-Adressen Sie anvisieren möchten. Für diese Lab-Demonstration konzentrieren wir uns auf eine kleine Auswahl privater IP-Adressbereiche, um eine schnelle Ausführung zu gewährleisten. Das Scannen dieser begrenzten internen Bereiche ist eine sichere und effiziente Methode zu Lernzwecken.

Wir erstellen eine Datei, um unsere Zielbereiche aufzulisten. Vergewissern Sie sich zuerst, dass Sie sich im Hauptprojektverzeichnis befinden.

cd ~/project

Verwenden Sie nun den Texteditor nano, um eine Datei namens targets.txt zu erstellen.

nano targets.txt

Fügen Sie im nano-Editor die folgenden kleinen IP-Bereiche zu Demonstrationszwecken hinzu, jeweils in einer neuen Zeile. Diese Bereiche sind in CIDR-Notation (Classless Inter-Domain Routing) geschrieben, einer kompakten Methode zur Darstellung von IP-Adressblöcken.

192.168.1.0/24
172.17.0.0/24
10.0.0.0/24

Um die Datei in nano zu speichern, drücken Sie Ctrl+O und bestätigen Sie den Dateinamen mit Enter. Um nano zu beenden, drücken Sie Ctrl+X.

Nach dem Speichern können Sie den Inhalt der Datei mit dem Befehl cat überprüfen.

cat targets.txt

Die Ausgabe sollte die drei kleinen CIDR-Bereiche anzeigen, die Sie gerade eingegeben haben.

192.168.1.0/24
172.17.0.0/24
10.0.0.0/24

Diese Datei dient nun als Eingabequelle für Masscan und teilt dem Tool im nächsten Schritt mit, welche Netzwerke gescannt werden sollen. Diese kleineren Bereiche (mit jeweils nur 256 IP-Adressen) sorgen dafür, dass der Scan sehr schnell abgeschlossen wird, normalerweise in weniger als einer Minute.

Hochgeschwindigkeits-Port-Scan durchführen

Nachdem Masscan installiert und Ihre Ziele definiert sind, können Sie nun einen Port-Scan durchführen. In diesem Schritt führen Sie einen Demonstrations-Scan auf gängigen Ports unter Verwendung der zuvor definierten IP-Bereiche aus.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project befinden, in dem Ihre Datei targets.txt liegt.

cd ~/project

Führen Sie nun den folgenden masscan-Befehl aus. Dieser Befehl erfordert sudo, da Masscan Raw Sockets zum Senden von Paketen verwendet, was erhöhte Privilegien voraussetzt.

sudo masscan -p22,80,443,8080 -iL targets.txt --rate 1000 -oG scan_results.gnmap

Hier ist die Erläuterung der verwendeten Optionen:

  • -p22,80,443,8080: Spezifiziert die zu scannenden Standard-Ports (SSH, HTTP, HTTPS und ein alternativer HTTP-Port). Dieser fokussierte Ansatz beschleunigt den Vorgang.
  • -iL targets.txt: Weist Masscan an, die Ziel-IP-Bereiche aus der Datei targets.txt zu lesen.
  • --rate 1000: Setzt die Übertragungsrate auf 1000 Pakete pro Sekunde. Dies ist eine sichere Rate für eine Lab-Umgebung.
  • -oG scan_results.gnmap: Speichert die Ausgabe im "grepable"-Format in der Datei scan_results.gnmap. Dieses Format lässt sich leicht mit Kommandozeilen-Tools auswerten.

Während der Scan läuft, zeigt Masscan den Fortschritt an. Bei unseren kleinen Zielbereichen sollte der Scan in weniger als einer Minute fertig sein.

Starting masscan 1.3.9-integration (http://bit.ly/14GZzcT) at 2025-08-29 03:20:16 GMT
Initiating SYN Stealth Scan
Scanning 768 hosts [4 ports/host]

Sobald der Scan abgeschlossen ist, befindet sich eine neue Datei namens scan_results.gnmap in Ihrem Verzeichnis. Sie können den Inhalt mit cat betrachten.

cat scan_results.gnmap

Die Ausgabe listet alle Hosts auf, bei denen offene Ports gefunden wurden. Da wir kleine private Bereiche innerhalb einer Container-Umgebung scannen, finden Sie möglicherweise offene Ports im Docker-Bridge-Netzwerk. Entdeckte offene Ports erscheinen in einem Format wie diesem:

## Masscan 1.3.9-integration scan initiated Fri Aug 29 03:20:16 2025
## Ports scanned: TCP(4;22-22,80-80,443-443,8080-8080) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Timestamp: 1756437619   Host: 172.17.0.1 ()     Ports: 22/open/tcp//ssh//
## Masscan done at Fri Aug 29 03:20:31 2025

Die Ergebnisse zeigen, dass wir 768 Hosts auf 4 spezifische Ports (22, 80, 443, 8080) gescannt und den Vorgang in etwa 15 Sekunden abgeschlossen haben. In diesem Beispiel hat Masscan einen offenen Port gefunden – SSH (Port 22) auf dem Docker-Bridge-Gateway unter 172.17.0.1. Dies demonstriert die Fähigkeit von Masscan, offene Dienste in Netzwerkbereichen schnell aufzuspüren.

Wichtige Punkte zum Ausgabeformat:

  • Der Zeitstempel (Timestamp) gibt an, wann die Entdeckung gemacht wurde.
  • Das Format Host: IP () Ports: Port/Status/Protokoll//Dienst// ermöglicht eine klare Identifizierung der Dienste.
  • Masscan hat den SSH-Dienst auf der Docker-Bridge gefunden, was ein typisches Ergebnis in containerisierten Umgebungen ist.

Offene Ports auswerten

Nach dem Scan besteht der nächste Schritt darin, die Ergebnisse zu analysieren, um die offenen Ports zu identifizieren. Die Datei scan_results.gnmap enthält zwar alle Informationen, kann aber mit anderen Werkzeugen weiterverarbeitet werden, um die relevantesten Daten zu extrahieren.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project befinden.

cd ~/project

Das .gnmap-Format ist so konzipiert, dass es leicht maschinell verarbeitet werden kann. Um schnell alle Zeilen mit offenen Ports zu finden, können Sie den Befehl grep verwenden.

grep "open" scan_results.gnmap

Dieser Befehl filtert die Datei und zeigt nur die Zeilen an, die das Wort "open" enthalten. Die Ausgabe listet jeden Host und seine offenen Ports auf, etwa so:

Timestamp: 1756437619   Host: 172.17.0.1 ()     Ports: 22/open/tcp//ssh//

Um eine schnelle Zusammenfassung zu erhalten, welche Ports in den gescannten Netzwerken am häufigsten offen sind, können Sie eine Befehlskette (Pipeline) erstellen. Der folgende Befehl extrahiert nur die Portnummern, sortiert sie und zählt die eindeutigen Vorkommen.

grep -oP '\d+/open' scan_results.gnmap | sort | uniq -c

Erklärung dieses mächtigen Einzeilers:

  • grep -oP '\d+/open': Extrahiert nur die passenden Teile (-o) der Zeilen, die dem regulären Ausdruck (-P) entsprechen (Ziffern gefolgt von /open).
  • sort: Sortiert die Liste der offenen Ports alphabetisch, wodurch identische Ports gruppiert werden.
  • uniq -c: Fasst aufeinanderfolgende identische Zeilen zusammen und stellt die Anzahl (-c) der Vorkommen voran.

Eine Beispielausgabe könnte so aussehen und darauf hinweisen, dass bei einem Host Port 22 (SSH) offen ist:

      1 22/open

Diese Technik ist äußerst nützlich, um einen schnellen Überblick über die im Netzwerk exponierten Dienste zu erhalten. In diesem Fall sehen wir, dass SSH der einzige entdeckte Dienst ist, was typisch für Docker-Bridge-Netzwerke ist, bei denen das Gateway SSH-Zugriff bietet.

Scan-Ergebnisse exportieren

Für Berichte oder die Weiterverarbeitung ist es oft notwendig, Scan-Ergebnisse in ein strukturierteres Format zu exportieren. In diesem Schritt konvertieren Sie Ihre Ergebnisse in eine CSV-Datei (Comma-Separated Values), die problemlos in Tabellenkalkulationsprogramme importiert werden kann.

Vergewissern Sie sich, dass Sie sich im Verzeichnis ~/project befinden.

cd ~/project

Wir verwenden eine Kombination aus grep und sed, um die .gnmap-Datei zu parsen und eine saubere CSV-Datei zu erstellen. sed ist ein mächtiger Stream-Editor, der Daten mithilfe regulärer Ausdrücke extrahieren und umformatieren kann.

Führen Sie den folgenden Befehl aus, um scan_results.csv zu erstellen:

grep "open" scan_results.gnmap | sed 's/.*Host: \([^ ]*\) .*Ports: \([0-9]*\)\/open\/\([^/]*\).*/\1,\2,\3/' > scan_results.csv

So funktioniert dieser Befehl:

  • grep "open" scan_results.gnmap: Filtert zuerst nach Zeilen mit offenen Ports.
  • sed 's/.*Host: \([^ ]*\) .*Ports: \([0-9]*\)\/open\/\([^/]*\).*/\1,\2,\3/': Verwendet einen regulären Ausdruck, um die IP-Adresse, die Portnummer und das Protokoll aus dem Masscan-Format zu extrahieren und als CSV zu formatieren.
  • > scan_results.csv: Leitet die endgültige Ausgabe in eine neue Datei namens scan_results.csv um.

Sie können nun Ihre neu erstellte CSV-Datei betrachten:

cat scan_results.csv

Die Ausgabe ist eine saubere, durch Kommas getrennte Liste von Hosts und ihren offenen Ports:

172.17.0.1,22,tcp

Dieses strukturierte Format ist ideal, um es mit Teammitgliedern zu teilen, in Datenbanken zu importieren oder als Eingabe für andere Sicherheitswerkzeuge zu nutzen. Das CSV-Format zeigt IP-Adresse, Portnummer und Protokoll in einer leicht lesbaren Form.

Zusammenfassung

In diesem Lab haben Sie erfolgreich die Grundlagen der Verwendung von Masscan für Hochgeschwindigkeits-Netzwerk-Scans erlernt. Sie haben den gesamten Workflow durchlaufen – von der Installation des Tools aus dem Quellcode bis hin zur Analyse und dem Export der Ergebnisse.

Sie haben praktische Erfahrungen in folgenden Bereichen gesammelt:

  • Kompilieren und Installieren von Software aus dem Quellcode unter Linux.
  • Definieren von Scan-Zielen mittels CIDR-Notation.
  • Ausführen von Port-Scans mit spezifischen Parametern für Ports, Rate und Ausgabeformat.
  • Analysieren von Scan-Ergebnissen mit Kommandozeilen-Tools wie grep, sort und uniq.
  • Exportieren von Daten in ein strukturiertes CSV-Format für das Reporting.

Diese Fähigkeiten bilden eine solide Grundlage, um Netzwerk-Reconnaissance schnell, effizient und verantwortungsbewusst durchzuführen.