dumpcap入門:軽量・高効率なパケットキャプチャツールの使い方を徹底解説 🔧

セキュリティツールネットワーク

Wiresharkファミリーの一員、dumpcapを使いこなそう!

ネットワークのトラブルシューティングやセキュリティ分析において、パケットキャプチャは非常に重要な手法です。多くの人がGUIツールのWiresharkを思い浮かべるかもしれませんが、実はその裏側で活躍している強力なCUIツールがあります。それが「dumpcap」です。

dumpcapは、Wiresharkスイートに含まれるコマンドラインユーティリティで、ネットワークトラフィックのキャプチャに特化しています。GUIを持たないため軽量で、特に長時間のキャプチャリソースが限られた環境での利用に適しています。WiresharkやTShark(WiresharkのCUI版)も内部的にdumpcapを呼び出してキャプチャを行っています。

この記事では、dumpcapの基本的な使い方から、便利なオプション、そして実践的な活用シナリオまで、詳しく解説していきます。これを読めば、あなたもdumpcapを効果的に利用できるようになるでしょう!💪

1. dumpcapとは? 🤔

dumpcapは、Wiresharkプロジェクトによって開発・配布されているネットワークトラフィックダンプツールです。その主な目的は、ライブネットワークからパケットデータをキャプチャし、ファイルに書き出すことです。

Wiresharkとの関係:

  • dumpcapはWiresharkと一緒にインストールされるコンポーネントです。
  • WiresharkやTSharkがパケットキャプチャを行う際の実際のエンジンとして動作しています。
  • WiresharkがGUIでの解析機能を提供するのに対し、dumpcapは純粋なキャプチャ機能に特化しています。

TSharkとの違い:

  • TSharkもCUIツールですが、キャプチャだけでなく、Wiresharkと同等の表示フィルタリングやプロトコル解析機能も持っています。
  • dumpcapは解析機能を持たず、キャプチャとファイル保存に集中しているため、より軽量で高速に動作します。高負荷な環境では、TSharkよりもdumpcapの方がパケットロスが少ない傾向があります。

tcpdumpとの違い:

  • tcpdumpは古くからある定番のパケットキャプチャツールです。dumpcapと同様にCUIで動作します。
  • dumpcapはWiresharkファミリーの一部であり、デフォルトの出力形式としてpcapng (PCAP Next Generation) を使用します(-Pオプションで従来のpcap形式も指定可能)。pcapngはコメントの埋め込みなど、pcapよりも高機能です。
  • フィルタ構文はどちらもlibpcapライブラリのルールに従いますが、利用可能なオプションや機能に違いがあります。例えば、dumpcapのリングバッファ機能(-bオプション)は非常に強力です。
  • パフォーマンスに関しては、状況によってどちらが優れているかは一概には言えませんが、dumpcapはWiresharkとの連携を前提に設計されています。

dumpcapは、特に長時間の連続キャプチャや、GUIが利用できないサーバー環境、リソース消費を最小限に抑えたい場合に最適な選択肢となります。💡

2. 基本的な使い方 🚀

dumpcapの基本的なコマンド構文は以下の通りです。

dumpcap [オプション]

非常にシンプルですね。オプションを指定せずに実行することも可能ですが、通常はいくつかのオプションを指定して使用します。

まず、どのネットワークインターフェースでキャプチャを行うかを知る必要があります。-D オプションを使用すると、利用可能なインターフェースのリストが表示されます。

dumpcap -D

実行すると、以下のような形式でインターフェースのリストが出力されます。(環境によって表示は異なります)

1. eth0 (No description available)
2. wlan0 (802.11)
3. any (Pseudo-device that captures on all interfaces)
4. lo (No description available)
5. docker0 (No description available)

このリストの番号または名前(例: 1 または eth0)を、後述する -i オプションで指定します。

💡 Windows環境では、インターフェース名が \Device\NPF_{...} のような形式で表示されることがあります。その場合も、番号で指定するのが簡単です。

特定のインターフェース(例: eth0、番号1)を指定してキャプチャを開始し、ファイルに保存する最も基本的なコマンドは以下のようになります。

