سؤال

أحاول كتابة خادم bootp في C#.

أنا أتلقى وحل محل حزمة bootp من العميل وأحتاج إلى الرد باستخدام عنوان IP الخادم الخاص بي.

المشكلة هي:

  • يمكن أن يحتوي الكمبيوتر على محولات شبكات متعددة
  • العميل ليس لديه عنوان IP بعد

هل هناك أي طريقة لمعرفة أي محول تم استلام حزمة UDP؟

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

المحلول

هناك بعض الطرق الممكنة للقيام بذلك. قم بربط مقبس منفصل على كل IP على كل واجهة فعلية ، ثم ستعرف دائمًا الواجهة التي وصلت إليها الحزمة. يمكنك أيضًا تجربة علامة IP_RECVIF مع وظيفة RECVMSG Socket ، على الرغم من أنني لا أعرف ما إذا كان هذا مدعومًا على Windows. لدى ستيفن أمثلة في القسم 22.2 و 22.6 من برمجة شبكة UNIX. يمكنك استخدام علامة siocgifconf مع IOCTL للحصول على قائمة واجهات على الجهاز. يوجد برنامج مثال في القسم 17.6 UNP. إذا لم يمنحك C# إمكانية الوصول إلى هذه الوظائف ، لكن مدعومة على Windows ، يمكنك كتابة برنامج C بسيط لجمع وتحديث معلومات الواجهة / IP ثم استخدام MMAP لمشاركة منطقة ذاكرة بين برنامج C# و enumerator الواجهة.

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