سؤال

أنا أكتب الخدمة في Python أن مجالات Ping Async. لذلك يجب أن تكون قادرة على ping العديد من IP في نفس الوقت. لقد كتبت على Epoll ioloop ، لكن لدي مشكلة في فقدان الحزم. عندما يكون هناك العديد من طلبات ICMP المتزامنة ، فإن جزءًا كبيرًا من الردود عليها لم تصل إلى الخدمة الخاصة بي. ما الذي قد يسبب هذا الموقف وكيف يمكنني جعل خدمتي Ping العديد من المضيفين في نفس الوقت دون فقدان الحزمة؟

شكرًا)

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

المحلول

إن المشكلة التي قد تواجهها هي بسبب حقيقة أن ICMP هي الطبقة 3 من نموذج OSI ولا تستخدم منفذًا للاتصال. باختصار ، ICMP ليس مصممًا حقًا لهذا. لا يزال السلوك المطلوب ممكنًا ، ولكن ربما يكون مكدس IP الذي تستخدمه في الطريق وإذا كان هذا على نظام Windows ، فاحرص على التأكد من أن هذه هي مشكلتك. كنت سأطلق النار على Wireshark للتأكد من حصولك على حزم واردة بالفعل ، إذا كان هذا هو الحال ، فسأستخدم libpcap لتتبع ردود ICMP. إذا كانت المشكلة مع الإرسال ، فسيتعين عليك استخدام مآخذ أو الخام وإنشاء حزم ICMP الخاصة بك.

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