Comment rassembler les demandes d'enregistrement DNS A?

15

J'ai besoin d'enregistrer tous les Aenregistrements sortants sur un PC RedHat. J'ai essayé d'utiliser tcpdump:

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

Il crée un fichier de sortie comme:

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

Je dois donc traiter cela pour obtenir yahoo.com:

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

Existe-t-il une meilleure solution pour rassembler toutes les Ademandes d'enregistrement sortantes ?

ps: la collecte des enregistrements DNS A n'est nécessaire que pour disposer d'une liste à jour des sites Web accessibles via HTTPS. Je peux donc générer des fichiers xml pour le module complémentaire Firefox HTTPSEverywhere. Ce n'est donc qu'une partie d'un script.

LanceBaynes
la source
Quel est le problème avec la solution que vous avez fournie?
Michael Mrozek
avez-vous un environnement GUI, si c'est le cas, l'utilisation de cableshark-gtk est une solution plus facile, car vous pouvez y filtrer beaucoup plus facilement.
Hanan N.
@Hanan N .: L'interface graphique n'est pas une option. cela doit être automatique.
LanceBaynes
@Michael Mrozek: J'espère rien. Mais j'ai demandé parce que je suis ouvert à des solutions alternatives.
LanceBaynes

Réponses:

12

Utilisez Wireshark:

tshark -f "udp port 53" -Y "dns.qry.type == A and dns.flags.response == 0"
user1686
la source
2
Je reçoistshark: "A" cannot be found among the possible values for dns.qry.type.
Jack O'Connor
3
Pour résoudre le problème @ JackO'Connor, la valeur décimale pour un enregistrement DNS de type A est 1. Par conséquent, cela devrait fonctionner:tshark -f "udp port 53" -Y "dns.qry.type == 1 and dns.flags.response == 0"
Rolinh
13

Si vous ne disposez pas de wirehark installé

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

devrait fonctionner pour vous. Comme vous vouliez limiter la sortie à l'avant-dernière valeur, j'analyserais votre fichier journal avec:

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

Si vous le voulez vivre alors:

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

devrait le faire, (ici sed et awk sont interchangeables; et je choisirais awk.)

Alexx Roche
la source
grep -E 'A\?' $tcpdumpdns |sed 's/^.*A? //;s/ .*//'|sort -uest moins à taper
Alexx Roche