
Subdomain-Enumeration-Tool, asynchrone DNS-Pakete, verwendet pcap, um 1600,000 Subdomains in 1 Sekunde zu scannen
English | Deutsch
KSubdomain ist ein Subdomain-Brute-Force-Tool, das auf statusloser Technologie basiert und beispiellose Scan-Geschwindigkeit und extrem geringen Speicherverbrauch bietet. Es verwendet Raw-Sockets, um direkt auf den Netzwerkadapter zuzugreifen, den Systemkernel-Stack zu umgehen und mit einem zuverlässigen Status-Tabellen-Wiederholungsmechanismus die Vollständigkeit der Ergebnisse zu gewährleisten. Unterstützt Windows, Linux, macOS und ist das bevorzugte Werkzeug für die großflächige DNS-Asset-Erkennung.
--interface für mehrere Netzwerkkarten – Bandbreitenbündelung, Nutzung mehrerer eingehender IPs.EnumStream/VerifyStream für die Echtzeitverarbeitung der Ergebnisse.4‑Kern-CPU, 5 Mbit/s Bandbreite, Test mit 100.000 Wörterbuch-Einträgen:
Gehe zu Releases und lade die neueste Version für dein System herunter.
Abhängigkeiten installieren:
libpcap-dev installieren.git clone https://github.com/boy-hack/ksubdomain.git
cd ksubdomain
# Empfehlenswert: Version via ldflags einfließen lassen
go build -ldflags "-X github.com/boy-hack/ksubdomain/v2/pkg/core/conf.Version=v2.x.y" \
-o ksubdomain ./cmd/ksubdomain
Oder mit go install:
go install github.com/boy-hack/ksubdomain/v2/cmd/ksubdomain@latest
Hinweis: Das Programm benötigt Root‑/
CAP_NET_RAW-Berechtigungen (Raw-Socket-Betrieb).
Verwendung:
ksubdomain [globale Optionen] <Befehl> [Befehlsoptionen]
Befehle:
enum, e Enumerations-Modus: Subdomain-Brute-Force für eine Hauptdomain
verify, v Verifikations-Modus: Prüft, ob eine Liste von Domains aufgelöst wird
test Testet die maximale Sende-Geschwindigkeit der lokalen Netzwerkkarte
device Zeigt verfügbare Netzwerkkarten an
help, h Zeigt Hilfe an
Globale Optionen:
--help, -h Hilfe anzeigen
--version, -v Versionsinformation ausgeben
Überprüft, ob die angegebene Domain-Liste DNS-Einträge besitzt.
Optionen:
--domain, -d Domain angeben (wiederholbar)
--filename, -f Domain-Liste aus Datei lesen
--stdin Von Standardeingabe lesen
--bandwidth, -b Bandbreitenbegrenzung, z. B. 5m, 10m, 100m (Standard 3m)
--resolvers, -r DNS-Server angeben (Standard: integrierte)
--output, -o Ausgabedatei-Pfad
--format, -f Ausgabeformat: txt (Standard), json, csv, jsonl
--silent, -s Ruhiger Modus – nur Domain ausgeben (kein Banner/Log)
--only-domain, --od Nur Domain ausgeben, keine IP/Einträge
--retry Anzahl Wiederholungen, -1 = unendlich (Standard 3)
--timeout Timeout pro Abfrage in Sekunden (Standard 6)
--interface, -e Netzwerkkartenname angeben (wiederholbar für parallelen Versand)
--wildcard-filter Wildcard-Filter: none (Standard), basic, advanced
--predict Subdomain-Vorhersagemodus aktivieren
--quiet, -q Keine Ausgabe auf dem Bildschirm (nur Datei)
--color, -c Farbige Ausgabe
# Einzelne/mehrere Domains verifizieren
./ksubdomain v -d www.example.com -d mail.example.com
# Aus Datei lesen, als txt speichern
./ksubdomain v -f domains.txt -o output.txt
# Pipe-Eingabe, Bandbreite 10M, ruhiger Modus – an nachgelagerte Tools weiterreichen
cat domains.txt | ./ksubdomain v --stdin -b 10m -s --od | httpx -silent
# Erweiterter Wildcard-Filter, JSONL-Ausgabe
./ksubdomain v -f domains.txt --wildcard-filter advanced --format jsonl -o output.jsonl
# Paralleler Versand über mehrere Netzwerkkarten (Bandbreitenbündelung)
./ksubdomain v -f domains.txt --interface eth0 --interface eth1
Brute-Force für Subdomains einer angegebenen Domain mittels Wörterbuch und Vorhersage-Algorithmus.
Optionen:
--domain, -d Ziel-Hauptdomain (wiederholbar)
--domain-list, --ds Datei mit mehreren Hauptdomains
--filename, -f Wörterbuch-Datei (Standard: integriertes Wörterbuch)
--use-ns-records NS-Einträge der Domain auslesen und als DNS-Resolver hinzufügen
(Restliche Optionen wie im verify-Modus)
# Einzelne Domain enumerieren (mit integriertem Wörterbuch)
./ksubdomain e -d example.com
# Mit eigenem Wörterbuch
./ksubdomain e -d example.com -f subdomains.txt -o result.txt
# Vorhersage-Modus + erweiterter Wildcard-Filter
./ksubdomain e -d example.com --predict --wildcard-filter advanced
# Batch-Enumeration mehrerer Hauptdomains
./ksubdomain e --domain-list roots.txt -b 10m --format jsonl -o result.jsonl
# Pipe an httpx
./ksubdomain e -d example.com --od -s | httpx -silent
# Maximale Sende-Geschwindigkeit der Netzwerkkarte testen
./ksubdomain test
# Verfügbare Netzwerkkarten anzeigen
./ksubdomain device
Kein manuelles Setzen von --timeout nötig. Die Engine passt die Timeout-Grenzen dynamisch basierend auf gemessenen RTT-Werten an (exponentiell gewichteter gleitender Mittelwert, EWMA α=0,125). Dies reduziert Fehlalarme und vermeidet unnötiges Warten.
Durch wiederholtes Angeben von --interface können mehrere Netzwerkkarten gleichzeitig Pakete senden. Mehrere Goroutinen teilen sich denselben domainChan und konsumieren konkurrierend – natürlicher Lastausgleich:
./ksubdomain e -d example.com --interface eth0 --interface eth1 -b 20m
Mit --predict sagt das Tool basierend auf bereits gefundenen Subdomains mögliche verwandte Subdomains voraus und erhöht so die Erkennungsrate.
none: Kein Filter (Standard)basic: Einfacher Filter – entfernt offensichtliche Wildcard-IPsadvanced: Erweiterter Filter – mehrdimensionale Analyse# Mit httpx – lebende Web-Dienste erkennen
./ksubdomain e -d example.com -s --od | httpx -silent
# Mit nuclei – Schwachstellen-Scan
./ksubdomain e -d example.com -s --od | nuclei -l /dev/stdin
# JSONL-Streaming – nur A-Einträge filtern
./ksubdomain e -d example.com --format jsonl | jq -r 'select(.type=="A") | .domain'
# Mehrere Domains + Deduplizierung
./ksubdomain e --domain-list roots.txt -s --od | sort -u > all_subs.txt
macOS:
# BPF-Puffer sind klein – Bandbreite begrenzen
sudo ./ksubdomain e -d example.com -b 5m
WSL/WSL2:
# In der Regel eth0 verwenden
./ksubdomain e -d example.com --interface eth0
Windows:
# Npcap installieren und als Administrator ausführen
.\ksubdomain.exe enum -d example.com
go get github.com/boy-hack/ksubdomain/v2/sdk
import "github.com/boy-hack/ksubdomain/v2/sdk"
scanner := sdk.NewScanner(&sdk.Config{
Bandwidth: "5m",
Retry: 3,
WildcardFilter: "advanced",
})
// Blockierend – alle Ergebnisse sammeln
results, err := scanner.Enum("example.com")
// Streaming-Rückruf – Echtzeit-Verarbeitung
err = scanner.EnumStream(ctx, "example.com", func(r sdk.Result) {
fmt.Printf("%s => %v\n", r.Domain, r.Records)
})
Weitere Details siehe SDK-Dokumentation und API-Dokumentation.
# Unit-Tests (ohne Root-Rechte)
go test ./pkg/...
# Regressionstests (erfordert Root + Netzwerk)
go build -o ksubdomain ./cmd/ksubdomain
sudo go test ./test/regression/... -tags regression -v -timeout 120s
MIT-Lizenz – siehe LICENSE
| Tool | Methode | Dauer | Erfolge |
|---|
| KSubdomain | pcap über Netzwerkkarte | ~30 s | 1397 |
| massdns | pcap/socket | ~3 min 29 s | 1396 |
| dnsx | socket | ~5 min 26 s | 1396 |
| Format | Beschreibung | Anwendungsszenario |
|---|
txt | Domain => Eintrag, Echtzeit-Ausgabe | Standard, manuelle Prüfung |
json | Vollständiges JSON, nach Abschluss geschrieben | Programmatische Verarbeitung |
csv | CSV-Tabelle, nach Abschluss geschrieben | Datenanalyse |
jsonl | Eine JSON-Zeile pro Eintrag, Echtzeit-Ausgabe | Streaming, Pipe-Verarbeitung |