يمكن Dns.GetHostEntry من أي وقت مضى إعادة IPHostEntry فارغ AddressList?

StackOverflow https://stackoverflow.com/questions/156585

  •  03-07-2019
  •  | 
  •  

سؤال

أنا أتساءل فقط إذا كان يمكن أن يكون هناك حالة حيث اسم المضيف يمكن حلها بنجاح ولكن عاد hostEntry.AddressList فارغة.

حاليا أنا أفعل شيئا مثل هذا:

IPHostEntry hostEntry = Dns.GetHostEntry("some.hostname.tld");
if (hostEntry.AddressList.Count() < 1)
{
  // can that ever happen?
  throw new ArgumentException("hostName has no assigned IP-Address");
}
TcpClient client = new TcpClient(hostEntry.AddressList[0], 1234);

تخميني هو أن Dns.GetHostEntry إما يطرح استثناء إذا كان اسم المضيف غير موجود أو خلاف ذلك AddressList هو غير فارغ ، ولكن أنا لست متأكدا من ذلك.

هل كانت مفيدة؟

المحلول

لا, لن ترى فارغة قائمة العناوين:حتى إذا كان الاستعلام DNS التسمية التي لا وجود لها, ولكن لا يوجد لديه أو AAAA (IPv6) السجلات ، SocketException ("لا يوجد مثل هذا المضيف هو معروف") سيتم طرح.

يمكنك التحقق من ذلك من خلال النظر في وظيفة InternalGetHostByName(string hostName, bool includeIPv6) في DNS.cs من .صافي المصدر المرجعي الإصدار.باستثناء بعض منصة محددة الاحتياطات عمليات البحث DNS هي بسيطة التفاف حول Winsock gethostbyname وظيفة.

Gethostbyname إما أن تفشل أو عودة قائمة عناوين.فارغة قائمة العناوين هو لم يعودوا أبدا ، لأن وظيفة سوف تفشل مع WSANO_DATA ("اسم صالح لا يوجد سجل البيانات المطلوبة من نوع") في هذه الحالة, وهو ما يترجم إلى مأخذ استثناء رأينا بالفعل في .صافي.

تحرير أيار / مايو 2012 ، مطالبتك من خلال الردود مشيرا إلى أن قائمة فارغة يتم إرجاع أية حال: ملاحظة أن هذا الجواب ينطبق فقط على Win32 و أن منصات مثل ويندوز سي قد تتصرف بشكل مختلف تماما.إذا كنت ترى الفارغة قائمة السلوك على Win32 و طلب أنت ترتكب ضد متاحة للعموم ملقم DNS, الرجاء نشر التعليمات البرمجية الخاصة بك...

نصائح أخرى

وفقط للسجلات.

إجابة مقبولة MDB في أخذت نظرة على وصف الخطأ WSANO_DATA :

<اقتباس فقرة>   

والاسم المطلوب صالح ومن تم العثور في قاعدة البيانات، ولكنه لا يفعل   لا يحتوي على بيانات مقترنة الصحيح يتم حلها ل. على سبيل المثال المعتاد   لهذا هو محاولة ترجمة اسم المضيف إلى عنوان (باستخدام ل gethostbyname أو   WSAAsyncGetHostByName) الذي يستخدم DNS (خادم اسم المجال). سجل MX   وعاد ولكن لا سجل-تشير إلى المضيف نفسه موجودا، ولكن ليس   يمكن الوصول إليها مباشرة.

وحتى هذا يجيب حد كبير سؤالي:)

لديك ثلاث حالات محتملة هنا:

  1. اسم المضيف موجود (DNS لديه سجل) ويحل إلى عنوان IP

    • الشرط أبدا ضرب
  2. اسم المضيف موجود (DNS يعرف عن المجال) ومع ذلك لا سجلات موجودة.

    • هذا هو المرجح السيناريو, و أعتقد أن هذا لا يمكن أن يحدث في المقام الأول.
  3. اسم المضيف غير موجود

    • طرح استثناء ، لم تحصل هناك.

لذلك أنا لا أعتقد أن هذا يمكن أن يحدث من أي وقت مضى.

الجواب نعم.على GetHostEntry طريقة استعلامات DNS server للحصول على عناوين IP و أسماء مستعارة المرتبطة عنوان IP.

عناوين IPv6 يتم تصفيتها من نتائج GetHostEntry الطريقة إذا كان الكمبيوتر المحلي لا IPv6 المثبتة.ونتيجة لذلك ، فمن الممكن أن تعود فارغة IPHostEntry سبيل المثال إذا IPv6 النتائج حيث متاحة على العنوان المعلمة.

الأسماء المستعارة ممتلكات IPHostEntry سبيل المثال عاد لا يسكنها هذه الطريقة وسوف يكون دائما فارغة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top