オープンソースのパケットキャプチャソフト「WireShark」。。。ネットワーク関係のお仕事をされている方は使った事のある方も多いかと思います。
※「Ethereal」が開発終了し、WireSharkへと引き継がれていったものです。
WireSharkを使うと、ネットワークを流れるパケットをキャプチャリングすることが出来るわけですが、基本的にはGUIプログラム。お手軽にGUI操作でキャプチャが出来るのも良いんですが、TcpDumpのようにコマンドラインで実行したいという時もありますよね。
※バッチファイル化したり、シェルでごにょごにょしたい時とか。あとは、GUIだと膨大なパケットを表示させる場合に、かなりのメモリを消費しますので、プログラムごと落ちてしまうこともありますし。
「あ〜、WireShark。。。コマンドラインで実行出来たら便利なのに。。。」と思っている方に朗報。実はコマンドライン版のWireSharkが存在するのです。
それが「TShark」
今回は、そのTSharkの使い方をご紹介します。
TSharkとは
TSharkとは、CUI版のWireSharkです。
WireSharkとは別のプログラムですが、機能的にはWireSharkと同等です。実際のパケット解析処理部分のソースコードも共用されています。
ただし、WireSharkで使えていた幾つかの機能が、TSharkでは使えなくなっています。特に解析系の処理は、GUIでグラフィカルに結果を出力するようなものは、利用出来ないようです。
それでもほとんどの機能がWireSharkと同様に利用出来ますし、あまりディープな使い方をしない限りは、特に問題は無いでしょう。
TSharkのインストール
実はWireSharkをインストールした際に、同じフォルダにTSharkもインストールされています。
Windowsであれば、WireSharkのインストール先フォルダに「tshark.exe」という実行ファイルがあるはずです。(通常はProgram FilesのWiresharkフォルダ配下)
MacOSの場合には、Wireshark.appのパッケージ内に実行ファイルが入っています。(通常は、 /Applications/Wireshark.app/Contents/Resources/bin/の配下)
まだWireSharkをインストールしていない場合は、こちらからインストールしましょう。
ちなみに、WireSharkをインストールすると、TShark以外にも実はいくつかのプログラムがインストールされます。ログファイルを結合するMergeCap、ログファイルの内容を書き換えることが出来るEditCapなどがありますが、それはまた別の機会にでも。。。
TSharkを使うための準備
コマンドプロンプトやターミナルからTSharkを実行出来るようにするためには、まずは環境変数(PATH)に、前述のTSharkインストール先フォルダを追加します。(※環境変数への追加の仕方は省略。)
PATHを通した後に、以下のコマンドをたたいて、バージョン番号が表示されればTSharkが使える状態になっています。
tshark -v
実際の使い方は、基本的にはヘルプメニューに全てパラメータが記載されていますので、それを読めば使えるようにはなっています。
tshark -h
ただまあ英語ですし、パラメータだけ見せられても「さぁ、使いましょ!」というわけにも行かないと思いますので、実際にいくつか実際にキャプチャを行う例を、以下に記載して行きたいと思います。
とりあえずパケットキャプチャしてみる
とりあえず、何もフィルタをかけずに、パケットをキャプチャしてファイルに保存する。というのをやってみます。
まずは、どのNIC(ネットワークインターフェースカード)(つまりはLANポート)をキャプチャするのかを指定します。ちなみに通常は無線LANはキャプチャ出来ませんので、有線LANのポートを選択します。
では、以下のコマンドを実行してみてください。
tshark -D
すると、そのPCに備わっているNICの一覧が表示されます。どのNICをキャプチャしたいのかを決めて、そのNICの番号を覚えておきます。
次に、キャプチャを行います。
tshark -i [NIC番号]
[NIC番号]は、先ほど決めたNICの番号(整数)に置き換えて入力してください。これでとりあえずキャプチャは開始されます。
キャプチャを停止するための専用のコマンドはありませんので、停止したい場合にはCtrl+Cで停止させてください。
キャプチャした結果をログファイルに保存する
上記のコマンドだけだとキャプチャはされるものの、その結果がログファイルに保存されません。ログファイルに保存するためには、そのためのオプションを付けてあげます。
tshark -i [NIC番号] -w [ログファイル名]
[ログファイル名]は、拡張子まで入力します。特に拡張子にこだわりがなければ、pcapやcap形式で良いでしょう。hogehoge.pcapのようなファイル名にすればOKです。
これでパケットキャプチャが開始され、キャプチャしたデータが逐一ログファイルに書き込まれて行きます。
ログファイルを読み込ませる
また、このようにネットワークのパケットをキャプチャするのではなく、既存のログファイルをtsharkで読み込み、内容を表示させたい場合には、以下のようなコマンドを実行します。
tshark -r [ログファイル名]
-r オプションで、読み込むログファイルを指定します。こうすると、ログファイルの内容が一気にずらーっと表示されます。
ある程度の大きさのファイルだと読みづらいですので、ここからgrep等で処理したりという利用方法が必要になるかもですが。
あまりニーズがあるプログラムでは無いですが、WireSharkを良く利用するネットワーク関係のエンジニアさんは、TSharkを使うと便利なこともあるかも知れません。
ヘルプを見ると、まだまだ色んなオプションがありますので、色々と試してみると良いと思います。