Linuxでパケットキャプチャをする2つの方法!【tshark&tcpdump】
Linuxの主な用途としてはサーバーが多いでしょう。サーバーでは、GUIではなくCLIで運用することが一般的であり、Wiresharkなどの主要なパケットキャプチャツールを利用できないこともありますよね。
ここでは、Linuxでパケットキャプチャをする2つの方法と、それぞれの具体的な利用手順について解説していきます。
■Linuxでパケットキャプチャをする2つの方法
LinuxではCLIで運用することが一般的であり、基本的にはすべての操作をコマンドラインで行います。コマンドラインでパケットキャプチャをする場合、「tshark」と「tcpdump」を使う方法があります。
tsharkはパケットキャプチャツールとして有名な、Wiresharkのコマンドライン版になります。tcpdumpはLinuxの標準パッケージであり、古くから利用されているパケットキャプチャツールとなります。
どちらも取得したファイルをWiresharkなどで開くことができ、Linux上で取得したキャプチャファイルをWindowsパソコンで確認することが多いでしょう。
tsharkとtcpdumpのどちらとも、パケットキャプチャファイルの取得だけでなく、Linux上でリアルタイムにパケットの流れを確認することができます。
■tsharkの使い方
tsharkの具体的な利用手順について解説していきます。tsharkの利用には、root権限が必要となりますので注意しましょう。
◇tsharkの準備方法
tsharkの準備方法は、Linuxディストリビューションによって変わってきます。
Red Hat Enterprise LinuxやCentOSなどでは、Wiresharkと一緒にtsharkが同梱されているため次のコマンドでインストールしましょう。
「yum -y install wireshark」
DebianやUbuntuなどでは、個別に配布されているため、次のコマンドでインストールします。
「apt-get install -y tshark」
tsharkをインストールしたら、正常にインストールされたことを確認するために次のコマンドを入力してください。
「tshark -v」
コマンドのエラーとならず、インストールしたtsharkのバージョン情報が表示されれば、正常にインストールできたと判断します。
◇tsharkの基本的な使い方
tsharkの基本的な使い方として、リアルタイムにパケットをキャプチャする手順を解説します。
- ネットワークインタフェース名を確認「tshark -D」
- パケットキャプチャを開始「tshark -i <ネットワークインタフェース名>」
- パケットキャプチャを停止「Ctrl + C」
Linuxサーバーでは、複数のネットワークインタフェースを持っていることも珍しくありません。キャプチャしたい対象のネットワークインタフェース名をはじめに確認しましょう。また、パケットキャプチャは停止するまで取得し続けるため、終了する場合は停止することを忘れずに。
◇tsharkの覚えておきたいオプション
tsharkのデフォルトの状態では、キャプチャの量が多すぎて内容を確認しづらいものです。そのため、オプションを使用してキャプチャ内容をフィルタリングしましょう。
オプションは複数併用することができます。利用頻度が高いオプションを紹介しますので、あなたの目的に沿うように組み合わせて使用するとよいでしょう。
オプション |
動作 |
-f <キャプチャフィルタ> |
キャプチャする内容をフィルタリング。IPアドレスやプロトコルなどのフィルタリングが可能。 eth0インタフェースで、port 53(DNS)の通信だけをキャプチャする例(tshark -i eth0 -f “port 53″) |
-Y <表示フィルタ> |
標準出力に表示される内容をフィルタリング。キャプチャフィルタと同様に設定可能。キャプチャファイルに出力する場合は、表示フィルタの内容に関わらず、すべてのパケットが保存される。 eth0インタフェースで、192.168.1.1のIPアドレスを持つパケットを表示する例(tshark -i eth0 -Y host 192.168.1.1) |
-w <出力ファイル名> |
キャプチャファイルを保存する際に指定。 eth1インタフェースのキャプチャ情報を/var/tmp/cap_file.capに保存する例(tshark -i eth1 -w /var/tmp/cap_file.cap) |
-V |
パケット内容の詳細を表示する。 |
-a <終了条件> |
終了するための条件を指定する。 eth0インタフェースのキャプチャ情報を5秒間取得し、自動的に停止する例(tshark -i eth0 -a duration:5) |
-r <キャプチャファイル> |
指定したファイルをtsharkで開く。 /var/tmp/cap_file.capを開き、192.168.1.1のIPアドレスを持つパケットを表示する例(tshark -r /var/tmp/cap_file.cap -Y host 192.168.1.1) |
■tcpdumpの使い方
tcpdumpの具体的な利用手順について解説していきます。tcpdumpの利用には、root権限が必要な場合が多いため注意しましょう。
◇tcpdumpの準備方法
tcpdumpは、古くからLinuxに付属している標準パッケージであるため、新たにインストールせずともインストール済みの場合があります。はじめに次のコマンドを入力し、インストールされているか確認しましょう。
「tcpdump -h」
バージョン情報が表示されればインストール済みと判断します。コマンドエラーが出る場合は、個別にtcpdumpをインストールしてください。
tcpdumpのインストール方法は、Linuxディストリビューションによって変わってきます。Red Hat Enterprise LinuxやCentOSなどでは、次のコマンドでインストールするようにしましょう。
「yum -y install tcpdump」
DebianやUbuntuなどでは、次のコマンドでインストールします。
「apt-get install -y tcpdump」
◇tcpdumpの基本的な使い方
tcpdumpの基本的な使い方はtsharkと同じです。リアルタイムにパケットキャプチャを取得する手順を紹介します。
- ネットワークインタフェースを確認
- パケットキャプチャを開始「tcpdump -i <ネットワークインタフェース名>」
- パケットキャプチャを停止「Ctrl + C」
ネットワークインタフェースを確認する方法は、Linuxディストリビューションやバージョンによっても変わってきます。基本的には「ifconfig -a」で確認できますが、「/sbin/ifconfig -a」の場合もあるので注意が必要です。また、最近のRed Hat Enterprise LinuxやCentOSでは「nmcli device」コマンドで確認しましょう。
tsharkと同様に、パケットキャプチャは終了するまでパケットを取得し続けます。終了する場合はパケットキャプチャの停止を行ってください。
◇tcpdumpの覚えておきたいオプション
tcpdumpの場合も、デフォルトではキャプチャの量が多すぎて内容を確認しづらいものです。キャプチャ内容を絞り込むためのフィルタについて、次に紹介するオプションを利用してみてください。
よく利用するフィルタの例 |
動作 |
tcpdump -i eth0 src host <IPアドレス> |
送信元IPアドレスでフィルタ |
tcpdump -i eth0 dst host <IPアドレス> |
宛先IPアドレスでフィルタ |
tcpdump -i eth0 host <IPアドレス> |
送信、宛先に関わらず、IPアドレスでフィルタ |
tcpdump -i eth0 port <ポート番号> |
送信、宛先に関わらず、ポート番号でフィルタ |
tcpdump -i eth0 src host <IPアドレス> and port <ポート番号> |
送信元IPアドレスかつ、ポート番号でフィルタ |
■Linuxの場合はtcpdumpから始めよう
LinuxはCLIで運用することが一般的であり、WiresharkなどのGUIを利用するパケットキャプチャツールが利用できないことが多いものです。コマンドライン上でパケットキャプチャを行うための方法として「tshark」と「tcpdump」が挙げられます。
どちらも、コマンドライン上でリアルタイムにパケットキャプチャを取得することができ、キャプチャファイルとして保存することも可能です。tcpdumpは、Linuxのインストール時にあわせてインストールされている可能性もありますので、まずはtcpdumpでパケットキャプチャをする方法を試してみてはいかがでしょうか。