سؤال

كيف يمكنني إنشاء مقبس UDP عميل في C ++ حتى يتمكن من الاستماع على منفذ يتم الاستماع إليه بواسطة تطبيق آخر؟ بمعنى آخر ، كيف يمكنني تطبيق تعدد الإرسال المنفذ في C ++؟

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

المحلول

أريد أن أستمع إلى منفذ واحد فقط

يمكنك القيام بذلك مع sniffer. فقط تجاهل الحزم من منافذ مختلفة.

قد أحتاج إلى منعه من إرسال بعض الحزم المعينة ، لأن برنامجي سيرسلها بدلاً من التطبيق الأصلي

حسنًا ، أنا هنا أقترح عليك تجاهل الشخير واستخدام أ MITM تقنية.

ستحتاج إلى الاعتماد على قاعدة جدار الحماية تحويل الحزم إلى "الوكيل"التطبيق. على افتراض UDP ، Linux ، Iptables ، و"الوكيل"الركض على نفس المضيف ، إليك ما"الوكيل"في الواقع يحتاج إلى القيام:

1. أضف قاعدة جدار الحماية إلى تحويل الحزم (افعلها يدويًا ، إذا كنت تفضل):

iptables -t nat -A PREROUTING -i <iface> -p <proto> --dport <dport>
    -j REDIRECT --to-port <newport>

2. ربط واستمع إلى <newport>.

3. قم بتنقل جميع حركة المرور بين نقاط النهاية 2 (العميل ، والوجهة الأصلية). إذا كنت تدير "الوكيل"على مضيف مختلف ، استخدم getSockopt مع SO_ORIGINAL_DST لاسترداد عنوان الوجهة الأصلي.

قد يبدو الأمر صعبًا ، لكن ... نعم ، هذا لأنه صعب بعض الشيء :-) استشر وثائق جدار الحماية الخاص بك إذا كان افتراضي يتباعد.

نصائح أخرى

هذه مجرد حزمة استنشاق مثل tcpdump أو snoop, ، افتح مقبسًا خامًا واسحب كل شيء من السلك والتصفية كما تحتاج. ربما تريد استخدامها libpcap لجعل الأمور أسهل قليلاً.

بدون امتيازات مسؤول أو مستخدم فائق ، ستحتاج إلى التطبيق المستهدف لفتح المنافذ SO_REUSEADDR و SO_REUSEPORT حسب الاقتضاء للمنصة. التحذير يجري يمكنك فقط تلقي حزم البث والبث المتعدد ، يتم تسليم حزم الأحاديات إلى أول مأخذ مفتوح.

هذا هو ليس تعدد الإرسال - هذا المصطلح محجوز للتعامل مع الإدخال/الإخراج على قنوات متعددة في نفس العملية وأين مثل الأشياء select(2) و poll(2) هي الأكثر فائدة.

ما تطلبه هو البث المتعدد. هنا هو المثال الأساسي.

لاحظ أن IP يحتفظ بمجموعة خاصة من العناوين (المعروفة أيضًا باسم المجموعات) للبث المتعدد. هذه يتم تعيينها إلى عناوين Ethernet الخاصة. يجب على المستمع (المستمعين) أن انضم مجموعة البث المتعدد ، في حين أن المرسل لا يضطر إلى ذلك ، فإنه يرسل كالمعتاد.

أتمنى أن يساعدك هذا.

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