我需要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"