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.


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"

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.)


grep -E 'A\?' $tcpdumpdns |sed 's/^.*A? //;s/ .*//'|sort -uest moins à taper
Alexx Roche
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.