HOME会社概況業務内容開発分野開発事例CANモジュールソフテックだよりお問い合わせ
HOME > ソフテックだより > 第213号(2014年7月2日発行) 技術レポート「Wiresharkの活用法 〜長時間モニタリングとデータ解析について〜」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより(技術分野別)のページへ
ソフテックだより(シーン別)のページへ


ソフテックだより 第213号(2014年7月2日発行)

技術レポート

「Wiresharkの活用法 〜長時間モニタリングとデータ解析について〜」

1. はじめに

現在のシステムはPC単体やマイコン単体といった単体構成は珍しく、多くはPC・マイコン・PLCなど多機種かつ複数台で構成されています。
弊社が得意とする制御系システム・監視システムも例外ではありません。
それらの機器はさまざまな通信方式で接続されますがそのなかでもEthernetが使われることが多いです。

通信の内容は目に見えないためテストするときや不適合が発生したときにはプロトコルアナライザーを使って通信内容を可視化しつつ原因となる範囲を切り分ける必要があります。
今回はフリーのプロトコルアナライザーとして有名なWiresharkでモニタリングする方法をまとめたいと思います。

なお、Wiresharkのダウンロード、インストールおよび基本的な使い方はさまざまなホームページで解説されていますので本稿では説明を割愛いたします。

2. Wireshark(ワイヤーシャーク)について

Wiresharkについて簡単に説明します。
Wiresharkはフリーのプロトコルアナライザーで以下の特徴があります。

a)
Windowsを始めLinux、MacOSXなど様々なOSをサポートしている。OSが異なっても共通の操作で使える。
b)
データリンク層以上のプロトコルを解析出来る。層別に表示することも出来る。
c)
約800種類と非常に多くのプロトコル解析が出来る。

TCP/IPプロトコル階層図
図1. TCP/IPプロトコル階層図

次から不適合の再現待ち調査など長時間モニタリングする時に便利な[接続]と[設定]方法を説明します。

3. 調査ターゲットシステムへの接続方法

多くのシステムはスイッチングHUBを使ってPCなどの機器を接続するため、そのままWiresharkのPCを接続してもそのPCが接続されたポートに入ってくるパケットしかモニタリング出来ません(図2参照)。
そこで他のポートもモニタリング出来るようにWiresharkを調査ターゲットシステムへ接続する方法を説明します。

スイッチングHUBの通信経路イメージ
PC1・PC3の送信データはそれぞれ送信相手のポートだけに送られる。
そのためPC5にWiresharkを入れたとしてもPC1→PC4のデータもPC3→PC2のデータも見ることは出来ない。

図2. スイッチングHUBの通信経路イメージ

3-1. スイッチングHUBのポートミラーリング(※1)設定

スイッチングHUBにはプロトコルアナライザーの接続を考慮したポートミラーリング(※1)と呼ぶ機能を持つものがあります。
HUBの設定方法は商品別に異なりますが、専用ツールソフトやブラウザーなどから複数のモニタリング対象ポートとアナライザー接続ポートを指定するものが多いです。
稼働中システム構成のまま、簡単な設定だけでモニタリングできるメリットがあります。
なお、システム開発で機器を選択するときはあらかじめポートミラーリング可能なHUBを選定して置くのが良いです。

3-2. リピータHUB(※2)へ接続する

モニタリング対象をスイッチングHUBから切り離してリピータHUB(※2)へ接続する方法です。
これでリピータHUB全ポートに流れるパケットをモニタリング出来ます。
ただし以下の注意点がありますのでこれらが問題にならないときは方法としては簡単です。

a)
コリジョン発生の可能性が高まる。
b)
入手の選択肢が少ない

リピータHUBの通信経路イメージ
PC1がPC3へ送信したデータは全てのポートに送られる。
そのためどのPCにWiresharkを入れても全ポートの通信データを見ることが出来る。
例えばPC5にWiresharkを入れてもPC1→PC3のデータを見ることが出来る。

図3. リピータHUBの通信経路イメージ

3-3. タップ(※3)を接続する

電気信号を分岐させる『タップ』(※3)と呼ぶアナライザーをつなぐためのHUBのような機器を用いてアナライザー側PCを接続します。
自分では使ったことはありませんが、以下のメリットがありそうなため是非使いたいと思います。

a)
HUBに対する設定が無い
b)
LANケーブルの配線を少し変えるだけで簡単である
c)
電気的に信号を分岐させているためシステムに与える影響が無い
3-4. 調査ターゲットシステムのPC にWiresharkをインストールする

調査ターゲットシステムにPCがあればそのPCにWiresharkをインストールしてモニタリングする方法です。
ターゲットシステムのPCのみがモニタリング対象の場合には一番簡単な方法です。

4. Wiresharkの設定

デフォルトの設定でモニタリングを続けると物理メモリと仮想メモリを大量に使ってしまい最終的にアプリケーションエラーになって異常終了することがあります。
以下に長時間モニタリングに向いた設定を説明します。
ポイントはパケットをもれなくしキャプチャーし続け、その結果がファイルに一定量保存されるようにすることです。

4-1. 調査対象システム側とWiresharkのPCとで日付・時刻を合わせる

基本的なことですが、忘れてしまうとモニタリングのログ解析が面倒になります。

4-2. メモリのバッファサイズを増やす

パケットのキャプチャー漏れを極力防ぐためにメモリのバッファサイズを増やしておきます。
NIC毎にバッファサイズを設定でき、デフォルトは2Mbytesです。これを可能な範囲で増やします。

