Use o Wireshark:
tshark -f "udp port 53" -Y "dns.qry.type == A and dns.flags.response == 0"
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.
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.)
Tags tcpdump