tcpdumpを使ったパケットキャプチャの基本と実践テクニック

パケットキャプチャは、ネットワークの内部動作を分析するために非常に有用な手法です。この目的のために開発されたツールは数多くありますが、その中でも定番として広く使われているのが「tcpdump」です。本記事では、ネットワークエンジニアやペネトレーションテスターにとって欠かせないこの強力なツールを最大限に活用する方法を、基本から順を追って解説します。
tcpdumpとは?
tcpdumpは、1988年にローレンス・バークレー研究所(Lawrence Berkeley Laboratory)のNetwork Research Groupに所属するコンピュータ科学者たちによって開発・公開されたネットワークパケット解析ツールです。コンピュータが送受信するパケットの内容を表示するために使用され、プロトコルやネットワークインターフェースなど、多彩なオプションを組み合わせることで、目的に合った精度の高いパケットキャプチャが可能になります。
インストール方法
多くのLinuxディストリビューションには、tcpdumpが最初からプリインストールされています。もしお使いのディストリビューションに含まれていなくても、インストールは簡単です。
UbuntuやDebianの場合はaptを使用します。
sudo apt install tcpdump
CentOSではyumを使用します。
sudo yum install tcpdump
Arch Linuxではpacmanを使用します。
sudo pacman -S tcpdump
基本的な使い方
tcpdumpをインストールしたら、まず-hフラグでヘルプを確認してみましょう。
tcpdump -h
これにより、ツールで利用できるフラグの一覧が表示されます。

さらに詳細なマニュアルを読みたい場合は、manコマンドでマニュアルページを参照できます。
man tcpdump

基本的なパケットキャプチャを実行するには、次のように入力します。
tcpdump
コマンドのみを実行してネットワークインターフェースを指定しなかった場合、システム上の利用可能なインターフェースから自動的に選択されます。
ホスト名を解決せず、IPアドレスのみを出力したい場合は、-nフラグを使用します。
tcpdump -n
キャプチャするパケット数を指定したい場合は、-cフラグを使用します。
tcpdump -c [パケット数]
ネットワークインターフェースの指定
-iフラグを使えば、使用するネットワークインターフェースを明示的に指定できます。
tcpdump -i [インターフェース名]
多くのシステムで一般的なインターフェース名はeth0とwlan0です。
tcpdump -i eth0
tcpdump -i wlan0
すべてのインターフェースでデータをキャプチャしたい場合は、「any」オプションを使用します。
tcpdump -i any

ポート・ポート範囲の指定
特定のポート番号を使用する通信だけをキャプチャしたい場合は、次のコマンドを使用します。
tcpdump -i [インターフェース名] port [ポート番号]
例えば、eth0インターフェース上でポート443(HTTPS)のトラフィックをキャプチャしたい場合は、以下のように入力します。
tcpdump -i eth0 port 443
さらに、tcpdumpではポート範囲を指定することも可能です。
tcpdump -i [インターフェース名] portrange [ポート範囲]
ホスト・サブネットの指定
特定のホストやサブネット間で送受信されるパケットだけを対象にしたい場面も多々あります。幸い、tcpdumpではそのような絞り込みも簡単に行えます。
ホストを指定するには、次の形式を使用します。
tcpdump -i [インターフェース名] host [ホスト]
例として、eth0インターフェースで127.0.0.1(自分自身のループバックIPアドレス)をホストとして指定し、トラフィックをキャプチャしてみましょう。
tcpdump -i eth0 host 127.0.0.1

CIDR表記でネットワークサブネットを指定したい場合は、次の形式を使用します。
tcpdump -i [インターフェース名] net [サブネット]
具体例は以下のとおりです。
tcpdump -i eth0 net 10.0.0.0/8
送信元ホストを直接指定することもできます。
tcpdump -i [インターフェース名] src [ホスト]
宛先ホストの指定は次のとおりです。
tcpdump -i [インターフェース名] dst [ホスト]
詳細度(冗長性)の指定
tcpdumpでは、パケットキャプチャの出力の詳細度を指定できます。キャプチャ中に大量の情報に圧倒されたくない場合に非常に便利な機能です。
詳細度には3段階のオプションがあり、-v、-vv、-vvvの各フラグで指定します。
tcpdump -i [インターフェース名] -v
tcpdump -i [インターフェース名] -vv
tcpdump -i [インターフェース名] -vvv

1つ目のオプションが最も簡潔な出力、3つ目のオプションが最も詳細な出力となります。
キャプチャ結果をファイルに保存する
キャプチャしたデータをファイルに保存しておけば、後からじっくり分析や解析を行うことができて非常に便利です。
保存には-wフラグを使用します。
tcpdump -i [インターフェース名] -w [ファイル名]
例えば、キャプチャしたデータを「capture.txt」というファイルに保存するには、次のように入力します。
tcpdump -i eth0 -w capture.txt
よくある質問(FAQ)
1. 「Operation not permitted」エラーが発生しました。どうすれば解決できますか?
tcpdumpを使用しようとした際に、ユーザーが遭遇しがちなエラーが次のものです。

このエラーは、パケットキャプチャを実行するために必要な権限を持っていない場合に表示されます。ほとんどの場合、sudoを使うことで解決できます。実行例は以下のとおりです。
sudo tcpdump -i eth0
2. 利用可能なネットワークインターフェースを確認するには?
tcpdumpには、システム上で利用可能なネットワークインターフェースを一覧表示できる機能が標準で備わっています。
インターフェースを確認するには、-Dフラグを使用します。
tcpdump -D
-
Android版WhatsAppでステッカーを使う方法|Animoji・Bitmoji・Gboardを徹底解説
iOS 13では、Animojiステッカーに関する魅力的な機能が数多く追加されました。Animojiを使えば、自分だけのオリジナルステッカーセットを作成できます。この機能はiPhone X以降で利用可能で、Face IDと連動して動作します。Animojiを使ったライブ動画や録画の作成も可能です。また、対応していない機種でも「Memoji」を利用すれば、自分のアバターを作ることができます。 こうしたAnimojiやMemojiのステッカーは、WhatsAppやメッセージアプリ、Facebookなど複数のプラットフォームで使用できます。iOSデバイス専用のステッカーと思われがちですが、実はAnd
-
スマホのカメラをPCのWebカメラとして使う方法|USB・Wi-Fi接続の手順を解説
ビデオチャットやビデオ通話をあまりしない方なら、専用のWebカメラを持っていないかもしれません。しかし、いざというときに急に必要になることもあります。そんなとき、わざわざ新しいWebカメラを購入する必要はありません。簡単な手順に従えば、スマホのカメラをWebカメラとして活用できます。この記事では、その具体的な方法を詳しく解説します。 スマホをWebカメラとして使う方法 スマホをWebカメラとして使う方法は、主に以下の2つがあります。 USB接続でスマホをWebカメラとして使う方法 AndroidスマホとPCの両方にDroidCamをダウンロードします。 PC(ノートパソコン/デスクトップ)に