dumpcap -i 1 -w capture.pcapng
  • -i 1: dumpcap -D で確認した1番目のインターフェースを指定します。-i eth0 のように名前で指定することも可能です。
  • -w capture.pcapng: キャプチャしたパケットを指定したファイル名(ここでは capture.pcapng)で保存します。-w オプションを指定しない場合、ランダムな名前のファイルが一時ディレクトリに作成されます。

このコマンドを実行すると、指定したインターフェースでのパケットキャプチャが開始されます。キャプチャを停止するには、Ctrl + C を押します。

デフォルトでは、dumpcapはpcapng形式でファイルを保存します。従来のpcap形式で保存したい場合は、-P オプションを追加します。

dumpcap -i 1 -P -w capture.pcap

❗ 注意: 権限について

パケットキャプチャを行うには、通常、管理者権限(root権限やAdministrator権限)が必要です。Linux環境では sudo dumpcap ... のように実行するか、ユーザーを wireshark グループに追加するなどの設定が必要になる場合があります。Windows環境では、管理者としてコマンドプロンプトやPowerShellを起動する必要があります。

3. 主要なオプション解説 ⚙️

dumpcapには多くのオプションがありますが、ここでは特によく使われる重要なものを解説します。

オプション 説明
-i <interface> キャプチャ対象のネットワークインターフェースを指定します。番号または名前で指定できます。-D オプションで確認できます。複数回指定することで、複数のインターフェースを同時にキャプチャできます。-i any で全てのインターフェースをキャプチャすることも可能ですが、プロミスキャスモードは利用できません。 -i 1, -i eth0, -i any, -i 1 -i 2
-w <outfile> キャプチャしたパケットを保存するファイル名を指定します。指定しない場合は一時ファイルが作成されます。リングバッファ(-b)使用時は、このファイル名をベースに連番ファイルが生成されます。 -w trace.pcapng
-f <capture filter> キャプチャフィルタを指定します。libpcapのフィルタ構文(tcpdumpと同じ構文)を使用します。指定した条件に一致するパケットのみがキャプチャされます。これにより、不要なパケットを除外し、ファイルサイズを削減したり、目的のパケットを見つけやすくしたりできます。 -f "tcp port 80", -f "host 192.168.1.100", -f "net 10.0.0.0/8 and not port 22"
-s <snaplen> スナップショット長(snaplen)を指定します。各パケットの先頭から指定したバイト数だけをキャプチャします。0 を指定すると、デフォルトの最大値(通常65535バイト以上)が使用され、パケット全体がキャプチャされます。ファイルサイズを抑えたい場合や、ヘッダ情報だけで十分な場合に設定します(例: -s 128)。 -s 0, -s 128
-p
--no-promiscuous-mode
プロミスキャスモードを無効にします。通常、dumpcapはインターフェースをプロミスキャスモード(自身宛でないパケットも受信するモード)で動作させますが、このオプションで無効化できます。 -p
-B <buffer size>
--buffer-size <buffer size>
キャプチャバッファのサイズをメガバイト(MiB)単位で指定します。デフォルトは2MiBです。パケットドロップが発生する場合に、この値を増やすと改善することがあります。ただし、システムやインターフェースによって設定可能な最大値は異なります。 -B 64 (64MiB)
-P 出力ファイル形式として、従来のpcap形式を使用します。デフォルトはpcapng形式です。 -P
-q 静粛(Quiet)モード。キャプチャ中のパケットカウントなどの標準エラー出力を抑制します。リングバッファ使用時など、バックグラウンドで長時間実行する場合に便利です。 -q
-v
--version
dumpcapのバージョン情報を表示して終了します。 -v
-h
--help
ヘルプメッセージ(利用可能なオプション一覧)を表示して終了します。 -h

-a オプションを使うと、特定の条件を満たしたときに自動的にキャプチャを停止させることができます。書式は -a <条件>:<値> です。

