
Knock Subdomain-Scan
✅ Schnell & Async • 🔐 Recon + Brute • 🔧 Einfach erweiterbar
KnockPy ist ein modulares Python-3-Tool zur Auflistung von Subdomains durch passive Aufklärung und Brute-Force, jetzt mit async/await-Unterstützung, verbesserter Leistung und modernem HTTP/TLS-Handling.
httpx und DNS-Auflösung--verbose Einzel-Domain-Diagnose (DNS/TCP/TLS/Weiterleitungsketten/Anfragefehler + Sicherheitsprüfungen)show/delete/export/search)git clone https://github.com/guelfoweb/knockpy.git
cd knockpy
# recommended: install in a virtual environment
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install -U pip
pip install .
# alternative: install for the current user (no venv)
# python3 -m pip install --user .
⚠️ Empfohlene Python-Version: 3.9+
Die Codebasis ist nach Zuständigkeiten organisiert, mit stabilen Fassaden für Abwärtskompatibilität:
knockpy/
cli.py # CLI entrypoint (facade/orchestration)
cli_parts/
status.py # runtime/status panel rendering
setup.py # interactive setup and persisted runtime defaults
report.py # interactive report mode
scan_flow.py # exclude rules, recon-test, wildcard helpers
core.py # public core facade (compatibility)
engine/
runtime.py # scanning engine implementation
storage.py # public storage facade (compatibility)
storage_parts/
db.py # SQLite persistence/settings
export.py # report export orchestration
html_report.py # HTML report rendering
output.py # terminal output rendering
server_versions.py # web-server versions catalog
knockpy.py # compatibility module exports
Hinweis zur Kompatibilität:
import knockpy oder from knockpy import KNOCKPY.engine/, cli_parts/ und storage_parts/ aufgeteilt.Erst nach Veröffentlichung der stabilen Version auf GitHub
pip install knock-subdomains
knockpy -d domain.com [options]
--threads und --timeoutDiese beiden Optionen haben den größten Einfluss auf die Laufzeit bei großen Scans.
--threads steuert die Parallelität (wie viele Ziele parallel verarbeitet werden)--timeout steuert, wie lange jeder Netzwerkschritt wartet, bevor er aufgibtKompromiss:
threads = schnellere Scans, aber mehr Last auf CPU/Netzwerk/DNS und höheres Risiko von Remote-Rate-Limitstimeout = schnellere Scans, aber höheres Risiko, langsame aber gültige Ziele zu übersehen (falsch Negative)Empfohlene Profile:
--threads 50 --timeout 5--threads 150 --timeout 4--threads 250 --timeout 3Wenn Sie sowohl Geschwindigkeit als auch Vollständigkeit bei sehr großen Listen benötigen, verwenden Sie eine 2-Durchlauf-Strategie:
--threads 250 --timeout 3--threads 80 --timeout 5 (oder höher)Hinweise:
--setup) überschreiben integrierte Standardwertethreads=250, timeout=3knockpy -d example.com --recon --bruteforce
knockpy -d example.com --recon --test
knockpy --update-versions
knockpy --check-update
Beim ersten Start erstellt KnockPy:
~/.knockpy/recon_services.json
Sie können Quellen hinzufügen/deaktivieren, indem Sie das services-Array bearbeiten.
Sie können auch auf einen benutzerdefinierten Dateipfad verweisen, ohne Code zu ändern:
export KNOCK_RECON_SERVICES=/path/to/recon_services.json
Jeder Dienst unterstützt:
nameenabled (true/false)parserurl_template (unterstützt {domain}, {virustotal_key}, {shodan_key})requires_api (virustotal oder shodan, optional)Unterstützte Parser:
csv_first_columnrapiddns_html_tdjson_listvirustotal_subdomainsshodan_subdomainsecho "example.com" | knockpy -d
export API_KEY_VIRUSTOTAL=your-virustotal-api-key
export API_KEY_SHODAN=your-shodan-api-key
Sie können eine .env-Datei verwenden:
API_KEY_VIRUSTOTAL=your-virustotal-api-key
API_KEY_SHODAN=your-shodan-api-key
knockpy -d example.com --recon --bruteforce
knockpy --report list
knockpy --report latest
knockpy --report
Interaktives Berichtsmenü:
1 anzeigen2 löschen3 exportieren4 suchen0 DB zurücksetzen (fragt explizite Bestätigung)Berichtsmodus beenden:
Enter bei leerer AktionsaufforderungCTRL+Cknockpy -d forum.example.com --verbose
knockpy -d example.com --wildcard
KnockPy kann als Python-Modul verwendet werden:
import knockpy
result = knockpy.KNOCKPY("example.com", timeout=5.0, threads=20)
print(result["domain"], result["ip"])
oder:
from knockpy import KNOCKPY
domain = 'example.com'
results = KNOCKPY(
domain,
dns="8.8.8.8",
useragent="Mozilla/5.0",
timeout=5,
threads=10,
recon=True,
bruteforce=True,
wordlist=None,
silent=False
)
for entry in results:
print(entry['domain'], entry['ip'], entry['http'], entry['cert'])
Eine Standard-Wortliste ist in knockpy/wordlist/wordlist.txt enthalten.
Sie können Ihre eigene mit --wordlist bereitstellen.
python3 -m pytest
# (optional) smoke-run example script
python3 examples/poc.py
Lizenziert unter der GPLv3-Lizenz.
Gianni Amato (@guelfoweb)
| Flag | Beschreibung |
|---|
-d, --domain | Ziel-Domain (oder stdin, wenn ohne Wert verwendet) |
-f, --file | Datei mit einer Liste von Domains |
--recon | Passive Aufklärung aktivieren |
--bruteforce, --brute | Brute-Force mit Wortliste aktivieren |
--exclude TYPE VALUE | Treffer ausschließen (status, length/lenght, body) |
--verbose | Tiefe Diagnose nur für Einzel-Domain-Scans |
--wildcard | Wildcard-DNS testen und beenden |
--test | Mit --recon jede Recon-Quelle testen (fehlgeschlagen/leer/Daten) |
--setup | Interaktive Einrichtung (Laufzeit-Standardwerte + API-Schlüssel in DB) |
--update-versions | Lokalen Katalog der neuesten Webserver-Versionen aktualisieren |
--report [ID|latest|list] | Berichtsmodus (interaktiv anzeigen/löschen/exportieren/suchen/DB zurücksetzen, HTML exportieren) |
--check-update | Online prüfen, ob eine neuere Knockpy-Version auf PyPI verfügbar ist |
--wordlist | Laufzeit-Überschreibung für Wortliste |
--dns | Laufzeit-Überschreibung für DNS-Resolver |
--useragent | Laufzeit-Überschreibung für HTTP-User-Agent |
--timeout | Laufzeit-Überschreibung für Timeout (Sekunden) |
--threads | Laufzeit-Überschreibung für gleichzeitige Worker |
--silent | Fortschrittsbalken ausblenden |
--json | Nur JSON-Ausgabe (erzwingt --silent) |
--status | Laufzeitstatus anzeigen und fortfahren |
-h, --help | Hilfemeldung anzeigen |