質問

TamirのSharppcapを使用して、MSNにデータを送信しようとしています。

現在、テストのために、私のアイデアは、mymsn@msn.comが受信したmsgを待ってからパケット自体を再度送信することです。私はこれがうまくいかなければならないと思った。

何らかの理由で私の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);
    }
}
役に立ちましたか?

解決

の1つの重要な機能 TCP 「重複するパケットを破棄」していますか

したがって、WinPCapでの問題を解決するには、1つのMSNメッセージのすべてのパケットをキャプチャして、新しいパケットで再送信する必要があります。うまくいけば、MSNはそれを受け入れません。

その場合、MSNプロトコルに対処する方法を学ぶと、この問題の解決策がもたらされる可能性があります。

codeprojecthowto: connect_to_msn_messenger

たぶんこのc#lib MSNP-Sharp どういうわけかあなたの問題を解決するか、少なくともあなたにより良い理解を与えます Microsoft通知プロトコル

他のヒント

これが私の疑いです...

あなたはパケットを復活させています。これは、ネットワークドライバーに同じパケットを2回受け取ったと思わせると思います。それは、最初の出来事が到着するのにしばらく時間がかかるなど、さまざまなケースで発生する可能性があります。

ネットワークドライバー(またはMSN)は、複製を見つけて破棄します。結局のところ、そのデータはすでにそのデータを見ているため、冗長コピーは必要ありません。したがって、同じパケットを再び明示的に送信することには、基本的に目的はありません。

あなたはまた、あなたが1つのパケットを見ていると考える必要があります ストリーム データの。パケットが含まれているという保証はありません まさに 「ここに単一のメッセージがあります」という単一のコマンド。たとえば、次のメッセージの最初のビットで終了する場合があります。ストリームに追加のデータを挿入するだけでは難しいだけでなく、適切に行うにはプロトコルを理解する必要があります。


今、あなたが「私のmsnには何も現れない」と言うとき、あなたはいいえということですか 追加 メッセージ、または最初のメッセージが表示されないことは?もしあなたが繰り返されていないだけなら、上記はそれを説明します。効果的に ブロッキング このプログラムを実行することにより、MSNは明らかに多少異なります。

MSNには、ある種のアプリケーションレベルのパケット番号、整合性チェック、およびスプーフィングチェックがあると仮定します。この種の有名なターゲットにとって、他のものは犯罪的に無能です。

MSNが送信するパケットにチェーンズストリーム暗号化を適用すると仮定します...その場合、暗号化アルゴリズムの状態が異なるため、重複したパケットを受信するとゴミになります(パケットの復号化はdecryption状態を設定しますシーケンスの次のパケットの場合)。したがって、重複したパケットはMSNの悪いパケットのように見え、無視されます。

したがって、リプレイのパケットが機能する可能性がありますが、MSNはアプリケーションレベルでそれらを無視するようにします。 MSNアプリケーションレベルのプロトコルを理解しない限り、メッセージを簡単に複製することはできません。

TCPパケットを繰り返して、ソケットがそれを受信することを期待することはできません。すべてのパケットに注文番号があります。それがUDPであれば、それは動作するかもしれませんが、UDPまたはTCPのいずれかのメッセージ全体を表すためにパケットに依存することもできません。

あまりにも低いレベルで作業し、レイヤードサービスプロバイダーを使用してインターフェイスとソケットの間を獲得しています。これは、TCPを介してプロトコルを実装するようなものであり、パケットを繰り返すことができ、アプリケーション側のチェックがない可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top