web-dev-qa-db-ja.com

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コンソールに表示されないのはなぜですか?

4
Nikolai Golub

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セッションを作成できないことを意味します。

2
nvuono