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

を使用すると簡単です。表示(wireshark)フィルタ比較キャプチャ(pcap)フィルタ

tshark -n -T fields -e dns.qry.name -f 'src port 53' -Y 'dns.qry.name contains "foo"'

pcap-filterキャプチャフィルタの機能については、マニュアルページを参照してください。これは非常に限られており、プロトコルを手動で分析する必要があります。ここでは、udpパケットのクエリ名が常に0x20バイト(DNS over UDPの場合)であり、クエリ名が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
    }')"

おすすめ記事