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.