
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 [опции]
--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
Интерактивное меню отчёта:
1 show2 delete3 export4 search0 reset db (запрашивает явное подтверждение)Выход из режима отчёта:
Enter при пустой подсказке действияCTRL+Cknockpy -d forum.example.com --verbose
knockpy -d example.com --wildcard
KnockPy можно использовать как модуль Python:
import knockpy
result = knockpy.KNOCKPY("example.com", timeout=5.0, threads=20)
print(result["domain"], result["ip"])
или:
from knockpy import KNOCKPY
domain = 'example.com'
results = KNOCKPY(
domain,
dns="8.8.8.8",
useragent="Mozilla/5.0",
timeout=5,
threads=10,
recon=True,
bruteforce=True,
wordlist=None,
silent=False
)
for entry in results:
print(entry['domain'], entry['ip'], entry['http'], entry['cert'])
Словарь по умолчанию включён в knockpy/wordlist/wordlist.txt.
Вы можете указать свой собственный с помощью --wordlist.
python3 -m pytest
# (опционально) быстрый запуск примера скрипта
python3 examples/poc.py
Лицензировано под GPLv3.
Gianni Amato (@guelfoweb)
| Флаг | Описание |
|---|
-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 | Показать справочное сообщение |