「TrimPCAP」キャプチャしたパケットを指定したサイズにトリミングしてくれるツール

インフラエンジニアにとって、障害解析等でパケットをキャプチャすることはよくあります。

特に通信のセッションに関連する不具合などはパケットをキャプチャして解析しないと、なかなか原因を特定することが難しいです。

ただ問題として、キャプチャしたpcapファイルのサイズがとても大きくてストレージを圧迫してしまうという点です。
特に長時間キャプチャするような場合、それだけでストレージを圧迫してしまうことも考えられます。

そのような場合に便利なツールが、今回紹介する「TrimPCAP」です。

パケット・トリミングの手法はいくつかありますが、一般的な方法はパケットごとに先頭から指定したサイズにトリミングして、ファイルサイズを削減する方法です。

今回紹介するTrimPCAPは、TCPやUDPのセッションごとにセッションの開始から指定したサイズのセッションまでを残し、それ以降のセッションを削除する方式のようです。

この手法を採用した理由として、一般的に各セッションの開始時にHTTPのGET要求などがあり、障害の切り分けには最初のセッションを確認すればよく、それ以降のセッションは解析には不要だという考えに基づいているようです。

インターネット上には「Elephant flow」と呼ばれるサイズの大きなセッションが多いため、この手法を取り入れることでpcapファイルのサイズを大幅に削減できるとのことです。

パケット・トリミング機能は、高価なキャプチャ装置にはありましたが、フリーツールで提供しているのは珍しかったので早速試してみました。

TrimPCAPのインストール

TrimPCAP – Reduces PCAP dataset sizeからTrimPCAP本体をダウンロードします。

動作要件は以下の通りです。

  • Python 2.6 or 2.7
  • トリミング可能なファイル対応は「pcap」および「pcapng」
  • dpktモジュール
  • repoze.lruモジュール

dpktモジュールとrepoze.lruモジュールをインストールします。

pip install dpkt
pip install repoze.lru

早速試してみる

適当にWiresharkでパケットをキャプチャして、pcapファイルで保存します。

~/
❯ ll test.pcap
-rw-r--r--@ 1 itbook  staff   7.6M  1 15 12:08 test.pcap

トリミング前のファイルサイズは7.6Mでした。

セッション開始から100kBでトリミングしてみます。

~/
❯ python trimpcap.py 102400 test.pcap
Trimming capture files to max 102400 bytes per flow.
Dataset reduced by 40.93% = 3248733 bytes

上記サイズでトリミング時間は3秒ぐらい。結果、ファイルサイズを41%削減できたようです。
トリミング後のファイルサイズは次のとおり。

~/
❯ ll test.pcap
-rw-r--r--  1 itbook  staff   4.4M  1 15 12:53 test.pcap

トリミング後のpcapファイルをWiresharkで開いて確認しましたが、エラーもなく開くけましたし、セッションの後半部分のパケットが削除されていることも確認できました。素晴らしい!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

This site uses Akismet to reduce spam. Learn how your comment data is processed.