2012-06-06 29 views
6

मुझे वास्तव में क्या करता है इसके लिए दस्तावेज़ में कोई उचित विवरण नहीं मिल रहा है।वास्तव में Dns.GetHostEntry विधि (स्ट्रिंग) क्या करता है?

क्या यह ए रिकॉर्ड या सीएनएन रिकॉर्ड या दोनों के अस्तित्व की जांच करता है?

मेरी समझ यह है कि .NET 4 में, यह सॉकेट अपवाद फेंकता है यदि होस्ट मौजूद नहीं है, और यह मेरे परीक्षण द्वारा पुष्टि की जाती है।

उत्तर

7

यह पतों की सूची से

var ips = System.Net.Dns.GetHostEntry("microsoft.com").AddressList; 
foreach (var ip in ips) 
    Console.WriteLine(ip); 

// output 
64.4.11.37 
65.55.58.201 

लौटे है और ये एक रिकॉर्ड network-tools.com से, DNS क्वेरी खींच लिया है।

Answer records 
microsoft.com  A 64.4.11.37 
microsoft.com  A 65.55.58.201 

तो मैं कहूंगा कि यह एक रिकॉर्ड खींचता है।

+0

एक बेहतर उत्तर के लिए धन्यवाद। –

+0

यहां ओपन-सोर्स, सी # लाइब्रेरी है जिसका उपयोग मैं DNS प्रश्नों के लिए करता हूं, http://www.codeproject.com/Articles/12072/C-NET-DNS-query-component जो मैंने इस प्रश्न से पाया, http: // stackoverflow.com/questions/1061248/getting-ns-record-type-using-c-sharp-dns/1061268#comment12106649_1061268 – Despertar

+0

सही! बिल्कुल सही! –

4

Dns.GetHostEntry विंडोज एपीआई के शीर्ष पर बनाया गया है और सीधे DNS प्रोटोकॉल का उपयोग नहीं करता है। यदि आईपीवी 6 सक्षम है तो यह getaddrinfo पर कॉल करेगा। अन्यथा यह gethostbyaddr पर कॉल करेगा। ये फ़ंक्शन किसी होस्ट पते को किसी IP पते पर हल करने के लिए स्थानीय %SystemRoot%\System32\drivers\etc\hosts फ़ाइल, DNS या यहां तक ​​कि नेटबीओएस का उपयोग कर सकते हैं। DNS का उपयोग कर किसी आईपी पते पर होस्ट नाम को हल करने से एक रिकॉर्ड खोजने के लिए CNAME रिकॉर्ड्स का उपयोग किया जाएगा।

आप www.google.com को हल करके इसका परीक्षण कर सकते हैं कि कम से कम अभी एक CNAME रिकॉर्ड है जो www.l.google.com पर इंगित करता है। Dns.GetHostEntry का उपयोग www.l.google.com के लिए ए रिकॉर्ड से आईपी पते लौटाएगा।

+0

ठीक है, तो आप कह रहे हैं कि यह CNAME और A रिकॉर्ड दोनों का उपयोग करता है जिसमें यह एक रिकॉर्ड खोजने के लिए CNAME रिकॉर्ड्स का पालन करता है। और किसी भी ए रिकॉर्ड खोजने में विफलता सॉकेटएक्सप्शन फेंक देगी? –

+0

मुझे सीएनएन भाग के बारे में निश्चित नहीं है। पूरी तरह से योग्य डोमेन (ftp.domain.com CNAME डोमेन.com) पर मैप करने के लिए सभी केवल उपडोमेन CNAME का उपयोग करने के बाद। हालांकि डोमेन.com के पास एक रिकॉर्ड होना चाहिए, तो यह Dns.GetHostEntry ("domain.com") के साथ कैसे काम करेगा? मैंने अभी तक मेरे दो सबडोमेन के साथ GetHostEntry() का परीक्षण किया है, प्रत्येक में एक अलग सर्वर पर इंगित एक रिकॉर्ड है और GetHostEntry ने उन आईपी को वापस कर दिया है और यदि मैं उन ए रिकॉर्ड को बदलता हूं तो मुझे यकीन है कि यह GetHostEntry() के परिणाम बदल देगा। Google.com दुनिया की सबसे व्यस्त साइट है इसलिए मुझे नहीं लगता कि यह स्थिरता के लिए एक अच्छा बेंचमार्क बनाता है। – Despertar

+0

@ ग्रेगेट: एक छोटा परीक्षण करना शायद आपके प्रश्न का उत्तर देने का सबसे अच्छा तरीका है। मुझे यकीन नहीं है कि एक सीएनएन रिकॉर्ड होने पर 'getaddrinfo' कैसे व्यवहार करता है जो एक रिकॉर्ड को इंगित नहीं करता है। हालांकि, 'Dns.GetHostEntry' के लिए स्रोत कोड सार्वजनिक रूप से उपलब्ध है और जहां तक ​​मैं देख सकता हूं कि सॉकेट त्रुटि को 'सॉकेट अपवाद' में लपेटा जाएगा। –