Come raccogliere richieste di record DNS A?


15

Devo registrare tutti i record in uscita Asu un PC RedHat. Ho provato a usare tcpdump:

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

Crea un file di output come:

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

Quindi devo elaborarlo per ottenere yahoo.com:

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

Esiste una soluzione migliore per raccogliere tutte le Arichieste di record in uscita ?

ps: raccolta di record DNS A è necessario solo per avere un elenco aggiornato di siti Web raggiungibili tramite HTTPS. Quindi posso generare file XML per il componente aggiuntivo HTTPSEverywhere Firefox. Quindi questa è solo una parte di una sceneggiatura.


Cosa c'è che non va nella soluzione che hai fornito?
Michael Mrozek

hai un env GUI, se è così usando WireShark-GTK è una soluzione più semplice, dal momento che puoi filtrare lì molto facilmente.
Hanan N.

@Hanan N .: La GUI non è un'opzione. questo è necessario per essere automatico.
LanceBaynes,

@Michael Mrozek: non spero nulla. Ma ho chiesto perché sono aperto a soluzioni alternative.
LanceBaynes,

Risposte:


12

Usa Wireshark:

tshark -f "udp port 53" -Y "dns.qry.type == A and dns.flags.response == 0"

2
Ricevotshark: "A" cannot be found among the possible values for dns.qry.type.
Jack O'Connor il

3
Per risolvere il problema di @ JackO'Connor, il valore decimale per un record DNS di tipo A è 1. Pertanto, questo dovrebbe funzionare:tshark -f "udp port 53" -Y "dns.qry.type == 1 and dns.flags.response == 0"
Rolinh

13

Se non hai installato WireShark allora

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

dovrebbe funzionare per te. Come volevi limitare l'output al secondo all'ultimo valore, analizzerei il tuo file di registro con:

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

Se lo vuoi dal vivo, allora:

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

dovrebbe farlo, (qui sed e awk sono intercambiabili; e sceglierei awk.)


grep -E 'A\?' $tcpdumpdns |sed 's/^.*A? //;s/ .*//'|sort -uè meno da digitare
Alexx Roche
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.