[手順]

  1. メニューのCapture>Options(Ctrl+K)でオプション画面を開いてInterfaceを選択してダブルクリックする。
  2. Edit Interface Settings画面の[Buffer Size]を変更する。

メモリのバッファサイズ設定
図4. メモリのバッファサイズ設定

4-3. 保存するファイルのサイズを一定にする

無制限にモニタリングした結果アプリケーションエラーなどで異常終了することが無いよう、保存されるファイルが一定になる設定をします。

[手順]

  1. メニューのCapture>Options(Ctrl+K)でオプション画面を開く。
  2. Capture Files(図5のA)へ保存先フォルダとファイル名の固定文字列を指定する(図5の固定文字列は“TestSys”)。生成されるファイル名は『固定文字列+日付時刻』となる。
  3. Next file every(図5のB)へファイルの最大容量を指定する(図5は1MB)。
  4. Ring buffer with(図5のB)へ最大ファイル数を指定する。この設定で最新のファイルからこの最大ファイル数分保存される。最大ファイルを超えた場合は古いファイルから削除される。
4-4. パケットリスト画面の設定

古いPCや性能が低いPCでモニタリングするときはパケットのキャプチャー漏れが発生する可能性があるため、モニタリング中にパケットリスト画面を表示更新させない設定をしておきます。
負荷を抑えてパケットのキャプチャー漏れを発生させないようにするのが目的です。

[手順]

  1. メニューのCapture>Options(Ctrl+K)でオプション画面を開く。
  2. Update list of packets in real time(下図5のC)のチェックを外す。
4-5. Capture Filterの設定

モニタリングする条件を設定出来ますがここでは設定しないようにします。
どうしてもファイル保存量を減らす必要があるときのみ設定します。
理由はCPUに負荷を掛けるためパケットのキャプチャー漏れが発生する可能性があるためです。
モニタリングしたログの表示時点でもFiler条件を指定出来るため無理に設定する必要はありません。

ファイル保存設定と画面更新禁止設定
図5. ファイル保存設定と画面更新禁止設定

設定は以上です。次はモニタリングしたパケットの解析方法を説明します。

5. 解析方法

モニタリングしたファイルをWiresharkに読込み解析します。

5-1. パケットの絞り込み設定

確認する量を減らすためにDisplay Filterで表示のフィルタリング設定をします。
これによりパケットを絞り込み出来ます。
例えばtcp && ip.addr == 192.168.8.1&& tcp.port==28000とすると、
TCPプロトコルかつIPアドレスが192.168.8.1かつポート番号が28000の電文のみを表示させられます。
このあとに不適合が発生した日付・時刻の付近を手掛かりにして解析するパケットを決めると効率的に解析出来ます。

パケットリスト画面の表示フィルタリング設定
図6. パケットリスト画面の表示フィルタリング設定

5-2. パケットの内容確認

上記のあとパケットを解析します。
パケットリストをダブルクリックするとパケット詳細画面が開きます。
アプリケーションが送受信するフィールドはDataです。
Dataをクリックするとその下にバイト単位で表示されます。
ここでアプリケーションの仕様通りかどうかを確認出来ます。

パケット詳細表示
図7. パケット詳細表示

5-3. トラフィック状況確認

単位時間あたりのパケット数を図8のように確認出来ます。
ここでも上記『5-1パケットの絞り込み設定』と同じくフィルターを設定することで条件別のトラフィックを見ることが出来ます。
以下に設定例を示します。

[手順]

  1. メニューのStatistics>IOGraphで下記画面が開く。

単位時間あたり送受信パケット数表示
図8. 単位時間あたり送受信パケット数表示

5-4. シーケンス確認

通信シーケンスを図で確認出来ます。
デフォルトでは全電文の表示になりますので下図9オプション選択により『5-1パケットの絞り込み設定』で設定したフィルター結果のみを表示させることが出来ます。
なお電文を示す矢印をクリックすると図6画面で対応するパケットが選択されます。そのパケットをダブルクリックすると図7パケット詳細表示に移行して詳細を確認することが出来ます。

[手順]

  1. メニューのStatistics>FlowGraphでオプションを選択してOKを押す。
  2. Graph Analysis画面が開く

通信シーケンス図表示オプション設定
図9. 通信シーケンス図表示オプション設定

通信シーケンス表示
図10. 通信シーケンス表示

6. おわりに

今回はWiresharkによる長時間モニタリングとモニタリング結果の解析についてまとめてみました。
私自身も開発したソフトが現場で運用になってから発生した問題の調査・解析でこのように設定して使った経験がありますが、そのときの症状は平常時ごく稀に伝送異常が発生するというもので、どこからか異常なデータが送られて来ている可能性がありました。
そこで再現するまでWiresharkでモニタリングさせておき、再現時にデータを引き上げて調査し原因を明確にすることが出来ました。
このように発生頻度の低い不適合の再現待ちや、大量にモニタリングしたデータを解析するときに是非今回紹介した方法を活用して頂きたいと思います。
今後も便利な使い方や活用シーンがあれば紹介していきたいと思います。

(N.K.)

[参考]
※1
ポートミラーリングについて/
https://www.allied-telesis.co.jp/library/nw_guide/device/switch.html
※2
リピータHUBについて
http://e-words.jp/w/E383AAE38394E383BCE382BFE3838FE38396.html
※3
タップについて
http://e-words.jp/w/E383AAE38394E383BCE382BFE3838FE38396.html

関連ページへのリンク

関連するソフテックだより