tcpreplay によって送信されたパケットがサーバーに表示されないのはなぜですか?

tcpreplay によって送信されたパケットがサーバーに表示されないのはなぜですか?

pcap ファイルを HTTP サーバーに再生しようとしています。その前に、tcpreplay を正しく使用しているかどうかを手動で確認しようとしています。

特定のポートでリッスンし始めましたnetcat -l 12345。これを「サーバー」と呼びましょう。他のマシンでは、tcpdumpファイル内の特定のポートを宛先とするすべてのトラフィックをキャプチャするために実行しましたdummy.pcap。その後、クライアント マシンで netcat を実行し、「サーバー」に接続していくつかのメッセージを送信します。結果の pcap をチェックしたところtshark、パケットがキャプチャされたことが示されました。

サーバー上で netcat を再度起動し、クライアント上で tcpreplay を起動しました。

tcpreplay -d 5 -i eth0 -t dummy.pcap

しかし、サーバーの netcat コンソールには何も表示されません。「サーバー」で tcpdump を実行してみましたが、パケットが受信されたことが示されます。

なぜパケットが netcat コンソールに表示されないのですか?

答え1

TCPreplay はサーバーでトラフィックを再生しますが、TCP プロトコルの性質上、実際にはサーバーと「通信」しません。つまり、基本的にサーバーは TCP パケットを受信しますが、再生によって適切なハンドシェイクが完了しないため、実際の TCP 接続を確立することはありません。これが、netcat に TCP セッションが表示されない理由です。

私の経験では、この種の tcpdump は分析にのみ役立ち、コマンド/データのシーケンスを再現することに関心がある場合は、プロトコルに固有のツールを見つける必要があります (私の場合は、カスタム クライアントを作成する必要がありました)。

見るhttp インタラクションを記録して再生するにはどうすればいいですか?

tcpreplayからウィキ:

サーバーへのトラフィックの送信

問題

pcap キャプチャがあり、そのトラフィックを別のサーバーで再生したいと考えています。

解決

まず、これは ICMP および UDP トラフィックでのみ機能します。Tcpreplay は、TCP ストリーム内の Syn/Ack 番号を同期しないため、サーバーでの TCP トラフィックの送信をサポートしていません。

ただし、宛先 IP アドレスと MAC アドレスをターゲット サーバーのものと一致するように変更する必要があります。この場合、ターゲット サーバーの IP は 10.10.1.1、MAC アドレスは 00:01:02:03:04:05 であると想定します。

そして彼らのよくある質問:

=== tcpreplay はサーバーへのトラフィックの送信をサポートしていますか? === 「サーバー」がポートをリッスンするデーモン (Unix) またはサービス (Windows) (Web サーバーやメール サーバーが一般的な例) を意味する場合、おそらくサポートしていません。最大の問題は、tcpreplay が TCP などの一般的なプロトコルの状態を理解していないことです。つまり、Syn/Ack を同期して有効な TCP セッションを作成することができません。

関連情報