Como filtrar as consultas DNS por dns.qry.name no tshark?

1

Isso imprimirá os nomes de host das consultas DNS:

tshark -n -T fields -e dns.qry.name src port 53

Como posso filtrar pelo valor de dns.qry.name (ou obter algum proxy razoável disso)? Eu tentei variações de tshark -n -T fields -e dns.qry.name src port 53 and dns query name contains '"foo"' , mas todas são inválidas.

    
por l0b0 20.09.2017 / 12:45

1 resposta

1

É mais facilmente feito com um display (wireshark) do que com um filtro capture (pcap) .

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

Veja a página pcap-filter man para o que você pode fazer com os filtros de captura. É bastante limitado, você teria que dissecar o protocolo manualmente. Aqui, como uma aproximação, assumindo que o nome da consulta é sempre 0x20 bytes dentro do pacote udp (para DNS sobre UDP) e sabendo que um nome de consulta não deve ser maior que 253 bytes:

$ 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
    }')"
    
por 20.09.2017 / 22:23

Tags