13

テスト用に TCP ストリームの片側を記録および再生するためのツールを探しています。ファイアウォールなどをテストするために、TCP ストリーム全体 (サーバーとクライアントの両方) を記録するツールを目にしますが、私が探しているのは、クライアントから送信されたトラフィックのみを (タイミング情報と共に) 記録し、再送信するツールです。テスト用のサーバーに。

4

5 に答える 5

14

TCP が再送信、シーケンス番号、SACKおよびウィンドウ処理を処理する方法により、これは想像以上に難しい作業になる可能性があります。

通常、パケットの再生にはtcpreplayを使用します。ただし、TCP シーケンス番号の同期はサポートしていません。双方向の TCP ストリームが必要なため (これには seq 番号付けの同期が必要です)、次のオプションのいずれかを使用します。

  1. これが非常にインタラクティブなクライアント/サーバー プロトコルscapyである場合、ストリームの TCP コンテンツを取り除き、タイミングとインタラクティブ性を解析するために使用できます。次に、この情報を使用して、サーバーへの新しい TCP ソケットを開き、そのデータを新しい TCP ソケットに逆シリアル化します。scapyTCP 再送信とウィンドウ ダイナミクスに遭遇すると、元のストリームを解析するのが難しくなる可能性があります。バイトを新しい TCP ソケットに書き込む場合、自分でシーケンス番号を処理する必要はありません... OS が処理します。

  2. これが単純なストリームであり、タイミングなしで実行できる (またはタイミング情報を手動で挿入したい)場合は、wireshark を使用して、解析を気にせずに TCP ストリームから生のバイトを取得できますscapy。生のバイトを取得したら、これらのバイトを新しい TCP ソケットに書き込みます (必要に応じて対話性を考慮してください)。バイトを新しい TCP ソケットに書き込む場合、自分でシーケンス番号を処理する必要はありません... OS が処理します。

  3. ストリームが厳密にテキスト (html や xml ではない) コマンド (telnet セッションなど) である場合は、前述の解析よりもExpectのようなソリューションの方が簡単な場合があります。このソリューションでは、コードから直接 TCP ソケットを開かず、expect を使用しspawnて telnet (またはその他の) セッションを実行し、テキスト コマンドをsend/で再生しますexpect。ライブラリ/基盤となるOSがseq番号付けを処理することを期待しています。

  4. SeleniumWeb サービスをテストしている場合は、またはを使用してリンクをクリックする実際の Web クライアントをシミュレートする方がはるかに簡単だと思いますSplinter。あなたの http ライブラリ / 基礎となる OS は、新しいストリームでの seq 番号付けを処理します。

于 2012-05-31T16:51:10.927 に答える
3

WirePlay code.google.com/p/wireplay または github.com/abhisek/wireplay を見てくださいこれ、必要に応じてすべての SYN/ACK シーケンス番号を変更して、キャプチャされた TCP セッションのクライアント側またはサーバー側のいずれかを再生することを約束しています。

利用可能なバイナリ ビルドがあるかどうかはわかりません。自分でコンパイルする必要があります。

私はまだこれを自分で試していませんが、調べていることに注意してください。

于 2013-04-11T00:29:08.707 に答える
2

はい、そのようなツールを実装するのは難しい作業です。私は 2 年前にこの種のツールの実装を開始し、ツールは現在成熟しています。試してみると、それが探しているツールであることがわかるかもしれません。

https://github.com/wangbin579/tcpcopy

于 2013-06-27T01:21:04.273 に答える