【Linux】tcpdumpの使い方|パケットキャプチャの基本と実践

【Linux】tcpdumpの使い方|パケットキャプチャの基本と実践

PR Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:3,173

Linuxでのネットワークトラブル調査に欠かせないtcpdumpコマンドの使い方を徹底解説。インターフェースの指定、ポート番号やホストによるフィルタリング、ファイル保存と読み込み方法まで、インフラエンジニア必須の実践的なパケットキャプチャ手順を分かりやすく紹介します。

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

初心者向け

わかばちゃんと学ぶ サーバー監視

難易度
実用性
読みやすさ

マンガと図解が中心で圧倒的に読みやすい。負荷調査の手法がスッと理解できるようになります。

新しいLinuxの教科書 第2版

難易度
実用性
読みやすさ

一生モノの基礎知識が身につく定番書です。

ゼロからわかる Linuxコマンド200本ノック―基礎知識と頻出コマンドを無理なく記憶に焼きつけよう!

難易度
実用性
習得度

アウトプット重視で記憶に定着しやすい。反復練習でLinux操作が自由自在になります。

エンジニア1年生のための世界一わかりやすいLinuxコマンドの教科書

難易度
実用性
読みやすさ

ネットワークの通信障害が発生したとき、「パケットが実際にサーバーまで届いているのか」「意図した通りに応答が返っているのか」分からずに困った経験はないでしょうか。GUIGUI [ジーユーアイ / グーイ]Graphical User Interface。グラフィカルな操作画面の解析ツールが使えないヘッドレスなLinuxLinux [リナックス / ライナックス]オープンソースのOSカーネル環境において、広く利用されている代表的なパケットキャプチャツールである tcpdump コマンドの知識は、インフラエンジニアにとって重要なスキルです。

この記事を読むことで、tcpdump の基本的な使い方から、特定のIPIP [アイピー]Internet Protocol。インターネット通信の基本プロトコルやポートに絞ったフィルタリング、さらにはファイルへの保存と後からの解析手法まで一通りマスターできるようになります。迅速なトラブルシューティングの初手として、ぜひ参考にしてください。

確認した環境

本記事の検証およびコマンド実行は、以下の環境を前提としています。

tcpdumpコマンドとは?

tcpdumpの基本的な役割とメリット

tcpdump は、ネットワークインターフェースを通過するパケットをリアルタイムでキャプチャし、その内容を表示・保存するためのコマンドラインツールです。

WiresharkなどのGUIツールとは異なり、コマンドライン(CLICLI [シーエルアイ]Command Line Interface。コマンドで操作するインターフェース)で操作できるため、SSHSSH [エスエスエイチ]Secure Shell。暗号化されたリモート接続プロトコルで接続したクラウド上のLinuxサーバーや、適切な権限が与えられたコンテナ環境でも利用できるというメリットがあります。ネットワークの疎通確認や、アプリケーションが送受信しているリクエスト・レスポンスの内容を確認したい場面で役立ちます。

インストール方法(Ubuntu / AlmaLinux)

環境によっては tcpdump が最初からインストールされていない場合があります。その際は、各ディストリビューションのパッケージマネージャーを使用してインストールしてください。

Ubuntu / DebianDebian [デビアン]コミュニティ主導で開発される安定性の高いLinuxディストリビューション系の場合:

Terminal window
sudo apt update
sudo apt install tcpdump

AlmaLinux / RHEL系の場合:

Terminal window
sudo dnf install tcpdump

インストール完了後、バージョンを確認して正しく導入されていることを確かめます。

Terminal window
tcpdump --version

tcpdumpの基本構文とオプション

tcpdump の基本構文は以下の通りです。

Terminal window
sudo tcpdump [オプション] [フィルター式]

実務でよく使われる重要なオプションをいくつか見ていきましょう。

ネットワークインターフェースを指定する (-i)

サーバーには通常、複数のネットワークインターフェース(eth0, ens33, lo など)が存在します。-i オプションを指定しない場合、tcpdumpは通常、設定済みでUP状態になっているインターフェースのうち、最も番号の小さいインターフェースを選択します(ループバックインターフェースは除外されます)。意図した通信を正確に捉えるために明示的に指定することを推奨します。

Terminal window
sudo tcpdump -i eth0

Linuxでは any という特殊なインターフェースを指定することで、全インターフェースのパケットをキャプチャすることも可能です(ただしプロミスキャスモードにならないなどの違いがあります)。

Terminal window
sudo tcpdump -nn -i any

また、-D オプションを使うと、キャプチャ可能なインターフェースの一覧を確認でき、「eth0なのかens160なのか分からない」といった場合に非常に役立ちます。

Terminal window
sudo tcpdump -D

キャプチャするパケット数を制限する (-c)

オプションなしで tcpdump を実行すると、手動で停止(Ctrl + C)するまで無限にパケットをキャプチャし続け、流れるログの量に圧倒されてしまいます。-c オプションを使うことで、指定したパケット数に達した時点で自動的にキャプチャを終了させることができます。

Terminal window
sudo tcpdump -c 10

ホスト名やポート番号を名前解決しない (-nn)

