python7427 ython

ネットワーク列挙ツールを構築する際、ドメイン構造のマッピング方法を理解することは、セキュリティ愛好家や開発者にとって基本的なスキルです。この記事では、dnspythonライブラリを使ったシンプルで再帰的なDNS探索スクリプトについて解説します。
前提条件Termuxのようなモバイル端末環境やローカルでこのスクリプトを実行するには、dnspythonパッケージをインストールする必要があります:

pip install dnspython
スクリプトコード
以下は、サブドメイン列挙と逆引きDNSルックアップを行う完全なスクリプトです:
import dns
import dns.resolver
import socket

domains = {}
subs = "dns_search.txt"

res = dns.resolver.Resolver()
res.nameservers = ["8.8.8.8"]
res.port = 53

domain = "google.com"
nums = True

def ReverseDNS(ip):
try:
result = socket.gethostbyaddr(ip)
return [result[0]]+result[1]
except socket.herror:
return []

def DNSRequest(domain):
ips = []
try:
result = res.resolve(domain) if result: addresses = [a.to_text() for a in result] if domain in domains: domains[domain] = list(set(domains[domain]+addresses)) else: domains[domain] = addresses for a in addresses: rd = ReverseDNS(a) for d in rd: if d not in domains: domains[d] = [a] DNSRequest(d) else: domains[d] = [a] except (dns.resolver.NXDOMAIN,dns.exception.Timeout): return [] return ips

def HostSearch(domain,dictionary,nums):
successes = []
for word in dictionary: d = word+"."+domain DNSRequest(d) if nums: for i in range (0,10): s = word+str(i)+"."+domain DNSRequest(s)

dictionary = [] with open(subs,"r") as f: dictionary = f.read().splitlines()

HostSearch(domain,dictionary,nums)

for domain in domains: print("%s:%s" % (domain, domains[domain])) 動作の仕組み カスタムリゾルバの設定: スクリプトは明示的にGoogleのパブリックDNSネームサーバー(8.8.8.8)のポート53を指定したカスタムリゾルバをインスタンス化します。
辞書型反復処理と数値追加: wordlist(dns_search.txt)を読み込み、各単語をターゲットドメインと結合します。nums = Trueの場合、0から9までの数字を追加してカバー範囲を最大化します。

再帰的な逆引きルックアップ: 有効なAレコードが解決されると、スクリプトは得られたIPアドレスに対して逆引きDNSルックアップ(PTR)を実行し、見つかったホスト名を探索ループにフィードバックします。