0

私は、Tamir の 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);
    }
}
4

4 に答える 4

3

ここで私の疑惑...

パケットを再送信しています。これにより、ネットワーク ドライバーは、同じパケットを 2 回受信したと認識します。これはさまざまなケースで発生する可能性があり、最初に発生したものが到着するまでに時間がかかり、送信者が紛失した場合に備えて再送信するなどです。

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

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


「MSN に何も表示されない」と言うとき、余分なメッセージがないということですか、それとも最初のメッセージが表示されないということですか? 繰り返しが得られないということであれば、上記で説明しています。このプログラムを実行して MSN を効果的にブロックしている場合、それは明らかに多少異なります。

于 2009-08-18T22:56:50.753 に答える
1

MSN には、ある種のアプリケーション レベルのパケット番号付け、整合性チェック、スプーフィング チェックがあると思います。他のものは、この種の注目を集めるターゲットに対して犯罪的に無能です.

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

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

于 2009-08-24T06:16:50.897 に答える
0

TCP パケットを繰り返して、ソケットがそれを受信することを期待することはできません。すべてのパケットに順序番号があります。UDP の場合は機能する可能性がありますが、udp または tcp のいずれかのメッセージ全体を表すためにパケットに依存することもできません。

低レベルで作業している、レイヤード サービス プロバイダーを使用してインターフェイスとソケットの間を移動する、TCP 経由でプロトコルを実装するようなもので、そこでパケットを繰り返すことができ、ほとんどの場合、アプリケーション側でチェックが行われません。

于 2009-08-24T13:05:05.800 に答える