デフォルトの tcpdump は、IPアドレスをホスト名に、ポート番号をサービス名(例: 80 -> httpHTTP [エイチティーティーピー]HyperText Transfer Protocol。Webでのデータ転送プロトコル)に逆引き変換しようとします。名前解決が発生すると表示に時間がかかったり、調査対象とは関係のない名前解決処理が発生したりする可能性があります。 そのため、ネットワーク障害の調査では、名前解決による遅延を避ける目的で、名前解決を無効にする -nn を付けることが一般的です。

Terminal window
sudo tcpdump -nn

実践!よく使うキャプチャパターン

基本オプションを覚えたら、次は特定の通信だけを効率よく捉えるためのフィルタリング方法を実践します。

特定ポートの通信をキャプチャする

特定のポート(例えばWebサーバーの 80ポート や SSHの 22ポート など)に絞るには、port フィルタを使用します。

Terminal window
sudo tcpdump -nn -i eth0 port 80

送信元、または宛先のどちらかに指定のポートが含まれるパケットがキャプチャされます。TCPTCP [ティーシーピー]Transmission Control Protocol。信頼性の高い通信プロトコル通信のみに限定したい場合は tcp port 80 のようにプロトコルを指定することもできます。

Terminal window
sudo tcpdump -nn -i eth0 tcp port 80

特定IPアドレスの通信を監視する

特定のサーバーやクライアントとの通信だけを調査したい場合は、host フィルタを使用します。

Terminal window
sudo tcpdump -nn -i eth0 host 192.168.1.50

特定のIPからの通信、あるいは特定のIP宛ての通信のみに絞り込むことができます。また、送信元(srcsrc [ソース / エスアールシー]sourceの略。画像やスクリプトなどの読み込み元ファイルパスを指定する属性)や宛先(dst)をさらに厳密に指定することも可能です。

Terminal window
# 送信元が 192.168.1.50 のパケットのみ
sudo tcpdump -nn -i eth0 src host 192.168.1.50

平文HTTP通信の内容を確認する

Webアプリケーションのトラブルシューティングでは、HTTPのやり取りを確認したいケースが多くあります。-A オプションを使用すると、リンク層ヘッダーを除いたパケットデータをASCII形式で表示できます。HTTPなどの平文プロトコルの内容を確認するときに便利です。

Terminal window
sudo tcpdump -nn -i eth0 -A port 80

注意点として、HTTPSHTTPS [エイチティーティーピーエス]HTTP Secure。暗号化されたHTTPではTLSTLS [ティーエルエス]Transport Layer Security。SSLの後継となる安全性の高い暗号化通信プロトコルによってHTTPの内容が暗号化されているため、tcpdumpでキャプチャしただけでは、通常、HTTPのリクエストやレスポンス本文をそのまま読むことはできません。一方、接続先IPアドレスやポート番号、TCP/TLSのハンドシェイクなど、暗号化されていない情報や解析可能なメタデータは確認できます。

ファイルへの保存と読み込み方法

本番環境で発生している単発の不具合や、リアルタイムに画面を見ている余裕がない状況では、キャプチャデータを一度ファイルに保存し、後からじっくり解析するのが定石です。

キャプチャ結果をファイルに保存する (-w)

-w オプションを使用すると、パケットデータを人間が読めるテキストではなく、バイナリ形式のpcapファイルとして保存できます。

Terminal window
sudo tcpdump -nn -i eth0 -w capture_result.pcap port 80

このコマンドを実行し、対象の通信が発生したら Ctrl + C で停止します。

保存したファイルを読み込んで解析する (-r)

保存した pcap ファイルは、後から -r オプションを使って何度でも読み込み、表示・再フィルタリングを行うことができます。

Terminal window
sudo tcpdump -nn -r capture_result.pcap

さらに、保存済みのファイルに対して後から追加のフィルターを適用することも可能です。

Terminal window
sudo tcpdump -nn -r capture_result.pcap host 192.168.1.10

これにより、本番環境への負荷やリアルタイムの流速を気にせず、手元や検証環境でじっくりとパケット解析を進めることができます。

まとめ:ネットワーク調査の初手として使いこなそう

今回は、Linuxにおけるネットワークトラブル調査で重要なコマンドである tcpdump の使い方について解説しました。

記事のポイントをまとめます:

  • 基本構文とオプション: -i でインターフェースを、-c で件数を、-nn で名前解決無効化を指定する。
  • フィルタリング: port や host を活用することで、ノイズを排除して目的の通信だけに絞り込める。
  • ファイル保存・読み込み: -w で pcap ファイルに保存し、-r で後からオフライン解析を行える。

ネットワーク障害や通信不良に直面した際、迷わず tcpdump を使ってパケットの流れる様子を確認できるよう、日頃からコマンドの組み合わせに慣れておきましょう。


以上で本記事の解説を終わります。
よいITライフを!
ITナレッジライフ 運営者
この記事を書いた人

Z (ITナレッジライフ)

現役のITエンジニア。Linux、プログラミング、IT用語など、日々の業務で得た「痒いところに手が届く」技術情報を発信しています。

プロフィールと編集ポリシーを見る →

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

人気記事


記事を評価

Thanks!
目次
Scroll to Top