
फ़ास्ट DNS लुकअप लाइब्रेरी और CLI टूल
ZDNS एक हाई-स्पीड DNS रिज़ॉल्वर और कमांड लाइन उपयोगिता है जो बड़े पैमाने पर DNS मापन करने के लिए है। ZDNS Go में लिखा गया है और इसमें अपना स्वयं का रिकर्सिव रिज़ॉल्यूशन कोड और एक कैश है जो विविध नामों के लुकअप को अनुकूलित करता है। हम कच्चे DNS पैकेटों को बनाने और पार्स करने के लिए https://github.com/zmap/dns का उपयोग करते हैं। ZDNS की आर्किटेक्चर और प्रदर्शन के बारे में अधिक जानकारी के लिए, ACM के Internet Measurement Conference '22 में प्रकाशित निम्नलिखित पेपर देखें।
[!TIP] ZDNS Wiki में ZDNS के बारे में अतिरिक्त जानकारी है और उपयोग-मामलों और उदाहरणों के माध्यम से चलता है।
ZDNS को रिपॉजिटरी को चेक आउट करके और make install चलाकर स्थापित किया जा सकता है।
git clone https://github.com/zmap/zdns.git
cd zdns
make install
ZDNS में एक रिकर्सिव रिज़ॉल्वर लाइब्रेरी और CLI रैपर शामिल है।
लाइब्रेरी में एक ResolverConfig स्ट्रक्ट है जिसमें सभी लुकअप के लिए सभी कॉन्फ़िग विकल्प होंगे।
ResolverConfig का उपयोग 1+ Resolver स्ट्रक्ट बनाने के लिए किया जाता है जो सभी लुकअप करेंगे। एक Resolver
को एक समय में केवल एक लुकअप करना चाहिए (यह थ्रेड-सेफ नहीं है) और समानांतरता के लिए कई Resolver स्ट्रक्ट का उपयोग किया जाना चाहिए।
लाइब्रेरी का उपयोग करने के तरीके के लिए हमारे उदाहरण देखें। मॉड्यूल लुकअप के व्यवहार को परिभाषित करने के लिए उपयोग किए जाते हैं।
ZDNS कई प्रकार के मॉड्यूल प्रदान करता है:
रॉ DNS मॉड्यूल सर्वर से रॉ DNS प्रतिक्रिया प्रदान करते हैं जैसे dig, लेकिन JSON में। (लगभग) हर प्रकार के DNS रिकॉर्ड के लिए एक मॉड्यूल है
लुकअप मॉड्यूल अधिक सहायक प्रतिक्रियाएं प्रदान करते हैं जब कई क्वेरी की आवश्यकता होती है (जैसे, NSLOOKUP में NS प्राप्त होने पर IP पतों के लिए अतिरिक्त A लुकअप पूरा करना)
विविध मॉड्यूल सर्वरों से पूछताछ करने के अन्य अतिरिक्त तरीके प्रदान करते हैं (जैसे, bind.version)
हम मॉड्यूल को नीचे विस्तार से बताते हैं:
A, AAAA, AFSDB, ANY, ATMA, AVC, AXFR, BINDVERSION, CAA, CDNSKEY, CDS, CERT, CNAME, CSYNC, DHCID, DMARC, DNSKEY, DS, EID, EUI48, EUI64, GID, GPOS, HINFO, HIP, HTTPS, ISDN, KEY, KX, L32, L64, LOC, LP, MB, MD, MF, MG, MR, MX, NAPTR, NID, NINFO, NS, NSAPPTR, NSEC, NSEC3, NSEC3PARAM, NSLOOKUP, NULL, NXT, OPENPGPKEY, PTR, PX, RP, RRSIG, RT, SVCBS, MIMEA, SOA, SPF, SRV, SSHFP, TALINK, TKEY, TLSA, TXT, UID, UINFO, UNSPEC, और URI मॉड्यूल dig के समान JSON रूप में रॉ DNS प्रतिक्रिया प्रदान करते हैं।
उदाहरण के लिए, कमांड:
echo "censys.io" | zdns A
लौटाता है:
{
"name": "censys.io",
"results": {
"A": {
"data": {
"additionals": [
{
"flags": "",
"type": "EDNS0",
"udpsize": 512,
"version": 0
}
],
"answers": [
{
"answer": "104.18.10.85",
"class": "IN",
"name": "censys.io",
"ttl": 300,
"type": "A"
},
{
"answer": "104.18.11.85",
"class": "IN",
"name": "censys.io",
"ttl": 300,
"type": "A"
}
],
"protocol": "udp",
"resolver": "[2603:6013:9d00:3302::1]:53"
},
"duration": 0.285295416,
"status": "NOERROR",
"timestamp": "2024-08-23T13:12:43-04:00"
}
}
}
रॉ DNS प्रतिक्रियाएं अक्सर वह डेटा प्रदान नहीं करतीं जो आप चाहते हैं. उदाहरण के लिए,
एक MX प्रतिक्रिया में अतिरिक्त अनुभाग में संबंधित A रिकॉर्ड शामिल नहीं हो सकते हैं,
जिसके लिए अतिरिक्त लुकअप की आवश्यकता होती है। इस अंतर को दूर करने और एक अधिक अनुकूल इंटरफ़ेस प्रदान करने के लिए,
हम कई लुकअप मॉड्यूल भी प्रदान करते हैं: alookup, mxlookup, और nslookup।
alookup nslookup के समान कार्य करता है और CNAME रिकॉर्ड का अनुसरण करेगा।
mxlookup एक्सचेंज रिकॉर्ड के अनुरूप IP पतों के लिए अतिरिक्त रूप से एक A लुकअप करेगा।
nslookup NS रिकॉर्ड के अनुरूप IP पतों के लिए अतिरिक्त रूप से एक A/AAAA लुकअप करेगा।
उदाहरण के लिए,
echo "censys.io" | zdns mxlookup --ipv4-lookup
लौटाता है:
{
"name": "censys.io",
"results": {
"MXLOOKUP": {
"data": {
"exchanges": [
{
"class": "IN",
"ipv4_addresses": [
"209.85.202.27"
],
"name": "alt1.aspmx.l.google.com",
"preference": 5,
"ttl": 300,
"type": "MX"
},
{
"class": "IN",
"ipv4_addresses": [
"142.250.31.26"
],
"name": "aspmx.l.google.com",
"preference": 1,
"ttl": 300,
"type": "MX"
}
]
},
"duration": 0.154786958,
"status": "NOERROR",
"timestamp": "2024-08-23T13:10:11-04:00"
}
}
}
ZDNS विशेष "डीबग" DNS क्वेरी भी समर्थन करता है। मॉड्यूल में शामिल हैं: BINDVERSION।
ZDNS वांछित व्यवहार के आधार पर विभिन्न प्रारूपों में इनपुट प्रदान करने का समर्थन करता है।
सबसे बुनियादी इनपुट न्यूलाइन द्वारा अलग किए गए नामों की एक सूची है। उदाहरण के लिए:
stdin से:
echo "google.com\nyahoo.com" | zdns A
cat list_of_domains.txt | zdns A
फ़ाइल से
zdns A --input-file=list_of_domains.txt
यदि आपको कई डोमेन हल करने की आवश्यकता नहीं है, तो उपयोग में आसानी के लिए CLI तर्क के रूप में डोमेन प्रदान करना, dig के समान, समर्थित है।
उदाहरण के लिए:
zdns A google.com --name-servers=1.1.1.1
dig -t A google.com @1.1.1.1 के बराबर
सामान्यतः, ZDNS --name-servers से प्रत्येक डोमेन लुकअप के लिए एक यादृच्छिक नेमसर्वर चुनेगा। यदि इसके बजाय आप प्रत्येक डोमेन के लिए एक अलग नेम सर्वर निर्दिष्ट करना चाहते हैं, तो आप न्यूलाइन द्वारा अलग किए गए domainName,nameServerIP जोड़े प्रदान करके ऐसा कर सकते हैं।
यह --name-servers के साथ प्रदान किए गए किसी भी नेमसर्वर को ओवरराइड करेगा।
उदाहरण के लिए:
echo "google.com,1.1.1.1\nfacebook.com,8.8.8.8" | zdns A
आप आउटपुट में प्रत्येक डोमेन के लिए resolver को निर्दिष्ट के रूप में देख सकते हैं (संक्षिप्तता के लिए अतिरिक्त/उत्तर संपादित):
$ echo "google.com,1.1.1.1\nfacebook.com,8.8.8.8" | zdns A
{"name":"google.com","results":{"A":{"data":{"additionals":...,"answers":[...],"protocol":"udp","resolver":"1.1.1.1:53"},"duration":0.030490042,"status":"NOERROR","timestamp":"2024-09-13T09:51:34-04:00"}}}
{"name":"facebook.com","results":{"A":{"data":{"additionals":[...],"answers":[...],"protocol":"udp","resolver":"8.8.8.8:53"},"duration":0.061365459,"status":"NOERROR","timestamp":"2024-09-13T09:51:34-04:00"}}}
ICANN CZDS या इसी तरह की ज़ोन फ़ाइलों का उपयोग --zone-file फ़्लैग के साथ ZDNS के लिए इनपुट स्रोत के रूप में किया जा सकता है। यह stdin (डिफ़ॉल्ट) या --input-file फ़्लैग के साथ एक फ़ाइल से ज़ोन फ़ाइलों को पार्स करने में सक्षम बनाता है।
डिफ़ॉल्ट रूप से, ZDNS प्रत्येक ज़ोन फ़ाइल रिकॉर्ड से केवल नाम निकालेगा। यदि आप CNAME या NS रिकॉर्ड जैसे रिकॉर्ड प्रकारों के उत्तर अनुभाग में संदर्भित नामों को भी हल करना चाहते हैं, तो आप --zone-file-include-targets CLI फ़्लैग का उपयोग कर सकते हैं।
उदाहरण के लिए, --zone-file-include-targets और इस DNS ज़ोन फ़ाइल प्रविष्टि के साथ:
example.com. 3600 IN NS ns1.example.com
example.com और ns1.example.com दोनों हल हो जाएंगे।