2011-07-19 15 views
5

मुझे पता है कि डीएनएस आमतौर पर ऑपरेटिंग सिस्टम द्वारा संभाला जाता है, लेकिन मैं इस धारणा के तहत काम कर रहा हूं कि लक्ष्य प्रणाली पर DNS टूट गया है (यह DNS गलत कॉन्फ़िगरेशन का निदान करने का एक उपकरण है)। इसलिए मुझे ज्ञात अच्छे DNS सर्वर के खिलाफ सिस्टम से वापस आने वाले परिणामों की जांच करने के लिए स्वयं को DNS लागू करने की आवश्यकता है।मुझे सी ++ DNS लाइब्रेरी कहां मिल सकती है?

आप एनएसएलूकअप या डिग टूल्स के साथ ऐसा कर सकते हैं, मैन्युअल रूप से एक DNS सर्वर पता निर्दिष्ट करते हैं, लेकिन ऐसा लगता है कि विंडोज एपीआई ऐसा करने के लिए कॉल करता है (उदाहरण के लिए GetAddressByName) मुझे क्वेरी करने के लिए सर्वर निर्दिष्ट करने की अनुमति न दें, और उपयोग करें सिस्टम के बजाय कॉन्फ़िगर किया गया लक्ष्य।

मैंने DNS पर आरएफसी की तलाश करने की कोशिश की, लेकिन दुर्भाग्यवश वे मेरे लिए मिट्टी के रूप में स्पष्ट हैं - वे HTTP spec को कभी भी सबसे स्पष्ट और सबसे अच्छी तरह से लिखे गए नमूने की तरह दिखते हैं।

मैं कुछ ऐसा नहीं करना चाहता हूं जो किसी और ने पहले से ही कई बार किया हो।

+0

मुझे प्रश्न समझ में नहीं आता है। DNS को गलत कॉन्फ़िगर किया जा सकता है लेकिन यह वैकल्पिक API की आवश्यकता नहीं है।'gethostbyname()' और दोस्तों अभी भी आपको बताएंगे कि कॉन्फ़िगरेशन में * क्या है *। – EJP

+0

@EJP: एआरएम, नहीं, gethostbyname केवल एक लुकअप करता है। अगर कॉन्फ़िगरेशन गलत है, तो यह बस विफल हो जाता है। आवश्यक DNS सर्वरों का उपयोग करने के लिए फ़ंक्शन को बताने के लिए कोई प्रोग्रामेटिक तरीका नहीं है। (DNS के लिए वैश्विक सेटिंग्स को बदलने के बिना, लेकिन मैं स्थानीय समस्या को हल करने के लिए वैश्विक स्थिति नहीं बदल रहा हूं) –

उत्तर

0

the c-ares library आज़माएं, जैसा कि मैं समझता हूं कि यह अपने स्वयं के DNS स्टैक को कार्यान्वित करता है। मैंने इसे लिनक्स पर सफलतापूर्वक उपयोग किया है, और वे कहते हैं कि यह विंडोज का समर्थन करता है, हालांकि मैंने इसे स्वयं नहीं किया है। यह सी ++ नहीं है, केवल सादा सी है, लेकिन आप आसानी से इसके लिए एक सी ++ रैपर लिख सकते हैं।

यह असीमित होने के लिए बोनस अंक प्राप्त करता है, और हुक प्रदान करता है जिसके द्वारा आप इसे मौजूदा ईवेंट लूप के साथ एकीकृत कर सकते हैं।

http://cr.yp.to/djbdns/dns.html

इस प्रणाली DNS रिसोल्वर पुस्तकालयों से स्वतंत्र है और सही यूडीपी पैकेट उत्पन्न करेगा:

0

djbdns जो आप इस्तेमाल कर सकते हैं एक DNS क्लाइंट लाइब्रेरी में शामिल है। यदि आप वास्तव में चालाक होना चाहते हैं, तो आप इसे dnscache से जोड़ सकते हैं, या रूट सर्वर से नामों को हल करने के लिए dnstrace उपयोगिता को देख सकते हैं और देख सकते हैं कि वास्तव में क्या चल रहा है।

आपको इसे विंडोज़ पर काम करने की ज़रूरत होगी। मुश्किल नहीं होना चाहिए।

0

मैं libunbound का सुझाव दूंगा जो (ldns के साथ) एक स्टैंडअलोन लाइब्रेरी है जो अनबाउंड रिकर्सिव रिज़ॉल्वर के साथ शामिल है।

इसमें DNSSEC सत्यापन समर्थन भी है, जो DNSSEC को तैनात करने के लिए उपयोगी हो जाएगा।

http://unbound.net/

1

देखें मुझे पता है कि सवाल पुराना है, लेकिन मुझे नहीं यहाँ मेरे लिए अच्छा जवाब मिल गया है। मुझे poslib बहुत आसान इंटरफ़ेस वाला सर्वोत्तम डीएनएस लाइब्रेरी के रूप में मिला है।

संबंधित मुद्दे