tcpdumpを使用してパケットキャプチャを行う方法

パケットをキャプチャすることは、ネットワークの内部動作を分析する非常に有用な方法です。この目的のために開発されたさまざまなツールがあります。その中の1つがtcpdumpです。ここでは、ネットワークエンジニアやペネトレーションテスターにとって、この優れたツールを最高に活用する方法を紹介します。
目次
- tcpdumpとは?
- インストール
- 基本
- ネットワークインターフェースの指定
- ポート/ポート範囲の指定
- ホストまたはサブネットの指定
- 冗長性の指定
- キャプチャをファイルに保存
- よくある質問
合わせて読む: Tor vs. VPN: どちらが優れているのか?
tcpdumpとは?
tcpdumpは、1988年にローレンス・バークレー研究所のコンピュータ科学者チームによって開発・リリースされたネットワークパケットアナライザーツールです。コンピュータが送受信するパケットの内容を表示するために使用されます。このユーティリティは、パケットキャプチャをより特定的かつ焦点を絞って行えるようにするさまざまなオプションを備えています。これらのオプションのいくつかには、異なるネットワークプロトコルやネットワークインターフェースが含まれています。
インストール
多くのLinuxディストリビューションには、ユーティリティが箱から出したそのままの状態でインストールされています。しかし、選択したディストリビューションにインストールされていない場合でも、インストールは幸運にも迅速で簡単です。
例えば、UbuntuやDebianを使用している場合、aptを使用してインストールできます。
sudo apt install tcpdumpCentOSでは、同じくyumを使用して行います。
sudo yum install tcpdumpArch Linuxでは、pacmanを使用して、
sudo pacman -S tcpdump合わせて読む: オニオンルーティングとは?プライバシーを取り戻す方法
基本
tcpdumpがインストールされたら、-hフラグを使用してマニュアルを確認できます。
tcpdump -hこれにより、ツールを使用する際に利用できるフラグのリストが表示されます。

より包括的で詳細なマニュアルを見たい場合は、manコマンドを使用してマニュアルページを表示できます。
man tcpdump
基本的なパケットキャプチャを実行するには、次のように入力します。
tcpdumpコマンドを単独で使用し、ネットワークインターフェースを指定しない場合、ツールはシステム上の利用可能なインターフェースの1つを選択します。
tcpdumpがホスト名を解決せず、IPアドレスのみを出力したい場合は、-nフラグを使用します。
tcpdump -nキャプチャするパケットの数を指定したい場合は、-cフラグを使用します。
tcpdump -c[キャプチャするパケットの数]ネットワークインターフェースの指定
-iフラグを使用して、選択したネットワークインターフェースを指定できます。
tcpdump -i[インターフェース]ほとんどのシステムで最も一般的なネットワークインターフェース名の2つは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.1CIDR表記を使用してネットワークサブネットを指定したい場合は、次の形式を使用できます。
tcpdump -i[インターフェース] net [サブネット]例えば:
tcpdump -i eth0 net 10.0.0.0/8直接ソースホストを指定することもできます。
tcpdump -i[インターフェース] src [ホスト]行き先ホストを指定することもできます。
tcpdump -i[インターフェース] dst [ホスト]合わせて読む: rootまたはsudoなしでNmapを実行する方法
冗長性の指定
tcpdumpでは、パケットキャプチャの冗長性を指定できます。これにより、キャプチャ中に大量の情報に圧倒されないようにできます。
冗長性には、-v、-vv、および-vvvの3つの段階的なオプションがあります:
tcpdump -i[インターフェース] -v
tcpdump -i[インターフェース] -vv
tcpdump -i[インターフェース] -vvv最初のオプションは最も少ない冗長性を指定し、3番目のオプションは最も多い冗長性を指定します。
キャプチャをファイルに保存
キャプチャしたデータをファイルに保存することはよくあります。そうすることで、さらに分析や解釈ができます。
これは-wフラグを使用して行います。
tcpdump -i[インターフェース] -w[ファイル名]例として、キャプチャしたデータを「capture.txt」というファイルに保存できます。
tcpdump -i eth0 -w capture.txt合わせて読む: ルーターでポートを開き、ポートフォワーディングを設定する方法
よくある質問
1. “Operation not permitted”エラーを受け取りました。どうすれば解決できますか?
以下は、ユーザーがtcpdumpを使用しようとしたときに受けるかもしれない一般的なエラーです。

tcpdumpは、パケットキャプチャを実行するための必要な権限がないときにこのエラーを表示します。ほとんどのシナリオでは、sudoを使用することで解決できます。例えば:
sudo tcpdump -i eth02. 利用可能なネットワークインターフェースをどうやって確認できますか?
tcpdumpには、システム上の利用可能なネットワークインターフェースを確認するための組み込み機能があります。
インターフェースを確認するには、-Dフラグを使用します。
tcpdump -D