Tcpdump

如何收集 DNS A 記錄請求?

  • June 21, 2015

我需要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 訪問的最新網站列表。所以我可以為 HTTPSEverywhere Firefox Add-on 生成 xml 文件。所以這只是腳本的一部分。

使用 Wireshark:

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

如果你沒有安裝wireshark

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

應該為你工作。由於您想將輸出限制為倒數第二個值,那麼我將解析您的日誌文件:

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。)

引用自:https://unix.stackexchange.com/questions/27246