
Knock Subdomain Scan
✅ Быстро и асинхронно • 🔐 Разведка + Брутфорс • 🔧 Легко расширять
KnockPy — это модульный инструмент на Python 3 для перечисления поддоменов с помощью пассивной разведки и брутфорса, теперь с поддержкой async/await, улучшенной производительностью и современной обработкой HTTP/TLS.
httpx и DNS-разрешения--verbose — диагностика одного домена (DNS/TCP/TLS/цепочки перенаправлений/ошибки запроса + проверки безопасности)show/delete/export/search)git clone https://github.com/guelfoweb/knockpy.git
cd knockpy
# рекомендуется: установка в виртуальное окружение
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install -U pip
pip install .
# альтернатива: установка для текущего пользователя (без venv)
# python3 -m pip install --user .
⚠️ Рекомендуемая версия Python: 3.9+
Кодовая база организована по ответственности, со стабильными фасадами для обратной совместимости:
knockpy/
cli.py # Точка входа CLI (фасад/оркестровка)
cli_parts/
status.py # Отрисовка панели состояния/выполнения
setup.py # Интерактивная настройка и сохраняемые настройки по умолчанию
report.py # Интерактивный режим отчёта
scan_flow.py # Правила исключения, проверка разведки, wildcard-вспомогатели
core.py # Публичный фасад ядра (совместимость)
engine/
runtime.py # Реализация движка сканирования
storage.py # Публичный фасад хранилища (совместимость)
storage_parts/
db.py # Постоянное хранение/настройки в SQLite
export.py # Оркестровка экспорта отчётов
html_report.py # Отрисовка HTML-отчёта
output.py # Отрисовка вывода в терминал
server_versions.py # Каталог версий веб-серверов
knockpy.py # Экспорты модулей для совместимости
Примечание о совместимости:
import knockpy или from knockpy import KNOCKPY.engine/, cli_parts/ и storage_parts/.Только после выпуска стабильной версии на GitHub
pip install knock-subdomains
knockpy -d domain.com [опции]
| Флаг | Описание |
|---|---|
-d, --domain | Целевой домен (или stdin, если используется без значения) |
-f, --file | Файл со списком доменов |
--recon | Включить пассивную разведку |
--bruteforce, --brute | Включить брутфорс с использованием словаря |
--exclude TYPE VALUE | Исключить совпадения (status, length/lenght, body) |
--verbose | Глубокая диагностика только для сканирования одного домена |
--wildcard | Проверить wildcard DNS и выйти |
--test | С --recon проверить каждый источник разведки (неудачные/пустые/данные) |
--setup | Интерактивная настройка (настройки по умолчанию + ключи API в БД) |
--update-versions | Обновить локальный каталог последних версий веб-серверов |
--report [ID|latest|list] | Режим отчёта (интерактивный показ/удаление/экспорт/поиск/сброс БД, экспорт HTML) |
--check-update | Проверить онлайн, доступна ли новая версия Knockpy на PyPI |
--wordlist | Переопределение словаря во время выполнения |
--dns | Переопределение DNS-резолвера во время выполнения |
--useragent | Переопределение HTTP user-agent во время выполнения |
--timeout | Переопределение таймаута (секунды) во время выполнения |
--threads | Переопределение количества параллельных рабочих процессов |
--silent | Скрыть индикатор прогресса |
--json | Вывод только в JSON (вынуждает --silent) |
--status | Вывести текущий статус и продолжить |
-h, --help | Показать справочное сообщение |
--threads и --timeoutЭти две опции оказывают наибольшее влияние на время выполнения для больших сканирований.
--threads управляет конкурентностью (сколько целей обрабатывается параллельно)--timeout управляет тем, сколько времени каждый сетевой шаг ждёт перед сдачейКомпромисс:
threads = более быстрое сканирование, но большая нагрузка на ЦП/сеть/DNS и выше риск удаленных ограничений скоростиtimeout = более быстрое сканирование, но выше риск пропустить медленные, но действительные цели (ложноотрицательные результаты)Рекомендуемые профили:
--threads 50 --timeout 5--threads 150 --timeout 4--threads 250 --timeout 3Если вам нужны и скорость, и полнота для очень больших списков, используйте стратегию в 2 прохода:
--threads 250 --timeout 3--threads 80 --timeout 5 (или больше)Замечания:
--setup) переопределяют встроенные значения по умолчаниюthreads=250, timeout=3knockpy -d example.com --recon --bruteforce
knockpy -d example.com --recon --test
knockpy --update-versions
knockpy --check-update
При первом запуске KnockPy создаёт:
~/.knockpy/recon_services.json
Вы можете добавлять/отключать источники, редактируя массив services.
Вы также можете указать путь к пользовательскому файлу без изменения кода:
export KNOCK_RECON_SERVICES=/path/to/recon_services.json
Каждый сервис поддерживает:
nameenabled (true/false)parserurl_template (поддерживает {domain}, {virustotal_key}, {shodan_key})requires_api (virustotal или shodan, опционально)Поддерживаемые парсеры:
csv_first_columnrapiddns_html_tdjson_listvirustotal_subdomainsshodan_subdomainsecho "example.com" | knockpy -d
export API_KEY_VIRUSTOTAL=ваш-ключ-virustotal
export API_KEY_SHODAN=ваш-ключ-shodan
Вы можете использовать файл .env:
API_KEY_VIRUSTOTAL=ваш-ключ-virustotal
API_KEY_SHODAN=ваш-ключ-shodan
knockpy -d example.com --recon --bruteforce
knockpy --report list
knockpy --report latest
knockpy --report
Интерактивное меню отчёта: