
Python-Wrapper um masscan und nmap für Port-Erkennung im großen Maßstab, Host-Erkennung, Banner-Grabbing und NSE-basierte Schwachstellen-Scans in internen oder externen Netzwerken.
Dieses Skript ist ein Wrapper für masscan und nmap. nmap übernimmt die Host-Erkennung und (bei kleineren Scans) die Port-Erkennung, das Abgreifen von Service-Bannern und NSE-Scripts. Masscan wird für die Port-Erkennung in großem Maßstab eingesetzt, wo es auf rohe Geschwindigkeit ankommt. Installiere beide über deinen bevorzugten Paketmanager oder aus dem Quellcode.
Python 3.8+ ist erforderlich (requires-python in pyproject.toml; CI verwendet mindestens 3.8).
SpooNMAP kann direkt aus einem Checkout ausgeführt werden — kein Installationsschritt erforderlich, siehe „Verwendung" unten — oder als eigenständiger Befehl mit uv installiert werden:
uv tool install git+https://github.com/trustedsec/spoonmap
Dadurch wird eine ausführbare Datei spoonmap in deinem PATH abgelegt, sodass du sie als
spoonmap aus jedem beliebigen Verzeichnis aufrufen kannst, anstatt das Repository zu klonen und
./spoonmap.py auszuführen. Es gibt kein PyPI-Paket — dieses Projekt wurde nie
auf pypi.org veröffentlicht, und der obige Befehl installiert direkt aus dem
Git-Repository. Verwende die vollständige Form git+https://... wie oben, nicht ein
bloßes uv tool install spoonmap; worauf auch immer dieser Name auf PyPI verweist, jetzt
oder in Zukunft, es ist nicht dieses Projekt.
Um auf den neuesten Commit zu aktualisieren:
uv tool upgrade spoonmap
Wenn du auf diese Weise installierst, wird SpooNMAP nicht zu einem eigenständigen Scanner: masscan und nmap sind weiterhin separate Systemwerkzeuge, die unabhängig installiert werden müssen (siehe „Abhängigkeiten" oben), genau wie beim Ausführen aus einem Checkout — uv tool install packt nur SpooNMAPs eigenen Python-Code und die mitgelieferten NSE-Skripte, nicht die externen Binärdateien, die es aufruft.
Eine Sache, die es zu verstehen gilt, bevor du auf diese Weise installierst: Das Python-Modul eines installierten spoonmap liegt dort, wo uv seine verwaltete Tool-Umgebung abgelegt hat — nicht in einem Verzeichnis, in dem du jemals nach einer Konfigurationsdatei oder Scan-Ausgabe suchen würdest. Genau das ist das Szenario, um das es im Abschnitt „Wo Dateien liegen" weiter unten geht — lies diesen Abschnitt, um zu erfahren, was relativ zu deinem aktuellen Verzeichnis aufgelöst wird und warum; die Installation über uv tool install ändert die Regel nicht, sie macht die Regel nur relevant, da kein Checkout-Verzeichnis mehr übrig ist, auf das ein Konfigurations- oder Ausgabepfad aus Gewohnheit zurückfallen könnte.
Wenn du das Skript einfach ausführst, wirst du nach allen erforderlichen Optionen gefragt.
config.json, Ziel-/Ausschlussdateien und Scan-Ausgaben werden alle relativ zu dem Verzeichnis aufgelöst, aus dem du den Befehl ausführst — siehe „Wo Dateien liegen" weiter unten, falls deine Ausgabe nicht dort ist, wo du sie erwartest, insbesondere wenn du es gewohnt bist, SpooNMAP per Pfad von außerhalb seines eigenen Verzeichnisses aufzurufen.
Wenn du uv verwendest, kannst du ohne separate virtuelle Umgebung ausführen:
uv run spoonmap.py
Oder rufen Sie es direkt auf, wenn das Skript ausführbar ist:
# ./spoonmap.py
________ _____ _______ _________________
__ ___/______________________ | / /__ |/ /__ |__ __ \
_____ \___ __ \ __ \ __ \_ |/ /__ /|_/ /__ /| |_ /_/ /
____/ /__ /_/ / /_/ / /_/ / /| / _ / / / _ ___ | ____/
/____/ _ .___/\____/\____//_/ |_/ /_/ /_/ /_/ |_/_/
/_/
Service Categories (comma-separated numbers, default: All)
(1) Web [80, 443, 7001, 7002, 8000, 8080, 8081, 8443, 8888, 9090, 10443]
(2) Database [1433, U:1434, 1521, 3306, 5432, 6379, 9200, 27017]
(3) Remote Management [22, 23, 3389, 5900, 5901, 6129, 1723, 5985, 5986]
(4) Email [25, 110, 143, 465, 587, 993, 995]
(5) LDAP [389, 636]
(6) Network Infrastructure [53, 179, U:500, U:161, U:623, U:631, U:1194, 1194]
(7) File Transfer [21, 111]
(8) SMB [445, 135, 139, U:137]
(9) Specialized [1090, 3300, 4786, 6970, 2375, 4243, 9100, 8530, 8531]
(10) Containers & Debuggers [2377, 10250, 8001, 9229, 2345, 5005, 61616, 8009, 6000]
(11) Local LLM [11434, 1234, 7860, 5000, 5001, 1337, 3000, 8000, 8080]
(12) Full Port Scan [1-65535, TCP only — no UDP]
(c) Custom Port Scan [enter your own comma-separated ports]
(The Full Port Scan number increments automatically with the number of categories.)
**Full Port Scan is TCP only.** It sweeps TCP 1-65535 and runs no UDP discovery at
all, so every `U:` port listed in the categories above — SNMP (U:161), IKE (U:500),
IPMI (U:623), IPP (U:631), OpenVPN (U:1194), NetBIOS (U:137), SQL Browser (U:1434) —
is skipped, along with the NSE scripts and findings that depend on them. It is
*wider* than All on TCP and *narrower* on UDP. For both, run All and Full as two
passes, or use the Custom option with the UDP ports appended
(e.g. `1-65535,U:161,U:500,U:623`).
Which categories would you like to scan (e.g. 1,3 — default: All)?
Would you like to enumerate service banners for any identified services (default: Yes)?
Would you like to run NSE security scripts on identified services (default: No)?
Target Scan
(1) External
(2) Internal
Is this an internal or external scan (default: External)?
How fast would you like to scan (default: 20000 packets/second)?
Please enter the full path for the file containing target hosts (default: /opt/spoonmap/ranges.txt):
Would you like to exclude any hosts? (default: No)
Run host discovery before port scanning (default: Yes)?
Tune advanced settings (nmap threads, masscan batch size, nmap work-unit threshold)? (default: No)
Du kannst auch eine config.json-Datei erstellen (basierend auf config.json.sample), um alle Eingabeaufforderungen zu überspringen:
{
"scan_categories": ["Web", "Database", "Remote Management"],
"banner_scan": "True",
"script_scan": "False",
"host_discovery": "True",
"target_scan": "Internal",
"max_rate": "2000",
"target_file": "ranges.txt",
"output_path": "./",
"exclusions_file": "exclusions.txt",
"nmap_threads": 5,
"masscan_batch_size": 5,
"nmap_threshold": 5000000
}