
Скрипт перечисления DNS
DNSRecon — это порт скрипта на Ruby, который я написал для изучения языка и DNS в начале 2007 года. На этот раз я хотел изучить Python и расширить функциональность оригинального инструмента, попутно заново разобравшись, как работает DNS и как его можно использовать в процессе оценки безопасности и диагностики сети.
Этот скрипт предоставляет возможность выполнять:
Для работы DNSRecon требуется Python 3.12 или выше.
Установите uv, если ещё не сделали этого:
curl -LsSf https://astral.sh/uv/install.sh | sh
Клонируйте репозиторий:
git clone https://github.com/darkoperator/dnsrecon.git
cd dnsrecon
Установите зависимости и создайте виртуальное окружение:
uv sync
Запустите DNSRecon:
uv run dnsrecon
Для установки зависимостей разработки:
uv sync --extra dev
Для запуска тестов:
uv run pytest
Для проверки и форматирования кода:
uv run ruff check
uv run ruff format
DNSRecon может использовать Shodan для расширения сетевых блоков, обнаруженных в ходе стандартного перебора данных SPF (-s) и/или WHOIS (-w).
Пассивное обогащение с помощью Shodan (используются сетевые блоки SPF + WHOIS):
uv run dnsrecon -d example.com -t std -s -w --shodan --shodan-key "$SHODAN_API_KEY"
Активная проверка результатов Shodan (повторное разрешение хостов и подтверждение их соответствия запрошенному сетевому блоку):
uv run dnsrecon -d example.com -t std -s -w --shodan --shodan-active --shodan-key "$SHODAN_API_KEY"
Также можно задать API-ключ через переменную окружения вместо --shodan-key:
export SHODAN_API_KEY="ваш-shodan-api-ключ"
uv run dnsrecon -d example.com -t std -s -w --shodan
Запуск REST API:
uv run restdnsrecon
Вызов /general_enum с включённым расширением Shodan:
curl -s \
-H "X-Shodan-Api-Key: $SHODAN_API_KEY" \
"http://127.0.0.1:5000/general_enum?domain=example.com&do_spf=true&do_whois=true&do_shodan=true"
Включение активной проверки в API:
curl -s \
-H "X-Shodan-Api-Key: $SHODAN_API_KEY" \
"http://127.0.0.1:5000/general_enum?domain=example.com&do_spf=true&do_whois=true&do_shodan=true&shodan_active=true"
Значения thread_num в REST API ограничены диапазоном 1..100. Параметры wordlist API могут ссылаться на встроенные файлы в dnsrecon/data или на файлы в каталогах, перечисленных в DNSRECON_WORDLIST_DIRS, с использованием разделителя путей платформы. Настраивайте только выделенные каталоги со списками слов; не указывайте DNSRECON_WORDLIST_DIRS на общие пути, такие как /, домашний каталог или другие места, содержащие конфиденциальные файлы.
export DNSRECON_WORDLIST_DIRS="/opt/dnsrecon-wordlists:/srv/shared-wordlists"