
Knock Subdomain Scan
✅ Veloce & Async • 🔐 Recon + Brute • 🔧 Facile da Estendere
KnockPy è un tool modulare Python 3 per enumerare sottodomini tramite ricognizione passiva e forza bruta, ora con supporto async/await, prestazioni migliorate e gestione moderna di HTTP/TLS.
httpx e risoluzione DNS--verbose per singolo dominio (DNS/TCP/TLS/catene di reindirizzamento/errori di richiesta + controlli di sicurezza)show/delete/export/search)git clone https://github.com/guelfoweb/knockpy.git
cd knockpy
# consigliato: installare in un ambiente virtuale
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install -U pip
pip install .
# alternativa: installare per l'utente corrente (senza venv)
# python3 -m pip install --user .
⚠️ Versione Python consigliata: 3.9+
Il codice è organizzato per responsabilità, con facciate stabili per compatibilità all'indietro:
knockpy/
cli.py # Punto di ingresso CLI (facciata/orchestrazione)
cli_parts/
status.py # Rendering del pannello runtime/stato
setup.py # Configurazione interattiva e impostazioni runtime persistenti
report.py # Modalità report interattiva
scan_flow.py # Regole di esclusione, test di ricognizione, helper wildcard
core.py # Facciata pubblica del core (compatibilità)
engine/
runtime.py # Implementazione del motore di scansione
storage.py # Facciata pubblica dello storage (compatibilità)
storage_parts/
db.py # Persistenza/impostazioni SQLite
export.py # Orchestrazione esportazione rapporti
html_report.py # Rendering rapporto HTML
output.py # Rendering output terminale
server_versions.py # Catalogo versioni web-server
knockpy.py # Esportazioni modulo compatibilità
Nota sulla compatibilità:
import knockpy o from knockpy import KNOCKPY.engine/, cli_parts/ e storage_parts/.Solo dopo il rilascio della versione stabile su GitHub
pip install knock-subdomains
knockpy -d dominio.com [opzioni]
--threads e --timeoutQueste due opzioni hanno il maggiore impatto sul runtime per scansioni grandi.
--threads controlla la concorrenza (quanti target vengono elaborati in parallelo)--timeout controlla per quanto tempo ogni fase di rete attende prima di arrendersiCompromesso:
threads = scansioni più veloci, ma maggiore carico su CPU/rete/DNS e maggior rischio di limiti di frequenza remotitimeout = scansioni più veloci, ma maggior rischio di perdere target validi ma lenti (falsi negativi)Profili consigliati:
--threads 50 --timeout 5--threads 150 --timeout 4--threads 250 --timeout 3Se hai bisogno sia di velocità che di completezza su elenchi molto grandi, usa una strategia a 2 passate:
--threads 250 --timeout 3--threads 80 --timeout 5 (o superiore)Note:
--setup) sovrascrivono le impostazioni predefinite integratethreads=250, timeout=3knockpy -d example.com --recon --bruteforce
knockpy -d example.com --recon --test
knockpy --update-versions
knockpy --check-update
Al primo avvio, KnockPy crea:
~/.knockpy/recon_services.json
Puoi aggiungere/disabilitare sorgenti modificando l'array services.
Puoi anche puntare a un percorso file personalizzato senza modificare il codice:
export KNOCK_RECON_SERVICES=/percorso/del/tuo/recon_services.json
Ogni servizio supporta:
nameenabled (true/false)parserurl_template (supporta {domain}, {virustotal_key}, {shodan_key})requires_api (virustotal o shodan, opzionale)Parser supportati:
csv_first_columnrapiddns_html_tdjson_listvirustotal_subdomainsshodan_subdomainsecho "example.com" | knockpy -d
export API_KEY_VIRUSTOTAL=la-tua-chiave-api-virustotal
export API_KEY_SHODAN=la-tua-chiave-api-shodan
Puoi usare file .env:
API_KEY_VIRUSTOTAL=la-tua-chiave-api-virustotal
API_KEY_SHODAN=la-tua-chiave-api-shodan
knockpy -d example.com --recon --bruteforce
knockpy --report list
knockpy --report latest
knockpy --report
Menu rapporto interattivo:
1 show2 delete3 export4 search0 reset db (chiede conferma esplicita)Esci dalla modalità rapporto:
Invio su prompt azione vuotoCTRL+Cknockpy -d forum.example.com --verbose
knockpy -d example.com --wildcard
KnockPy può essere usato come modulo Python:
import knockpy
result = knockpy.KNOCKPY("example.com", timeout=5.0, threads=20)
print(result["domain"], result["ip"])
oppure:
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'])
Una wordlist predefinita è inclusa in knockpy/wordlist/wordlist.txt.
Puoi fornirne una tua con --wordlist.
python3 -m pytest
# (opzionale) script di esempio per test rapido
python3 examples/poc.py
Concesso in licenza sotto la licenza GPLv3.
Gianni Amato (@guelfoweb)
| Flag | Descrizione |
|---|
-d, --domain | Dominio target (o stdin se usato senza valore) |
-f, --file | File con elenco di domini |
--recon | Abilita ricognizione passiva |
--bruteforce, --brute | Abilita forza bruta usando wordlist |
--exclude TIPO VALORE | Escludi corrispondenze (status, length/lenght, body) |
--verbose | Diagnostica approfondita solo per scansioni su dominio singolo |
--wildcard | Testa DNS wildcard ed esci |
--test | Con --recon, testa ogni sorgente di ricognizione (fallita/vuota/dati) |
--setup | Configurazione interattiva (impostazioni predefinite runtime + chiavi API nel DB) |
--update-versions | Aggiorna il catalogo locale delle ultime versioni web-server |
--report [ID|latest|list] | Modalità report (show/delete/export/search/reset db interattivo, esporta HTML) |
--check-update | Verifica online se è disponibile una nuova versione di Knockpy su PyPI |
--wordlist | Sovrascrivi wordlist in runtime |
--dns | Sovrascrivi resolver DNS in runtime |
--useragent | Sovrascrivi user-agent HTTP in runtime |
--timeout | Sovrascrivi timeout in runtime (secondi) |
--threads | Sovrascrivi numero di lavoratori concorrenti in runtime |
--silent | Nascondi barra di progresso |
--json | Output solo JSON (forza --silent) |
--status | Stampa lo stato runtime e continua |
-h, --help | Mostra messaggio di aiuto |