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
    }')"

관련 정보