Tcpdump
如何收集 DNS A 記錄請求?
我需要
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。)