Як зібрати запити на запис DNS A?


15

Мені потрібно записати всі вихідні Aзаписи на ПК RedHat. Я спробував використовувати tcpdump:

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

Це робить вихідний файл на зразок:

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

Тому мені потрібно обробити це, щоб отримати yahoo.com:

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

Чи є краще рішення зібрати всі Aзапити на вихідні записи?

ps: збирання записів DNS А потрібен лише для того, щоб мати оновлений список веб-сайтів, доступних за допомогою HTTPS. Тож я можу генерувати XML-файли для HTTPSEverywhere надбудови Firefox. Тож це лише частина сценарію.


Що не так із запропонованим вами рішенням?
Michael Mrozek

чи є у вас GUI env, якщо так, то використання wireshark-gtk є простішим рішенням, оскільки ви можете там легко фільтрувати.
Ханан Н.

@Hanan N .: GUI - це не варіант. це потрібно, щоб бути автоматичним.
LanceBaynes

@Michael Mrozek: Я нічого не сподіваюсь. Але я запитав, бо я відкритий для альтернативних рішень.
LanceBaynes

Відповіді:


12

Використовуйте Wireshark:

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

2
Я отримуюtshark: "A" cannot be found among the possible values for dns.qry.type.
Джек О'Коннор

3
Для вирішення питання @ JackO'Connor десяткове значення для запису DNS типу A дорівнює 1. Тому це має спрацювати:tshark -f "udp port 53" -Y "dns.qry.type == 1 and dns.flags.response == 0"
Rolinh

13

Якщо у вас тоді не встановлено проводку

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

повинен працювати для вас. Оскільки ви хотіли обмежити вихід до другого до останнього значення, я би розібрав ваш файл журналу за допомогою:

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

Якщо ви хочете його жити тоді:

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

повинен це зробити, (тут sed і awk взаємозамінні; і я б вибрав awk.)


grep -E 'A\?' $tcpdumpdns |sed 's/^.*A? //;s/ .*//'|sort -uменше набирати
Рош
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.