这将打印 DNS 查询的主机名:
tshark -n -T fields -e dns.qry.name src port 53
我如何通过值进行过滤dns.qry.name
(或获得一些合理的代理)?我尝试过 的变体tshark -n -T fields -e dns.qry.name src port 53 and dns query name contains '"foo"'
,但它们都是无效的。
答案1
使用a更容易完成显示(wireshark)过滤器比用捕获 (pcap) 过滤器。
tshark -n -T fields -e dns.qry.name -f 'src port 53' -Y 'dns.qry.name contains "foo"'
pcap-filter
有关捕获过滤器的功能,请参阅手册页。它非常有限,你必须手动剖析协议。这里,作为近似值,假设 udp 数据包中的查询名称始终为 0x20 字节(对于 UDP 上的 DNS),并且知道查询名称不应大于 253 字节:
$ printf foo | xxd -p
666f6f
$ tshark -n -T fields -e dns.qry.name -f "src port 53 and $(awk '
BEGIN{
for(i=0;i<250;i++) {
printf sep "(udp[%d]!=0&&((udp[%d:4]&0xffffff00)==0x666f6f00", i+20, i+20
c = c "))"; sep = "||"
}
print c
}')"