web-dev-qa-db-ja.com

DNS Aレコードリクエストを収集する方法

RedHat PCですべての発信Aレコードを記録する必要があります。 tcpdumpを使ってみました:

tcpdumpdns=OUTPUT-FILENAME-HERE
Nohup tcpdump -K dst port 53 -w $tcpdumpdns > /dev/null 2>&1 &

それは出力ファイルを次のようにします:

19:26:12.185392 IP 172.16.0.6.57977 > google-public-dns-a.google.com.domain: 51198+ A? yahoo.com. (27)

したがって、yahoo.comを取得するには、それを処理する必要があります。

echo $tcpdumpdns | awk '/ A\? / {u = NF - 1; print $u}' | sed 's/^www.//g; s/.$//g' | sort -u

すべての発信Aレコードリクエストを収集するためのより良い解決策はありますか?

pS:DNS Aレコードの収集は、HTTPS経由で到達可能なWebサイトの最新リストを取得するためにのみ必要です。したがって、HTTPSEverywhere Firefoxアドオン用のxmlファイルを生成できます。したがって、これはスクリプトの一部にすぎません。

15
LanceBaynes

Wiresharkを使用します。

tshark -f "udp port 53" -Y "dns.qry.type == A and dns.flags.response == 0"
12
user1686

Wiresharkがインストールされていない場合

tcpdumpdns=/tmp/tcpdumps
tcpdump -lvi any "udp port 53" | tee $tcpdumpdns

あなたのために働くはずです。出力を最後から2番目の値に制限したいので、ログファイルを次のように解析します。

grep -E 'A\?' $tcpdumpdns |sed -e 's/^.*A? //' -e 's/ .*//'|sort -u

あなたがそれを生きたいなら:

tcpdump -lvi any "udp port 53" 2>/dev/null|grep -E 'A\?'|awk '{print $(NF-1)}'

(ここでは、sedとawkは交換可能です。私はawkを選択します。)

13
Alexx Roche