松島浩道ネットワークパケット解析ツール「Wireshark」はさまざまな環境で使える便利なツールだが、GUIが利用できない場合は使いにくい。そこで今回はWiresharkのコマンドライン版である「tshark」や、パケットキャプチャツール「tcpdump」の使い方やWiresharkとの連携について紹介する。コマンドラインベースでパケットキャプチャを実行する前回はWiresharkを使った基本的なパケットキャプチャやパケット解析の流れについて紹介した。Wiresharkでは単純にネットワークを流れるパケットを観測するだけでなく、プロトコルに応じた解析やその中身の確認も行えるが、コンソールからしかアクセスできないLinuxサーバーなどでは利用しにくいケースもある。いった環境で有用なのが、Wiresharkのコマンドライン版とも言える「tshark」だ。tsharkではコマンドラインベースでWiresharkとほぼ同様のパケットキャプチャを実行でき、かつWiresharkで読み込める形式でキャプチャ結果をファイルに保存できる。そのため、たとえばLinuxサーバー上でtsharkを使ってパケットキャプチャを実行し、その結果を保存したファイルをWindows上のWiresharkで開いて分析する、といったことが行える。Windows環境でもtsharkは利用可能だ。基本的にはGUIが使えるWindows環境であえてtsharkが必要となるケースは少ないが、たとえばバッチ処理と組み合わせて定期的にパケットキャプチャを実行する、といった用途で利用できる。UNIX/Linux環境では同様のパケットキャプチャツールとして「tcpdump」というものも有名だ。tcpdumpもWiresharkで読み込める形式のファイルでキャプチャ結果を保存できるので、こちらについても紹介しよう。tcpdumpはWindowsでは利用できないが、Windows向け移植版とも言えるWinDumpというツールが公開されている。tsharkのインストールtsharkは、Windows版であればWiresharkに同梱されており、Wiresharkのインストール先ディレクトリに「tshark.exe」としてインストールされている。Linuxやその互換Linuxディストリビューションにおいてもtsharkはwiresharkパッケージに同梱されている。DebianやUbuntuでは、「tshark」というパッケージ名でWiresharkとは別に配布されているので、こちらをインストールする必要がある。tsharkの基本的な使い方tsharkには多くのオプションが用意されているが、主に使用するのは表1のオプションになる。表示フィルタを指定するフィルタ関係では「-f」オプションと「-Y」オプションの2つが用意されているが、前者はWiresharkのキャプチャフィルタに、後者は表示フィルタに相当するものだ。表示フィルタで表示対象外に設定したパケットについても、キャプチャフィルタでフィルタリングされていなければファイルには保存される。tsharkの実行には通常はroot権限が必要だ。tsharkでキャプチャを行うには、まず-Dオプション付きでtsharkを実行し、利用できるネットワークインターフェイスを確認する。usbmon2ここで表示されるネットワークインターフェイスからパケットキャプチャ対象とするものを選び、「-i」オプションでそれを指定してtsharkコマンドを実行すると、Wiresharkと似たような形式で標準出力にパケットキャプチャ結果が出力される。:パケットキャプチャを終了するには、Ctrl-Cを入力すれば良い。「-Y」オプションで表示フィルタを指定することで、表示するパケットを絞り込むことができる。指定できるフィルタ文字列は、Wiresharkの表示フィルタと同じルールで指定できる。次の例は、「http」という表示フィルタを指定してHTTPパケットだけを表示させたものだ。:tsharkではこのように簡易的にネットワークインターフェイスを流れるパケットの内容をリアルタイムで確認できるが、詳しく分析を行いたい場合は一度分析データをファイルに保存する必要がある。保存先ファイル名は「-w」オプションで指定可能だ。「-a」オプションでは時間やファイルサイズ、ファイル数などの条件を指定してキャプチャを終了できる。duration:10」と指定すれば良い。次の例は、10秒間のキャプチャを実行し、キャプチャ結果を「./capture1」というファイルに保存するものだ。「-w」オプションを指定した場合、標準出力にはパケットキャプチャ結果は表示されず、キャプチャしたパケット数のみがリアルタイムで表示される。このときキャプチャフィルタを指定しないと、短時間のキャプチャでもそれなりにファイルサイズが大きくなるので注意したい。capture1もし長時間のキャプチャを行いたい場合、「-f」オプションでキャプチャフィルタを設定すると良いだろう。指定できるキャプチャフィルタの内容や書式はWiresharkの場合と同じだ。HTTPで使われる80番ポートを使用するパケットのみを10秒間キャプチャするには、以下のように実行する。duration:10キャプチャ結果が保存されたファイルはバイナリ形式となりそのままでは内容を確認することができないが、「-r」オプションでそのファイルを指定してtsharkを実行することで、その内容を表示できる。この際、「-Y」オプションなどで表示フィルタを指定することも可能だ。この場合tsharkの実行にroot権限は不要だ。:また、前述のようにtsharkでキャプチャしたキャプチャファイルをWiresharkで開くことも可能だ(図1)。Wiresharkでキャプチャしたものとまったく同様に表示フィルタで表示を絞り込んだり、分析や統計処理を行える。tsharkでキャプチャしたパケットをWiresharkで開いた例tcpdumpを使ったキャプチャUNIX/Linux環境でWiresharkと同様に広く使われているパケットキャプチャツールがtcpdumpだ。tcpdumpは多くのLinuxディストリビューションで標準パッケージとして提供されており、yumコマンドやapt-getコマンドでインストールできる。tcpdumptcpdumpでは、オプションを指定せずに実行するとアクティブなネットワークインターフェイスの中でそのデバイス番号が最も小さいものを対象にパケットキャプチャを実行する。「-i」オプションでインターフェイスを指定できる。そのほか主要なオプションは表2の通りだ。キャプチャするパケット数を指定する。ファイルにキャプチャ結果を保存する場合、ファイルサイズがここで指定したサイズを超えた場合新たなファイルを作成してそこに続きの結果を出力する。ファイルにキャプチャ結果を保存する場合、指定した秒数を超えた際に新たなファイルを作成してそこに続きの結果を出力する。この場合、ファイル名としてstrftimeで使用できる変数を含める必要がある次の例は、「eth0」インターフェイスを対象にキャプチャを実行した例だ。:tsharkの場合と同様、Ctrl-Cを入力するとキャプチャは終了される。次のように「-X」オプションを指定するとパケットの中身も確認できる。この場合パケットの内容が16進数で表示されるだけで、Wiresharkやtsharkと比較すると不親切な表示となっている。rpa.....Wiresharkやtsharkと同様にキャプチャ対象をフィルタリングすることも可能だ。tcpdumpでは引数の最後にフィルタ文字列を指定することでキャプチャフィルタを設定できる。こちらも指定できる文字列はWiresharkのキャプチャフィルタと同様だ。80」というフィルタを指定すれば良い。:キャプチャ結果をファイルに保存するには「-w」オプションを指定する。「dump01」というファイルに出力するには、以下のようにする。kernelまた、「-G」オプションで指定した秒数ごとにファイルを分割する指定が可能だ。「-G」オプションの後には分割する秒数を指定する。この場合ファイル名にstrftimeで利用できる変数を指定することで、ファイル名に取得時刻を付けることができる。次のように実行すると、「test<年-月-日-時:分:秒>」というファイルにキャプチャ結果が保存される。'test%F-%T'保存されたファイルはtsharkの場合と同様バイナリファイルとなり、そのままでは内容を確認することはできないが、「-r」オプションでファイル名を指定してtcpdumpコマンドを実行することで、その内容を出力できる。0また、tcpdumpでキャプチャしたキャプチャファイルはtsharkやWiresharkにそのまま読み込ませることができる。tsharkに読み込ませると、次のようにtsharkでパケットキャプチャを行ったのと同じようにキャプチャ内容を確認できる。:また、Wiresharkに読み込ませると、Wiresharkやtsharkでキャプチャした場合と同様にフィルタや分析、統計処理が実行できる(図2)。tcpdumpでキャプチャしたデータをWiresharkに読み込ませた例tsharkとtcpdumpを使い分けWiresharkやtsharkとtcpdumpはどちらもよく使われるパケットキャプチャツールだが、tcpdumpの出力はやや不親切であるため、どちらかというとリアルタイムでどの宛先に通信を行っているのかをチェックするような用途に向いている。パケットの中身までをチェックしたいなら、tsharkを利用するほうが良いだろう。tcpdumpでキャプチャしたデータはWiresharkで読み込めるので、tcpdumpでキャプチャを行い、Wiresharkでそれを解析する、といった使い方もおすすめだ。ケースに応じて、これらのツールをうまく使い分けていくと良いだろう。