
Образовательный набор инструментов на Python для авторизованного тестирования на проникновение: многопоточный сканер портов, перечисление поддоменов и директорий, сбор баннеров и обнаружение хостов с богатым CLI.
Легковесный образовательный набор инструментов на Python, автоматизирующий типовые задачи разведки и перечисления, используемые при авторизованном тестировании на проникновение. Создан как учебный проект для практики в области кибербезопасности / этичного хакинга.
Этот набор инструментов выполняет активное сканирование и перечисление. Запуск его против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения, может являться преступлением в большинстве юрисдикций.
Авторы не несут ответственности за неправомерное использование.
Что изменилось с v1 → v2: модульный пакет, CLI на argparse с подкомандами, многопоточные сканеры, интерфейс на базе rich (ASCII-баннер, живые индикаторы прогресса и таблицы результатов), валидация ввода, шлюз авторизации, модульные тесты и конвейер 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
Всегда запускайте из корня проекта через python main.py … (пакет src
содержит модули с именами http и dir, поэтому запуск скриптов изнутри src/
может перекрыть стандартную библиотеку).
# 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
Зависимости времени выполнения находятся в requirements.txt; инструменты для тестирования/линта находятся в
requirements-dev.txt (который подтягивает и зависимости времени выполнения), поэтому конечные пользователи никогда не
устанавливают pytest.
Конвейер GitLab (.gitlab-ci.yml) запускает линт + тесты при каждом 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
| Команда | Что она делает |
|---|
portscan | Параллельное сканирование хоста через TCP connect |
banner | Получение баннера службы с открытого порта |
dirscan | Перечисление веб-путей по словарю |
subdomains | Разрешение предполагаемых поддоменов |
netscan | Обнаружение активных хостов в диапазоне CIDR |
httpprobe | Проверка HTTP-ответа (статус, заголовки, предпросмотр) |
logincheck | Демонстрация риска слабых/стандартных учётных данных только для лаборатории (с ограничением частоты) |