DNS ए रिकॉर्ड अनुरोध कैसे इकट्ठा करें?


15

मुझे ARedHat पीसी पर सभी आउटगोइंग रिकॉर्ड्स को रिकॉर्ड करने की आवश्यकता है । मैंने प्रयोग करने की कोशिश की 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रिकॉर्ड अनुरोधों को इकट्ठा करने का कोई बेहतर उपाय है ?

पीएस: डीएनएस संग्रह करना केवल उन वेबसाइटों की एक अप-टू-डेट सूची की आवश्यकता है जो HTTPS के माध्यम से उपलब्ध हैं। इसलिए मैं HTTPSEverywhere Firefox Add-on के लिए xml फाइल जेनरेट कर सकता हूं। तो यह सिर्फ एक स्क्रिप्ट का एक हिस्सा है।


आपके द्वारा प्रदान किए गए समाधान में क्या गलत है?
— माइकल Mrozek

क्या आपके पास GUI env है, अगर ऐसा है तो वायरशर्क-जीईईके एक आसान समाधान है, क्योंकि आप वहां आसानी से फ़िल्टर कर सकते हैं।
— हनन एन।

@ हनन एन .: जीयूआई एक विकल्प नहीं है। यह स्वचालित होने के लिए आवश्यक है।
— लांसबैन्स

@ मिचेल मिर्जेक: मुझे उम्मीद है कि कुछ नहीं होगा। लेकिन मैंने पूछा क्योंकि मैं वैकल्पिक समाधानों के लिए खुला हूं।
— लांसबैन्स

जवाबों:


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 मुद्दे को संबोधित करने के लिए, एक प्रकार A DNS रिकॉर्ड के लिए दशमलव मान 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.