Bagaimana cara mengumpulkan permintaan catatan DNS A?

15

Saya perlu merekam semua Acatatan keluar pada PC RedHat. Saya mencoba menggunakan tcpdump:

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

Itu membuat file output seperti:

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

Jadi saya perlu memprosesnya untuk mendapatkan yahoo.com:

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

Apakah ada solusi yang lebih baik untuk mengumpulkan semua Apermintaan catatan keluar ?

ps: mengumpulkan catatan DNS A hanya diperlukan untuk memiliki daftar situs web terbaru yang dapat dijangkau melalui HTTPS. Jadi saya dapat menghasilkan file xml untuk HTTPSEverywhere Add-on Firefox. Jadi ini hanya bagian dari naskah.

LanceBaynes
sumber
Apa yang salah dengan solusi yang Anda berikan?
Michael Mrozek
apakah Anda memiliki GUI env, jika menggunakan wireshark-gtk adalah solusi yang lebih mudah, karena Anda dapat memfilter di sana dengan lebih mudah.
Hanan N.
@Hanan N .: GUI bukan pilihan. ini diperlukan untuk menjadi otomatis.
LanceBaynes
@Michael Mrozek: Saya tidak berharap apa pun. Tetapi saya bertanya karena saya terbuka untuk solusi alternatif.
LanceBaynes

Jawaban:

12

Gunakan Wireshark:

tshark -f "udp port 53" -Y "dns.qry.type == A and dns.flags.response == 0"
pengguna1686
sumber
2
Saya dapattshark: "A" cannot be found among the possible values for dns.qry.type.
Jack O'Connor
3
Untuk mengatasi masalah @ JackO'Connor, nilai desimal untuk catatan DNS tipe A adalah 1. Oleh karena itu, ini harus berfungsi:tshark -f "udp port 53" -Y "dns.qry.type == 1 and dns.flags.response == 0"
Rolinh
13

Jika Anda belum menginstal wireshark

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

harus bekerja untukmu. Karena Anda ingin membatasi output ke nilai kedua ke terakhir maka saya akan mengurai file log Anda dengan:

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

Jika Anda menginginkannya hidup maka:

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

harus melakukannya, (di sini sed dan awk dapat dipertukarkan; dan saya akan memilih awk.)

Alexx Roche
sumber
grep -E 'A\?' $tcpdumpdns |sed 's/^.*A? //;s/ .*//'|sort -ukurang untuk mengetik
Alexx Roche