
キャプチャしたネットワークトラフィックを任意の速度で編集・再生 — *NIX および Windows 向けの pcap ツールスイート。
Tcpreplay は、[tcpdump] や [Wireshark] などのツールで事前にキャプチャしたネットワークトラフィックを編集および再生するための、UNIX(および [Cygwin] 上の Windows)向けの [GPLv3] ライセンスユーティリティ群です。トラフィックをクライアントまたはサーバーとして分類し、レイヤー2/3/4 ヘッダーを書き換え、スイッチ、ルーター、ファイアウォール、NIDS、IPS を経由してネットワーク上に再生します。その速度はごく少量のトラフィックからワイヤーレートまで対応します。Tcpreplay はシングル NIC モードとデュアル NIC モードの両方をサポートしており、スニッフィングデバイスとインラインデバイスの両方をテストできます。
Tcpreplay は、多数のファイアウォール、IDS、IPS、NetFlow などのネットワークベンダー、企業、大学、研究所、オープンソースプロジェクトで使用されています。あなたの組織で Tcpreplay を使用している場合は、組織名と用途をお知らせください。重要な機能の優先順位付けを続けることができます。
バージョン 4.0 以降、Tcpreplay は [IP Flow][flow]/[NetFlow] アプライアンスのテストにも特化しています。正確な高速再生タイミングと結果レポート、Flows Per Second (fps) 統計、フロー製品のタイムアウト設定をチューニングするためのフロー期限切れ分析を提供し、pcap ファイル内のフローサイズに応じて毎秒数十万フローまで対応します。
📖 完全なドキュメントは https://tcpreplay.appneta.com にあります — はじめにガイド、各ツールのページ、ハウツーレシピ、スイートの背景にある概念、man ページ、FAQ を掲載しています。この README はクイックツアーであり、サイトがリファレンスです。
tcpreplay-edit)、IP アドレスをランダム化したりできます(tcpreplay)tcpreplay はレイヤー2 にとどまります)完全なリリース履歴は CHANGELOG を参照してください。
最新の リリース tarball (SourceForge にもミラーあり)を ダウンロードし、次に:
tar xf tcpreplay-*.tar.xz && cd tcpreplay-*
./configure && make && sudo make install
リリース tarball には生成済みの CLI パーサーと man ページが同梱されているため、C コンパイラと libpcap 以外は不要です。git チェックアウトから作業する場合や、CMake、netmap、AF_XDP、io_uring のサポートが必要な場合に限り、後述のソースからのビルドを参照してください。
プラットフォーム固有のより詳細な手順は、tarball に含まれる INSTALL ファイルに記載されています(ここの docs/INSTALL と同じ内容です)。
git チェックアウトからのビルドでは、*_opts.def ファイルから CLI オプションのパーサーと man ページを生成するために python3 と asciidoctor(いずれかのビルドシステム)が必要です。これは 4.6 でこの目的のために GNU AutoGen に取って代わりました(AutoGen は EOL ですが、これらは違います)。AutoGen 自体は、1 つの内部ヘッダー(src/tcpedit/tcpedit_stub.h)のためにのみ依然として必要です — scripts/autoopts/README.md を参照してください。リリース tarball をビルドする場合は、これらはすでに生成済みで同梱されているため、いずれも不要です。
./autogen.sh # only needed once, from a git checkout
./configure
make
sudo make install
4.6 以降、このスイートは CMake(3.16 以上)でもビルドできます — Tcpreplay をコンパイルする推奨かつ主要な方法です。 Autotools も引き続き提供され、リリース tarball に使用されていますが、最終的には廃止される予定のため、新しいスクリプトやパッケージングは CMake を対象にしてください。
cmake -B build
cmake --build build
sudo cmake --install build
./configure の各フラグには CMake の同等のものがあります — CMakeLists.txt の冒頭にある表を参照してください。いくつか例を挙げます:
# debug build with support for the -d option
cmake -B build -DENABLE_DEBUG=ON
# AddressSanitizer or ThreadSanitizer build
cmake -B build -DENABLE_ASAN=ON
cmake -B build -DENABLE_TSAN=ON
# custom libpcap install, static linking, custom tcpdump path
cmake -B build -DWITH_LIBPCAP=/usr/local/opt/libpcap \
-DENABLE_STATIC_LINK=ON -DWITH_TCPDUMP=/usr/sbin/tcpdump
# force a specific packet injection method
cmake -B build -DFORCE_INJECT_PCAP_SENDPACKET=ON
# several configurations side by side
cmake -B build-debug -DENABLE_DEBUG=ON
cmake -B build-release
cmake --build build --target manpages で man ページを再生成します
(python3 + asciidoctor が必要)。通常の cmake --build build では man ページには一切触れません。
CMake Tools 拡張機能を使っている VS Code ユーザーは、リポジトリのフォルダを開いて
プロンプトが表示されたら configure preset を選択するだけで済みます。
デフォルトのソケットパスで速度が足りない場合、Tcpreplay にはパケットを NIC に直接送り込むためのオーバーヘッドの低い方法が 3 つあります。おおよそ 次の順序で試してください — io_uring が最もセットアップが簡単で、netmap が最も手間がかかります:
liburing-dev が必要 — パッチ適用済みドライバは不要)liburing-dev がインストールされ、io_uring をサポートするカーネルを備えた Linux システムで検出されます。
パケットは引き続き通常の PF_PACKET raw ソケットを通じて送信されますが、送信は
io_uring キューを通じて非同期に投入されるため、パケットごとの
システムコールオーバーヘッドが削減されます。
sudo apt-get install liburing-dev
cmake -B build && cmake --build build && sudo cmake --install build
sudo tcpreplay -i eth0 --io-uring test.pcap
libxdp-dev/libbpf-dev + eBPF対応ドライバが必要)libxdp-dev と libbpf-dev がインストールされた Linux システムで検出されます。選択時(--xdp)はカーネルのネットワークスタックをバイパスし、eBPF 対応ドライバを通じてパケットを直接送信します — ドライバにパッチを当てることなく、市販のアダプタでフルラインレートを実現し、商用トラフィックジェネレータに匹敵します。
sudo apt-get install libxdp-dev libbpf-dev
cmake -B build && cmake --build build && sudo cmake --install build
sudo tcpreplay -i eth0 --xdp test.pcap
[netmap] はリプレイ中、ネットワークドライバをバイパスし、 NIC の TX バッファに直接書き込みます。これは 3 つの選択肢の中で最も侵襲的です — 有効な間はそのインターフェース上のネットワークスタックが停止するため、 SSH で接続しているインターフェースではテストしないでください — ただし、 対応ハードウェアではスループットの上限が最も高くなります。