テスト用に TCP ストリームの片側を記録および再生するためのツールを探しています。ファイアウォールなどをテストするために、TCP ストリーム全体 (サーバーとクライアントの両方) を記録するツールを目にしますが、私が探しているのは、クライアントから送信されたトラフィックのみを (タイミング情報と共に) 記録し、再送信するツールです。テスト用のサーバーに。
5 に答える
TCP が再送信、シーケンス番号、SACK
およびウィンドウ処理を処理する方法により、これは想像以上に難しい作業になる可能性があります。
通常、パケットの再生にはtcpreplayを使用します。ただし、TCP シーケンス番号の同期はサポートしていません。双方向の TCP ストリームが必要なため (これには seq 番号付けの同期が必要です)、次のオプションのいずれかを使用します。
これが非常にインタラクティブなクライアント/サーバー プロトコル
scapy
である場合、ストリームの TCP コンテンツを取り除き、タイミングとインタラクティブ性を解析するために使用できます。次に、この情報を使用して、サーバーへの新しい TCP ソケットを開き、そのデータを新しい TCP ソケットに逆シリアル化します。scapy
TCP 再送信とウィンドウ ダイナミクスに遭遇すると、元のストリームを解析するのが難しくなる可能性があります。バイトを新しい TCP ソケットに書き込む場合、自分でシーケンス番号を処理する必要はありません... OS が処理します。これが単純なストリームであり、タイミングなしで実行できる (またはタイミング情報を手動で挿入したい)場合は、wireshark を使用して、解析を気にせずに TCP ストリームから生のバイトを取得できます
scapy
。生のバイトを取得したら、これらのバイトを新しい TCP ソケットに書き込みます (必要に応じて対話性を考慮してください)。バイトを新しい TCP ソケットに書き込む場合、自分でシーケンス番号を処理する必要はありません... OS が処理します。ストリームが厳密にテキスト (html や xml ではない) コマンド (telnet セッションなど) である場合は、前述の解析よりもExpectのようなソリューションの方が簡単な場合があります。このソリューションでは、コードから直接 TCP ソケットを開かず、expect を使用し
spawn
て telnet (またはその他の) セッションを実行し、テキスト コマンドをsend
/で再生しますexpect
。ライブラリ/基盤となるOSがseq番号付けを処理することを期待しています。Selenium
Web サービスをテストしている場合は、またはを使用してリンクをクリックする実際の Web クライアントをシミュレートする方がはるかに簡単だと思いますSplinter
。あなたの http ライブラリ / 基礎となる OS は、新しいストリームでの seq 番号付けを処理します。
はい、そのようなツールを実装するのは難しい作業です。私は 2 年前にこの種のツールの実装を開始し、ツールは現在成熟しています。試してみると、それが探しているツールであることがわかるかもしれません。