Como reunir pedidos de registro do DNS A?

12

Eu preciso gravar todos os registros A de saída em um PC RedHat. Eu tentei usar tcpdump :

tcpdumpdns=OUTPUT-FILENAME-HERE
nohup tcpdump -K dst port 53 -w $tcpdumpdns > /dev/null 2>&1 &

Faz um arquivo de saída como:

19:26:12.185392 IP 172.16.0.6.57977 > google-public-dns-a.google.com.domain: 51198+ A? yahoo.com. (27)

Portanto, preciso processar isso para obter o yahoo.com :

echo $tcpdumpdns | awk '/ A\? / {u = NF - 1; print $u}' | sed 's/^www.//g; s/.$//g' | sort -u

Existe alguma solução melhor para reunir todas as solicitações de registro A de saída?

p.s .: coletando registros DNS É necessário apenas ter uma lista atualizada de sites que podem ser acessados via HTTPS. Então eu posso gerar arquivos xml para HTTPSEverywhere Firefox Add-on. Então, isso é apenas uma parte de um script.

    
por LanceBaynes 20.12.2011 / 19:32

2 respostas

11

Use o Wireshark:

tshark -f "udp port 53" -Y "dns.qry.type == A and dns.flags.response == 0"
    
por 21.12.2011 / 09:41
11

Se você não tiver o wireshark instalado,

tcpdumpdns=/tmp/tcpdumps
tcpdump -lvi any "udp port 53" | tee $tcpdumpdns

deve funcionar para você. Como você queria limitar a saída ao segundo para o último valor, eu analisaria seu arquivo de log com:

grep -E 'A\?' $tcpdumpdns |sed -e 's/^.*A? //' -e 's/ .*//'|sort -u

Se você quiser ao vivo, então:

tcpdump -lvi any "udp port 53" 2>/dev/null|grep -E 'A\?'|awk '{print $(NF-1)}'

deve fazê-lo, (aqui sed e awk são intercambiáveis; e eu escolheria awk.)

    
por 19.06.2013 / 14:29

Tags