条件 説明
duration:<秒数> 指定した秒数が経過したら停止します。小数も指定可能です。 -a duration:3600 (1時間)
filesize:<キロバイト> キャプチャファイルのサイズが指定したキロバイト(kB)に達したら停止します。リングバッファ(-b)と併用すると、ファイルサイズに達した時点で次のファイルに切り替わります(キャプチャは停止しません)。最大2TBまで指定可能です。 -a filesize:102400 (100MB)
files:<ファイル数> 指定した数のファイルを作成したら停止します。リングバッファ(-b)と併用する場合に意味を持ちます。 -a files:10 (10個のファイルを作成したら停止)
packets:<パケット数> 指定した数のパケットをキャプチャしたら停止します。-c <パケット数> と同じです。 -a packets:10000, -c 10000

例: 10分間(600秒)キャプチャして自動停止

dumpcap -i 1 -w capture.pcapng -a duration:600

-b オプションは、dumpcapの非常に強力な機能である「リングバッファ」を設定します。これにより、ディスク容量を使い果たさずに長期間のキャプチャが可能になります。-b <条件>:<値> の形式で複数指定して使用します。

条件 説明
duration:<秒数> 指定した秒数ごとにファイルを切り替えます。 -b duration:3600 (1時間ごと)
filesize:<キロバイト> キャプチャファイルのサイズが指定したキロバイト(kB)に達したらファイルを切り替えます。 -b filesize:102400 (100MBごと)
files:<ファイル数> 作成するファイルの最大数を指定します。この数に達すると、最も古いファイルが削除され、新しいファイルが作成される「リングバッファ」として動作します。 -b files:24 (最大24ファイル)
interval:<秒数> 指定した秒数の倍数になる時刻(絶対時刻)でファイルを切り替えます。例えば interval:3600 を指定すると、毎時0分0秒にファイルが切り替わります。 -b interval:3600
packets:<パケット数> 指定した数のパケットをキャプチャしたらファイルを切り替えます。 -b packets:1000000
printname:<ファイルパス> ファイルが書き込まれるたびに、そのファイル名を指定したファイル(または `stdout`, `stderr`)に出力します。 -b printname:log.txt

リングバッファの例: 1ファイルあたり100MB(102400kB)で、最大24個のファイルを作成するリングバッファを設定します。25個目のファイルが作成されるタイミングで、最も古いファイル(1番目のファイル)が削除されます。

dumpcap -i 1 -w /var/log/captures/trace.pcapng -b filesize:102400 -b files:24 -q
  • -w /var/log/captures/trace.pcapng: 保存先ディレクトリとベースファイル名を指定。
  • -b filesize:102400: 1ファイルあたり100MB。
  • -b files:24: 最大24ファイル。合計で約2.4GBのディスクスペースを使用します。
  • -q: 実行中のメッセージを抑制します。

生成されるファイル名は、<ベース名>_<連番5桁>_<年月日時分秒>.pcapng のようになります(例: trace_00001_20250330105100.pcapng)。

✅ リングバッファは、断続的に発生する問題の原因調査など、長時間の監視が必要な場合に非常に役立ちます。ディスク容量を気にすることなく、常に直近のトラフィックを記録し続けることができます。

4. ユースケース・事例 💡

dumpcapはその軽量さと柔軟性から、様々なシナリオで活用されています。

前述のリングバッファ機能(-bオプション)を使えば、サーバーやネットワーク機器のトラフィックを数日、数週間、あるいは数ヶ月にわたって継続的にキャプチャすることが可能です。これは、再現性の低い intermittent な(断続的に発生する)ネットワーク問題のトラブルシューティングに非常に有効です。

例えば、特定の時間帯にのみ発生するアプリケーションの遅延や、稀に起こる通信エラーの原因を特定するために、常時キャプチャを実行しておき、問題発生後に該当時間帯のファイルを確認するといった運用が可能です。

# 例: eth1インターフェースで、1ファイル1GB、最大100ファイル(合計100GB)のリングバッファを設定し、バックグラウンドで実行
sudo dumpcap -i eth1 -w /data/captures/server_traffic.pcapng -b filesize:1048576 -b files:100 -q &

2015年頃の解説動画でも、dumpcapが数ヶ月間連続で動作し続けた事例が紹介されており、その安定性が示されています。

