
Knock Subdomain Scan
✅ Rapide & Asynchrone • 🔐 Recon + Force Brute • 🔧 Facile à Étendre
KnockPy est un outil modulaire en Python 3 pour énumérer les sous-domaines via la reconnaissance passive et la force brute, désormais avec support async/await, des performances améliorées et une gestion moderne HTTP/TLS.
httpx et résolution DNS--verbose pour domaine unique (DNS/TCP/TLS/chaînes de redirection/erreurs de requête + vérifications de sécurité)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 .
⚠️ Version Python recommandée : 3.9+
Le code est organisé par responsabilité, avec des façades stables pour la rétrocompatibilité :
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
Note de compatibilité :
import knockpy ou from knockpy import KNOCKPY.engine/, cli_parts/ et storage_parts/.Uniquement après la publication de la version stable sur GitHub
pip install knock-subdomains
knockpy -d domain.com [options]
--threads et --timeoutCes deux options ont le plus grand impact sur la durée d'exécution pour les grands scans.
--threads contrôle la concurrence (combien de cibles sont traitées en parallèle)--timeout contrôle combien de temps chaque étape réseau attend avant d'abandonnerCompromis :
threads plus élevés = scans plus rapides, mais plus de charge sur le CPU/réseau/DNS et risque plus élevé de limitations de débit distantestimeout plus bas = scans plus rapides, mais risque plus élevé de manquer des cibles lentes mais valides (faux négatifs)Profils recommandés :
--threads 50 --timeout 5--threads 150 --timeout 4--threads 250 --timeout 3Si vous avez besoin à la fois de vitesse et d'exhaustivité sur de très grandes listes, utilisez une stratégie en deux passes :
--threads 250 --timeout 3--threads 80 --timeout 5 (ou plus)Remarques :
--setup) remplacent les valeurs par défaut intégréesthreads=250, timeout=3knockpy -d example.com --recon --bruteforce
knockpy -d example.com --recon --test
knockpy --update-versions
knockpy --check-update
Lors de la première exécution, KnockPy crée :
~/.knockpy/recon_services.json
Vous pouvez ajouter/désactiver des sources en modifiant le tableau services.
Vous pouvez également pointer vers un chemin de fichier personnalisé sans modifier le code :
export KNOCK_RECON_SERVICES=/path/to/recon_services.json
Chaque service prend en charge :
nameenabled (true/false)parserurl_template (prend en charge {domain}, {virustotal_key}, {shodan_key})requires_api (virustotal ou shodan, facultatif)Analyseurs pris en charge :
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
Vous pouvez utiliser un fichier .env :
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
Menu de rapport interactif :
1 afficher2 supprimer3 exporter4 rechercher0 réinitialiser la base de données (demande une confirmation explicite)Quitter le mode rapport :
Entrée sur l'invite d'action videCTRL+Cknockpy -d forum.example.com --verbose
knockpy -d example.com --wildcard
KnockPy peut être utilisé comme module Python :
import knockpy
result = knockpy.KNOCKPY("example.com", timeout=5.0, threads=20)
print(result["domain"], result["ip"])
ou :
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'])
Une liste de mots par défaut est incluse dans knockpy/wordlist/wordlist.txt.
Vous pouvez fournir la vôtre avec --wordlist.
python3 -m pytest
# (optional) smoke-run example script
python3 examples/poc.py
Sous licence GPLv3.
Gianni Amato (@guelfoweb)
| Flag | Description |
|---|
-d, --domain | Domaine cible (ou stdin si utilisé sans valeur) |
-f, --file | Fichier contenant une liste de domaines |
--recon | Activer la reconnaissance passive |
--bruteforce, --brute | Activer la force brute avec une liste de mots |
--exclude TYPE VALUE | Exclure les correspondances (status, length/lenght, body) |
--verbose | Diagnostics approfondis pour les scans d'un seul domaine uniquement |
--wildcard | Tester le DNS générique et quitter |
--test | Avec --recon, tester chaque source de reconnaissance (échec/vide/données) |
--setup | Configuration interactive (paramètres par défaut + clés API dans la base de données) |
--update-versions | Mettre à jour le catalogue local des dernières versions de serveurs web |
--report [ID|latest|list] | Mode rapport (interactif : afficher/supprimer/exporter/rechercher/réinitialiser la base de données, exporter HTML) |
--check-update | Vérifier en ligne si une nouvelle version de Knockpy est disponible sur PyPI |
--wordlist | Remplacement de la liste de mots à l'exécution |
--dns | Remplacement du résolveur DNS à l'exécution |
--useragent | Remplacement de l'agent utilisateur HTTP à l'exécution |
--timeout | Remplacement du délai d'attente à l'exécution (secondes) |
--threads | Remplacement du nombre de workers concurrents à l'exécution |
--silent | Masquer la barre de progression |
--json | Sortie JSON uniquement (force --silent) |
--status | Afficher l'état d'exécution et continuer |
-h, --help | Afficher le message d'aide |