سؤال

Q1 - هل من الممكن التقاط طلب/ردود DNS مع المكتبة؟

س 2 - إذا كانت الإجابة بنعم ، بمجرد أن يكون لدي الحزمة ، هل لدى أي شخص أي رمز عينة يوضح كيف يمكنني استخراج الحقول من استجابة DNS؟ على وجه الخصوص عنوان IP الذي تم حل DNS لاسم DNS المعطى المقدمة على وجه الخصوص.

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

المحلول

انه من الممكن.

سيكون رمز العينة قليلاً على الجانب الطويل ، على الرغم من ...

في جوهرها ، تحتاج إلى:

  1. استخراج رأس Ethernet
  2. استخراج رأس IP
  3. استخراج رأس UDP [على افتراض أن الحزمة غير مجزأة ، أو باستخدام TCP
  4. استخراج حمولة DNS

ثم تعامل مع بقية الحزمة وفقًا للوصف الشامل للغاية في RFC 1035.

في الممارسة العملية يعني:

  1. تجاهل الطلبات - كل المعلومات التي تحتاجها هي في الردود (QR == 1)
  2. تحقق من وجود RCODE == 0 و ANCOUNT > 0
  3. ابحث في سؤال قسم للعثور على الاسم الذي تم الاستعلام عنه
  4. ابحث عن إجابات في إجابه (duh!) قسم

لزيادة تعقيد الأمور التي لديك للتعامل مع ملصقات DNS (سلسلة من <count><data...> الحقول) وربما التعامل مع الملصقات المضغوطة أيضا!

هذا يبدو سيئًا ، لكن لا شيء من هذا في الواقع الذي - التي الصعب. لدي رمز C ++ الذي يقوم بكل هذا وليس طويلاً ، لكن لا يمكنني إطلاقه.

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