سؤال

أنا أستخدم Tamir's Sharppcap لمحاولة إرسال البيانات إلى MSN الخاص بي.

حاليا، لأغراض الاختبار، فكرتي هي انتظار أي رسالة تلقى بواسطة mymsn@msn.com ثم إرسال الحزمة نفسها مرة أخرى، وهذا هو، مما يجعل أي رسالة تظهر متكررة إلى الأبد على MSN. اعتقدت أن هذا كان عليه أن يعمل، لأنني ببساطة تلقي الحزمة نفسها، وإعادة إرسالها مرة أخرى.

لسبب ما يظهر لا شيء على MSN الخاص بي، على الرغم من أنني سوف أرى طباعة في وحدة التحكم بالكثير من "البيانات التي اشتعلت، إعادة إرسالها". أيه أفكار؟ شكرا

class Program {
    static PcapDevice device;

    static void Main(string[] args) {
        device = SharpPcap.GetAllDevices()[0];
        device.PcapOnPacketArrival +=
                new SharpPcap.PacketArrivalEvent(device_PcapOnPacketArrival2);
        device.PcapOpen(true, 1000);
        device.PcapStartCapture();

        Console.ReadKey();
    }

    static void device_PcapOnPacketArrival2(object sender, Packet packet) {
        TCPPacket tcpPacket = packet as TCPPacket;

        if (tcpPacket == null) {
            return;
        }

        string data = Encoding.Default.GetString(tcpPacket.Data);

        if (!data.StartsWith("MSG mymsn@msn.com")) {
            return;
        }

        Console.WriteLine("caught data, resending it");

        device.PcapSendPacket(tcpPacket);
    }
}
هل كانت مفيدة؟

المحلول

ميزة مفتاح واحد TCP. هو "التخلص من الحزم المكررة"

إذن لحل مشكلتك باستخدام WINPCAP، عليك التقاط جميع حزم رسالة MSN وإعادة إرسالها في حزم جديدة. نأمل أن يقبل MSN ذلك.

في هذه الحالة، تعلم كيفية التعامل مع بروتوكول MSN حلا لهذه المشكلة.

CodeProject Howto: Connect_to_msn_messenger.

ربما هذا c # lib MSNP-Sharp. بطريقة ما يحل مشكلتك أو على الأقل يمنحك فهم أفضل بروتوكول إعلام Microsoft

نصائح أخرى

إليك شكوكي ...

أنت بإعادة إرسال الحزمة، التي أعتقد أنها ستجعل برنامج تشغيل الشبكة يعتقد أنه تلقى نفس الحزمة مرتين. يمكن أن يحدث ذلك في العديد من الحالات، مثل الحدوث الأول الذي يستغرق الوصول لفترة من الوقت، وبالتالي فإن إعادة إرسال المرسل في حالة فقدت.

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

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


الآن عندما تقول "لا يوجد شيء يظهر على MSN الخاص بي" هل تعني NO إضافي الرسائل، أو أن الرسالة الأولى لا تظهر؟ إذا كنت لا تحصل على التكرار، فإن ما سبق يفسره أعلاه. إذا كنت فعليا حظر MSN عن طريق تشغيل هذا البرنامج، ثم من الواضح أنه مختلف إلى حد ما.

أود أن أفترض أن MSN لديها نوع من ترقيم حزمة مستوى التطبيق، والتحقق من النزاهة، والتحقق من ساخرة. أي شيء آخر سيكون غير كفء بالإجرام لهذا النوع من الهدف رفيع المستوى.

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

لذلك من المحتمل أن تعمل Replaying الحزم، ولكن MSN ستتأكد من تجاهلها على مستوى التطبيق. ما لم تفهم بروتوكول مستوى تطبيق MSN، فلن تتمكن من تكرار الرسائل بأي طريقة بسيطة.

لا يمكنك تكرار حزمة TCP ونتوقع المقبس لاستلامها، وهناك أرقام الطلبات على كل حزمة. إذا كانت UDP، فربما تعمل ولكنك لا تستطيع أيضا الاعتماد على الحزم لتمثيل الرسالة بالكامل إما UDP أو TCP.

أنت تعمل على مستوى منخفض للغاية، استخدم مقدمي الخدمات الطبقات للحصول على الواجهة بين الواجهة والمقبس، فهو مثل تطبيق بروتوكول عبر TCP، وهناك تكرار الحزم، وعلى الأرجح لن يكون هناك أي تحقق من جانب التطبيق.

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