
Un toolkit Python educativo per il penetration testing autorizzato: port scanner threaded, enumerazione di sottodomini e directory, banner grabber e host discovery, con una ricca CLI.
Un toolkit Python leggero ed educativo che automatizza le comuni attività di ricognizione ed enumerazione utilizzate nel penetration testing autorizzato. Creato come progetto di apprendimento per la pratica di cybersecurity / ethical-hacking.
Questo toolkit esegue scansione attiva ed enumerazione. Eseguirlo contro sistemi che non possiedi o per cui non hai esplicito permesso scritto di testare può costituire reato nella maggior parte delle giurisdizioni.
Gli autori non si assumono alcuna responsabilità per uso improprio.
| Comando | Cosa fa |
|---|---|
portscan | Scansione TCP connect concorrente di un host |
banner | Recupera il banner di un servizio da una porta aperta |
dirscan | Enumera percorsi web da una wordlist |
subdomains | Risolve sottodomini candidati |
netscan | Scopre host attivi in un intervallo CIDR |
httpprobe | Ispeziona una risposta HTTP (stato, header, anteprima) |
logincheck | Demo solo per laboratorio del rischio di credenziali deboli/predefinite (con limitazione di frequenza) |
Cosa è cambiato dalla v1 → v2: pacchetto modulare, CLI argparse con sottocomandi,
scanner threaded, un'interfaccia basata su rich (banner ASCII, barre di avanzamento
in tempo reale e tabelle dei risultati), validazione dell'input, un gate di autorizzazione,
unit test e una pipeline 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
Esegui sempre dalla radice del progetto tramite python main.py … (il pacchetto src
contiene moduli chiamati http e dir, quindi eseguire script dall'interno di src/
potrebbe oscurare la libreria standard).
# 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
Le dipendenze di runtime si trovano in requirements.txt; gli strumenti di test/lint si trovano in
requirements-dev.txt (che include anche quelle di runtime), così gli utenti finali non
installano mai pytest.
La pipeline GitLab (.gitlab-ci.yml) esegue lint + test a ogni 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