如何在 tshark 中通过 dns.qry.name 过滤 DNS 查询?

如何在 tshark 中通过 dns.qry.name 过滤 DNS 查询?

这将打印 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
    }')"

相关内容