
Knock Subdomain Scan
✅ Rápido & Assíncrono • 🔐 Recon + Brute • 🔧 Fácil de Estender
KnockPy é uma ferramenta modular Python 3 para enumerar subdomínios via reconhecimento passivo e bruteforce, agora com suporte async/await, desempenho aprimorado e manipulação moderna de HTTP/TLS.
httpx e resolução DNS--verbose diagnóstico de domínio único (DNS/TCP/TLS/cadeias de redirecionamento/erros de requisição + verificações de segurança)show/delete/export/search)git clone https://github.com/guelfoweb/knockpy.git
cd knockpy
# recomendado: instalar em um ambiente virtual
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install -U pip
pip install .
# alternativa: instalar para o usuário atual (sem venv)
# python3 -m pip install --user .
⚠️ Versão Python recomendada: 3.9+
O código é organizado por responsabilidade, com fachadas estáveis para compatibilidade retroativa:
knockpy/
cli.py # Ponto de entrada CLI (fachada/orquestração)
cli_parts/
status.py # Renderização do painel de status/tempo de execução
setup.py # Configuração interativa e padrões de execução persistidos
report.py # Modo de relatório interativo
scan_flow.py # Regras de exclusão, teste de recon, auxiliares de curinga
core.py # Fachada pública principal (compatibilidade)
engine/
runtime.py # Implementação do mecanismo de varredura
storage.py # Fachada pública de armazenamento (compatibilidade)
storage_parts/
db.py # Persistência/configurações SQLite
export.py # Orquestração de exportação de relatório
html_report.py # Renderização de relatório HTML
output.py # Renderização de saída do terminal
server_versions.py # Catálogo de versões de servidores web
knockpy.py # Exportações do módulo de compatibilidade
Nota de compatibilidade:
import knockpy ou from knockpy import KNOCKPY.engine/, cli_parts/ e storage_parts/.Somente após a versão estável ser lançada no GitHub
pip install knock-subdomains
knockpy -d dominio.com [opções]
--threads e --timeoutEssas duas opções têm o maior impacto no tempo de execução para grandes varreduras.
--threads controla a concorrência (quantos alvos são processados em paralelo)--timeout controla quanto tempo cada etapa de rede espera antes de desistirCompensação:
threads mais alto = varreduras mais rápidas, mas mais carga na CPU/rede/DNS e maior risco de limite de taxa remototimeout mais baixo = varreduras mais rápidas, mas maior risco de perder alvos lentos, porém válidos (falsos negativos)Perfis recomendados:
--threads 50 --timeout 5--threads 150 --timeout 4--threads 250 --timeout 3Se você precisar de velocidade e completude em listas muito grandes, use estratégia de 2 passagens:
--threads 250 --timeout 3--threads 80 --timeout 5 (ou maior)Notas:
--setup) substituem padrões internosthreads=250, timeout=3knockpy -d example.com --recon --bruteforce
knockpy -d example.com --recon --test
knockpy --update-versions
knockpy --check-update
Na primeira execução, o KnockPy cria:
~/.knockpy/recon_services.json
Você pode adicionar/desabilitar fontes editando o array services.
Você também pode apontar para um caminho de arquivo personalizado sem alterar o código:
export KNOCK_RECON_SERVICES=/caminho/para/recon_services.json
Cada serviço suporta:
nameenabled (true/false)parserurl_template (suporta {domain}, {virustotal_key}, {shodan_key})requires_api (virustotal ou shodan, opcional)Parsers suportados:
csv_first_columnrapiddns_html_tdjson_listvirustotal_subdomainsshodan_subdomainsecho "example.com" | knockpy -d
export API_KEY_VIRUSTOTAL=sua-chave-api-virustotal
export API_KEY_SHODAN=sua-chave-api-shodan
Você pode usar arquivo .env:
API_KEY_VIRUSTOTAL=sua-chave-api-virustotal
API_KEY_SHODAN=sua-chave-api-shodan
knockpy -d example.com --recon --bruteforce
knockpy --report list
knockpy --report latest
knockpy --report
Menu interativo do relatório:
1 show2 delete3 export4 search0 reset db (solicita confirmação explícita)Sair do modo relatório:
Enter em prompt de ação vazioCTRL+Cknockpy -d forum.example.com --verbose
knockpy -d example.com --wildcard
O KnockPy pode ser usado como módulo Python:
import knockpy
resultado = knockpy.KNOCKPY("example.com", timeout=5.0, threads=20)
print(resultado["domain"], resultado["ip"])
ou:
from knockpy import KNOCKPY
dominio = 'example.com'
resultados = KNOCKPY(
dominio,
dns="8.8.8.8",
useragent="Mozilla/5.0",
timeout=5,
threads=10,
recon=True,
bruteforce=True,
wordlist=None,
silent=False
)
for entrada in resultados:
print(entrada['domain'], entrada['ip'], entrada['http'], entrada['cert'])
Uma wordlist padrão está incluída em knockpy/wordlist/wordlist.txt.
Você pode fornecer a sua própria com --wordlist.
python3 -m pytest
# (opcional) execução de exemplo com script
python3 examples/poc.py
Licenciado sob a licença GPLv3.
Gianni Amato (@guelfoweb)
| Flag | Descrição |
|---|
-d, --domain | Domínio alvo (ou stdin se usado sem valor) |
-f, --file | Arquivo com lista de domínios |
--recon | Ativar reconhecimento passivo |
--bruteforce, --brute | Ativar bruteforce usando wordlist |
--exclude TIPO VALOR | Excluir correspondências (status, length/lenght, body) |
--verbose | Diagnóstico aprofundado apenas para varreduras de domínio único |
--wildcard | Testar DNS curinga e sair |
--test | Com --recon, testar cada fonte de recon (falhou/vazia/dados) |
--setup | Configuração interativa (padrões de execução + chaves de API no banco de dados) |
--update-versions | Atualizar catálogo local de versões mais recentes de servidores web |
--report [ID|latest|list] | Modo relatório (show/delete/export/search/reset db interativo, exportar HTML) |
--check-update | Verificar online se uma versão mais nova do Knockpy está disponível no PyPI |
--wordlist | Substituição de wordlist em tempo de execução |
--dns | Substituição do resolvedor DNS em tempo de execução |
--useragent | Substituição do user-agent HTTP em tempo de execução |
--timeout | Substituição do tempo limite em tempo de execução (segundos) |
--threads | Substituição do número de workers concorrentes em tempo de execução |
--silent | Ocultar barra de progresso |
--json | Saída apenas em JSON (força --silent) |
--status | Imprimir status da execução e continuar |
-h, --help | Mostrar mensagem de ajuda |