GUIが利用できないリモートサーバー上で直接パケットキャプチャを実行する必要がある場合、dumpcapは最適なツールです。SSHでサーバーにログインし、dumpcapコマンドを実行してキャプチャファイルを作成、その後SCPなどでローカルマシンにファイルを転送してWiresharkで解析する、という流れが一般的です。

# リモートサーバーにSSHでログイン
ssh user@remote-server

# リモートサーバー上でdumpcapを実行(例: 5分間キャプチャ)
sudo dumpcap -i eth0 -w /tmp/remote_capture.pcapng -a duration:300

# キャプチャ完了後、ローカルマシンにファイルを転送
exit
scp user@remote-server:/tmp/remote_capture.pcapng .

# ローカルのWiresharkで解析
wireshark remote_capture.pcapng

また、rpcapd(Remote Packet Capture Daemon)プロトコルを利用して、Wiresharkやdumpcapからリモートインターフェースを直接キャプチャすることも可能ですが、セットアップがやや複雑になります。

キャプチャフィルタ(-fオプション)を駆使することで、調査対象のトラフィックのみを効率的にキャプチャできます。これにより、キャプチャファイルのサイズを大幅に削減し、解析時間を短縮できます。

  • 特定のホストとの通信のみキャプチャ:
    dumpcap -i eth0 -w host_101.pcapng -f "host 192.168.1.101"
  • 特定のポート(例: HTTPとHTTPS)のみキャプチャ:
    dumpcap -i eth0 -w web_traffic.pcapng -f "tcp port 80 or tcp port 443"
  • 特定のサブネット間の通信を除外してキャプチャ:
    dumpcap -i eth0 -w external_traffic.pcapng -f "not (net 192.168.0.0/16 and net 192.168.0.0/16)"

フィルタ構文は非常に強力で、複雑な条件を指定することも可能です。詳細は man pcap-filter を参照してください。

dumpcapはCUIツールであるため、シェルスクリプトや他の監視ツールと簡単に連携させることができます。例えば、特定のイベント(高負荷状態、エラーログの検出など)をトリガーにしてdumpcapによるパケットキャプチャを開始し、一定時間後に自動停止させるといった自動化が可能です。

#!/bin/bash

# エラーログを監視し、特定の文字列が見つかったらキャプチャを開始する例
tail -F /var/log/app.log | grep --line-buffered "CRITICAL ERROR" | while read ; do
  echo "エラー検出: パケットキャプチャを開始します ($(date))"
  TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
  sudo dumpcap -i eth0 -w "/captures/error_${TIMESTAMP}.pcapng" -a duration:120 -q
  echo "パケットキャプチャを終了しました ($(date))"
done

5. 注意点・ベストプラクティス ⚠️

dumpcapを効果的かつ安全に使用するために、以下の点に注意しましょう。

dumpcapは軽量なツールですが、それでもパケットキャプチャはシステムリソース(CPU、メモリ、ディスクI/O)を消費します。特に高トラフィックなネットワークでキャプチャを行う場合、以下のような影響が出る可能性があります。

  • CPU負荷の上昇: パケットのコピーやフィルタリング処理により、CPU使用率が上昇します。
  • メモリ使用量: キャプチャバッファ(-Bオプション)のサイズに応じてメモリを消費します。
  • ディスクI/O負荷: キャプチャしたデータをファイルに書き込むため、ディスクへの書き込み負荷が発生します。リングバッファで頻繁にファイルを切り替える場合や、高スループット環境では特に顕著になります。
  • レイテンシ増加・パケットロス: 極端に負荷が高い場合、他のネットワーク通信に遅延が生じたり、カーネルレベルでのパケットドロップが発生する可能性もゼロではありません。

