
Um kit de ferramentas Python educacional para testes de penetração autorizados: scanner de portas com threads, enumeração de subdomínios e diretórios, banner grabber e descoberta de hosts, com uma CLI rica.
Um toolkit Python leve e educacional que automatiza tarefas comuns de reconhecimento e enumeração usadas em testes de penetração autorizados. Criado como um projeto de aprendizado para prática de cibersegurança / hacking ético.
Este toolkit realiza varredura ativa e enumeração. Executá-lo contra sistemas que você não possui ou para os quais não tem permissão escrita explícita para testar pode ser crime na maioria das jurisdições.
Os autores não aceitam qualquer responsabilidade por uso indevido.
O que mudou da v1 → v2: pacote modular, CLI com argparse e subcomandos,
scanners com threads, uma interface potencializada pelo rich (banner ASCII, barras de progresso ao vivo e
tabelas de resultados), validação de entrada, um portão de autorização, testes unitários e um
pipeline de CI do GitLab.
# install virtualenv and activate
python3 -m venv venv
. venv/bin/activate
# install packages
pip3 install -r requirements.txt
# run (always from the project root)
python3 main.py --help
python -m venv venv
. .\venv\Scripts\activate # (PowerShell)
. venv/scripts/activate # (Git Shell)
pip install -r requirements.txt
python main.py --help
Sempre execute a partir da raiz do projeto via python main.py … (o pacote src
contém módulos chamados http e dir, então executar scripts de dentro de src/
poderia sobrescrever a biblioteca padrão).
# Port scan with a custom port set / range
python main.py portscan 192.168.1.10 --ports 22,80,443
python main.py portscan 192.168.1.10 --ports 1-1024
# Banner grab
python main.py banner 192.168.1.10 22
# Directory enumeration (default or custom wordlist)
python main.py dirscan http://target.local
python main.py dirscan http://target.local --wordlist admin login backup api
# Subdomain discovery
python main.py subdomains example.com
# Live-host discovery on a subnet
python main.py netscan 192.168.1.0/24
# HTTP response inspection
python main.py httpprobe http://target.local
# Credential test against a lab login form (authorization required)
python main.py logincheck http://target.local/login \
--users admin user --passwords admin 1234 password
# Global options
python main.py --threads 100 --timeout 1.5 -v portscan 192.168.1.10
# Skip the interactive prompt in scripted, pre-scoped engagements
python main.py --i-am-authorized netscan 10.0.0.0/24
pip install -r requirements-dev.txt # runtime + pytest + ruff
pytest -v # run tests
ruff check . # lint
As dependências de execução ficam em requirements.txt; as ferramentas de teste/lint ficam em
requirements-dev.txt (que inclui as de execução), então os usuários finais nunca
instalam o pytest.
O pipeline do GitLab (.gitlab-ci.yml) executa lint + testes a cada push.
simple-pentesting/
├── main.py # entry point (run from here)
├── src/ # the package
│ ├── __init__.py
│ ├── cli.py # argparse CLI
│ ├── config.py # defaults & Settings
│ ├── utils.py # validation helpers
│ ├── ui.py # rich UI: banner, progress, tables, auth prompt
│ ├── port_scanner.py # one file per feature ↓
│ ├── banner.py
│ ├── dir.py
│ ├── subdomain.py
│ ├── netscan.py
│ ├── http.py
│ └── login_check.py
├── tests/ # offline unit tests
├── .gitlab-ci.yml
├── requirements.txt # runtime deps
├── requirements-dev.txt # + pytest, ruff
├── LICENSE
└── .gitignore
| Comando | O que faz |
|---|
portscan | Varredura TCP connect concorrente de um host |
banner | Coleta o banner de um serviço em uma porta aberta |
dirscan | Enumera caminhos web a partir de uma wordlist |
subdomains | Resolve subdomínios candidatos |
netscan | Descobre hosts ativos em um intervalo CIDR |
httpprobe | Inspeciona uma resposta HTTP (status, cabeçalhos, prévia) |
logincheck | Demonstração apenas para laboratório do risco de credenciais fracas/padrão (com limite de taxa) |