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コンソールに表示されないのはなぜですか?
TCPreplayは、サーバーのトラフィックをAT再生しますが、TCPプロトコルの性質上、実際にはサーバーと「通信」しません。したがって、基本的にサーバーはTCPパケットを受信していますが、再生が適切なハンドシェイクを完了していないため、実際のTCP接続を確立することはありません。これが、netcatにTCPセッションが表示されない理由です。
私の経験では、この種のtcpdumpは分析にのみ役立ちます。コマンド/データのシーケンスを再現することに関心がある場合は、プロトコルに固有のツールを見つける必要があります(私の場合はカスタムクライアントの作成が含まれます)。
httpインタラクションを記録および再生する方法 を参照してください。
tcpreplayから wiki :
サーバーへのトラフィックの送信
問題
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セッションを作成できないことを意味します。