
DNS列挙スクリプト
DNSReconは、2007年初頭に言語とDNSについて学ぶために私が書いたRubyスクリプトをPythonに移植したものです。 今回は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
CLIオプションを変更した後にmanページ(man/dnsrecon.1)を再生成するには:
uv run python tools/generate_manpage.py
CIはリリースタグ時およびCLIを変更するmasterへのプッシュ時に自動的に再生成も行います。
リンティングとフォーマットを実行するには:
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"
--shodan-keyの代わりに環境変数でAPIキーを設定することもできます:
export SHODAN_API_KEY="your-shodan-api-key"
uv run dnsrecon -d example.com -t std -s -w --shodan
REST APIを起動します:
uv run restdnsrecon
Shodan拡張を有効にして/general_enumを呼び出します:
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"
REST APIのthread_numの値は1..100に制限されています。APIのwordlistパラメータは、dnsrecon/data内のバンドルされたファイル、またはプラットフォームのパス区切り文字を使用してDNSRECON_WORDLIST_DIRSにリストされたディレクトリ配下のファイルを参照できます。専用のワードリストディレクトリのみを設定してください。DNSRECON_WORDLIST_DIRSを/、ホームディレクトリ、その他機密ファイルを含む場所などの広範なパスに設定しないでください。
export DNSRECON_WORDLIST_DIRS="/opt/dnsrecon-wordlists:/srv/shared-wordlists"