対策:

  • キャプチャ対象のシステムのパフォーマンスを事前に評価し、影響が許容範囲内か確認する。
  • 可能であれば、キャプチャ専用のディスクや、性能の高いストレージを使用する。
  • 不要なトラフィックをキャプチャしないよう、フィルタ(-f)を適切に設定する。
  • スナップショット長(-s)を設定し、キャプチャするデータ量を削減する。
  • キャプチャバッファ(-B)を調整する(むやみに大きくしすぎない)。
  • 影響が懸念される場合は、ネットワークタップやスイッチのミラーポートを使用し、本番系システムとは別のマシンでキャプチャを行う。

2015年の情報では、CPU負荷は最小限で測定できないレベルかもしれないが、メモリ(バッファサイズによる)と特にディスクI/Oへの影響が大きいとされています。重要なディスクには出力しないように注意が必要です。

フィルタなしでキャプチャを行うと、特に高速なネットワークでは、あっという間にディスク容量が消費されます。

対策:

  • リングバッファ(-b filesize, -b files)を適切に設定し、使用するディスク容量の上限を決める。
  • キャプチャフィルタ(-f)やスナップショット長(-s)を活用して、保存するデータ量を削減する。
  • 定期的に不要になったキャプチャファイルを削除する運用を検討する。
  • 保存先のディスク空き容量を監視する。
❗ ファイルサイズの上限(-b filesize-a filesize)はキロバイト(kB)単位で指定することに注意してください。メガバイト(MB)やギガバイト(GB)で指定したい場合は、適切に換算する必要があります(例: 100MB = 102400kB)。

前述の通り、キャプチャフィルタ(-f)はパフォーマンスとディスク容量の両面で非常に重要です。調査に必要なトラフィックだけをキャプチャするように、できるだけ具体的なフィルタを設定することを推奨します。

一方で、Wiresharkの「表示フィルタ」とは異なり、dumpcapの「キャプチャフィルタ」は、フィルタに一致しないパケットはファイルに保存されません。フィルタの設定を間違えると、必要な情報が取得できない可能性があるため、十分にテストしてから本番環境で使用しましょう。

# フィルタ構文のテスト(キャプチャは行わず、フィルタのコンパイル結果を表示)
dumpcap -d -f "tcp port 80 or (udp port 53 and host 8.8.8.8)"

パケットキャプチャには高い権限が必要です。不用意にroot権限で常時dumpcapを実行することはセキュリティリスクを高める可能性があります。

対策:

  • Linuxでは、setcap コマンドで dumpcap バイナリに限定的な権限(cap_net_raw,cap_net_admin)を付与し、専用のユーザーグループ(例: wireshark)のみが実行できるように設定する方法が推奨されます(多くのディストリビューションでは、Wiresharkパッケージのインストール時に自動設定されます)。
  • 必要な場合にのみ、sudo などで一時的に権限昇格して実行する。
  • スクリプトで実行する場合は、必要最小限の権限で動作させるように注意する。

デフォルトのpcapng形式は、コメントの追加や複数インターフェースの情報を同一ファイルに格納できるなど高機能ですが、古いツールでは扱えない場合があります。互換性が必要な場合は -P オプションでpcap形式を指定しましょう。

6. まとめ 🎉

dumpcapは、Wiresharkスイートの一部として提供される、軽量かつ高効率なコマンドラインのパケットキャプチャツールです。

  • 軽量動作: GUIを持たず、キャプチャ機能に特化しているため、リソース消費を抑えられます。
  • 長時間キャプチャ: 強力なリングバッファ機能により、ディスク容量を管理しながら長期間の連続キャプチャが可能です。
  • CUI操作: リモートサーバーやスクリプトからの利用に適しています。
  • 柔軟なオプション: キャプチャフィルタ、自動停止、ファイル分割など、多彩なオプションで様々なニーズに対応できます。

Wiresharkの陰に隠れがちなdumpcapですが、その能力を理解し活用することで、ネットワーク分析やトラブルシューティングの効率を大幅に向上させることができます。特に、サーバー環境での常時監視や、断続的に発生する問題の調査においては、なくてはならないツールと言えるでしょう。

この記事で紹介した基本的な使い方やオプションを参考に、ぜひdumpcapを試してみてください。きっとあなたのネットワーク管理業務の強力な助けとなるはずです!😊

参考情報

コメント

タイトルとURLをコピーしました