
Un kit de herramientas educativo en Python para pruebas de penetración autorizadas: escáner de puertos con hilos, enumeración de subdominios y directorios, banner grabber y descubrimiento de hosts, con una CLI enriquecida.
Un kit de herramientas Python ligero y educativo que automatiza tareas comunes de reconocimiento y enumeración utilizadas en pruebas de penetración autorizadas. Creado como un proyecto de aprendizaje para la práctica de ciberseguridad / hacking ético.
Este kit de herramientas realiza escaneo activo y enumeración. Ejecutarlo contra sistemas que no posees o para los que no tienes permiso explícito por escrito para probar puede ser un delito en la mayoría de las jurisdicciones.
Los autores no aceptan ninguna responsabilidad por el mal uso.
| Comando | Qué hace |
|---|---|
portscan | Escaneo concurrente de conexión TCP de un host |
banner | Obtiene el banner de un servicio desde un puerto abierto |
dirscan | Enumera rutas web desde una wordlist |
subdomains | Resuelve subdominios candidatos |
netscan | Descubre hosts activos en un rango CIDR |
httpprobe | Inspecciona una respuesta HTTP (estado, cabeceras, vista previa) |
logincheck | Demo solo para laboratorio del riesgo de credenciales débiles/por defecto (con límite de tasa) |
Qué cambió de v1 → v2: paquete modular, CLI con argparse y subcomandos,
escáneres con hilos, una interfaz impulsada por rich (banner ASCII, barras de progreso en vivo y
tablas de resultados), validación de entrada, una puerta de autorización, pruebas unitarias y un
pipeline de GitLab CI.
# 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
Ejecuta siempre desde la raíz del proyecto mediante python main.py … (el paquete src
contiene módulos llamados http y dir, por lo que ejecutar scripts desde dentro de src/
podría ensombrecer la biblioteca estándar).
# 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
Las dependencias de ejecución están en requirements.txt; las herramientas de prueba/lint están en
requirements-dev.txt (que incluye las de ejecución), por lo que los usuarios finales nunca
instalan pytest.
El pipeline de GitLab (.gitlab-ci.yml) ejecuta lint + pruebas en 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