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


15

すべての発信AレコードをRedHat PCに記録する必要があります。私は使用してみました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ファイルを生成できます。したがって、これはスクリプトの一部にすぎません。


提供したソリューションの何が問題になっていますか?
マイケルMrozek

GUI envがありますか?そうであれば、wireshark-gtkを使用する方が簡単なソリューションです。
ハナンN.

@Hanan N .: GUIはオプションではありません。これは自動化するために必要です。
ランスベインズ

@Michael Mrozek:何も望みません。しかし、私は代替ソリューションを受け入れているので尋ねました。
ランスベインズ

回答:


12

Wiresharkを使用:

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

2
私が得るtshark: "A" cannot be found among the possible values for dns.qry.type.
ジャックオコナー

3
@ JackO'Connorの問題に対処するため、タイプA DNSレコードの10進数値は1です。したがって、これは機能するはずですtshark -f "udp port 53" -Y "dns.qry.type == 1 and dns.flags.response == 0"
。– Rolinh

13

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を選択します)。


grep -E 'A\?' $tcpdumpdns |sed 's/^.*A? //;s/ .*//'|sort -u入力する小さい
Alexxロシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.