winpcap-データの送信に問題がある
-
16-09-2019 - |
質問
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を介してプロトコルを実装するようなものであり、パケットを繰り返すことができ、アプリケーション側のチェックがない可能性があります。