如何收集 DNS A 记录请求?

如何收集 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 文件。所以这只是脚本的一部分。

答案1

如果你没有安装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。)

答案2

使用 Wireshark:

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

相关内容