Tshark

如何在 tshark 中通過 dns.qry.name 過濾 DNS 查詢?

  • September 20, 2017

這將列印 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"',但它們都是無效的。

使用顯示(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
   }')"

引用自:https://unix.stackexchange.com/questions/393382