سؤال

أنا أبحث عن وظيفة تأخذ عنوان IPv6 كوسيطة وترجع اسم المجال.

لتوضيح الأمر، 2a00:1450:8006::68 يُرجع ipv6.google.com.

(الهدف هو إعطاء اسم المجال هذا لوظيفة getaddrinfo.)

شكرًا :-)

تحرير 1 :لقد حاولت getaddrinfo("2a00:1450:8006::68", "http", NULL, &result); ، تقوم بإرجاع "عائلة العناوين لاسم المضيف غير مدعومة" و getaddrinfo("ipv6.google.com", "http", NULL, &result); إرجاع خطأ "لا يوجد عنوان مرتبط بالاسم الساخن".

تحرير 2 :أتفق معك، لدي مشكلة مع نظام IPV6، لقد حاولت http://test-ipv6.com/ ويبدو أنني لا أملك عنوان IPV6 ولكن مع ifconfig يعود :

adr inet6: fe80::15b:fcff:fe65:d516/64 Scope:Lien
هل كانت مفيدة؟

المحلول

أعتقد أنه ليس لديك تكوين IPv6 صالح. getaddrinfo() سيعرض فقط إجابات IPv6 التي يمكن الوصول إليها، لذلك إذا لم يكن نظامك يحتوي على عنوان IPv6 بنطاق عالمي وطريق إلى العنوان الذي تم حله، فستتم إزالة النتيجة من مجموعة النتائج.

الفكرة الأساسية هي أن تتصل getaddrinfo مرة واحدة واحصل على قائمة بالعناوين التي تريد الاتصال بها - إذا كانت هذه القائمة تتضمن عناوين لا يمكن الوصول إليها، فسيتعين على البرامج تشغيل مهلة زمنية أولاً قبل تجربة عنوان آخر.

"عائلة العناوين لاسم المضيف غير مدعومة" تعني أنها أدركت أن العنوان هو عنوان IPv6 لا يلزم حله عبر DNS، لذلك تحاول مطابقته مع قائمة عائلات العناوين المسموح بها، وتفشل وتعيد الخطأ.

يحاول حل اسم المضيف الحصول على سجل "A" لاسم المضيف، حيث أن ذلك مناسب لعائلة العناوين الوحيدة المدعومة محليًا.لا يوجد مثل هذا السجل، ومن ثم فإنه يقوم بإرجاع المعلومات التي تفيد بعدم وجود سجل.نظرًا لأنه لم يطلب أبدًا عنوان IPv6 (كان ذلك لا معنى له)، فهو لا يشتكي من عدم تطابق عائلة العنوان هنا.

نصائح أخرى

أنت على حق في الاستخدام getaddrinfo كخطوة أولى، لكن لا يمكنه إجراء عمليات بحث عكسية لك.سوف تحتاج إلى استخدام getaddrinfo لتحويل نموذج سلسلة العنوان إلى a sockaddr, ، والتي يمكنك بعد ذلك الانتقال إليها getnameinfo للقيام بالبحث العكسي.

ومع ذلك، أعتقد أن تعليق كارل ذو صلة أيضًا.يبدو أن نظامك مهيأ بحيث لا يدعم IPv6...

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