Скрипт перечисления DNS
DNSRecon — это порт на Python скрипта на Ruby, который я написал в начале 2007 года, чтобы изучить язык и разобраться в DNS. На этот раз я хотел изучить 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
Чтобы перегенерировать страницу руководства (man/dnsrecon.1) после изменения параметров CLI:
uv run python tools/generate_manpage.py
CI также автоматически перегенерирует её при выпуске тегов и при отправке изменений в master, которые затрагивают CLI.
Чтобы запустить линтинг и форматирование:
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="your-shodan-api-key"
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"