
Ein edukatives Python-Toolkit für autorisierte Penetrationstests: Threaded-Port-Scanner, Subdomain- und Verzeichnis-Enumeration, Banner-Grabber und Host-Discovery, mit einer umfangreichen CLI.
Ein leichtgewichtiges, lehrreiches Python-Toolkit, das gängige Reconnaissance- und Enumeration-Aufgaben automatisiert, die beim autorisierten Penetrationstest verwendet werden. Entwickelt als Lernprojekt für Cybersicherheits- / Ethical- Hacking-Praxis.
Dieses Toolkit führt aktives Scannen und Enumerieren durch. Es gegen Systeme auszuführen, die Ihnen nicht gehören oder für die Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben, kann in den meisten Rechtsordnungen eine Straftat darstellen.
Die Autoren übernehmen keine Haftung für Missbrauch.
Was sich von v1 → v2 geändert hat: modulares Paket, argparse-CLI mit Unterbefehlen,
Threaded-Scanner, eine rich-gestützte UI (ASCII-Banner, Live-Fortschrittsbalken und
Ergebnistabellen), Eingabevalidierung, ein Autorisierungs-Gate, Unit-Tests und eine
GitLab-CI-Pipeline.
# 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
Führen Sie es immer vom Projektstammverzeichnis aus über python main.py … aus (das src-Paket
enthält Module namens http und dir, sodass das Ausführen von Skripten aus src/
heraus die Standardbibliothek überschatten könnte).
# 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
Laufzeitabhängigkeiten befinden sich in requirements.txt; Test-/Lint-Tools befinden sich in
requirements-dev.txt (welches die Laufzeitabhängigkeiten mit einbezieht), sodass Endbenutzer niemals
pytest installieren.
Die GitLab-Pipeline (.gitlab-ci.yml) führt bei jedem Push Lint + Tests aus.
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
| Befehl | Was er tut |
|---|
portscan | Paralleler TCP-Connect-Scan eines Hosts |
banner | Abrufen eines Service-Banners von einem offenen Port |
dirscan | Aufzählen von Web-Pfaden aus einer Wortliste |
subdomains | Auflösen von Kandidaten-Subdomains |
netscan | Entdecken aktiver Hosts in einem CIDR-Bereich |
httpprobe | Untersuchen einer HTTP-Antwort (Status, Header, Vorschau) |
logincheck | Nur-Lab-Demo des Risikos schwacher/Standard-Anmeldedaten (ratenbegrenzt) |