この記事は第3回 FA設備技術勉強会オンラインで発表した資料となります。
前回
サメでもわかるWireshark入門(その1) | さめのブログ (ameblo.jp)
ログの解析
ファイルの読み込み
pcapやpcapngが関連付けされていればダブルクリックで開けます。それ以外にもWiresharkのメニューからFile-Openの操作や、ウィンドウ上へドラッグアンドドロップでも表示可能です。複数ファイル選択も可能
フィルタリングについて
解析の際に必要なパケットだけを表示できるようにフィルタを設定できます。
赤枠にフィルタの設定を書き込んでApplyをクリックすれば必要な設定のみ表示可能。フィルタを消したければClearを押す。
フィルタの例
特定のプロトコルだけ表示したい!というときはプロトコル名を入れるとフィルタリングできる
基本的にはプログラムの条件文と同じ様に論理記号で定義していく。
特定の時間のパケットだけ表示する
これもフィルタで表示可能。以下の様なコマンドをFilterに打ち込むとその時間よりも前のパケットのみ表示される。
frame.time < "2020-01-16 12:34:56"
特定の時間のみ表示したい場合は以下のように打ち込むと良い(この例の場合2021年1月16日 2:52:00~2:55:00の期間に取得したパケットのみ表示される)
frame.time > "2021-01-16 2:52:00" &&frame.time < "2021-01-16 2:55:00"
特定のPortに出入りするパケットだけ表示する
例えばTCPで特定のPortに出入りするパケットを監視したい場合はフィルタを以下のように設定する
これらと上記のフィルタ例を組み合わせて特定のパケットのみ表示できるようにするとよい
特定のデータが含まれたパケットだけ表示する
通信データのnバイト目のデータがXXとなっているデータだけ確認したいといった状況の場合はフィルタを以下のように設定すればよい
具体的な解析方法
準備物
・プロトコルの説明が記載されたWebページや書籍(ないと辛い)
・監視対象の機器の通信仕様書(割と大事)
・該当する時間の欲しいデータが含まれているパケット(すごく大事)
ログの見方
任意のパケットを選択すると以下のようにパケットの詳細を確認できる。
各項目でより細かく確認することも可能。
大まかではあるが各項目は以下の通り
- Frame:左から、WiresharkのパケットNo.、パケットの大きさ、取得したインターフェース等
- Ethernet:イーサーネットフレームの説明。送信先と送信元がMACアドレスで定義される。MACアドレスの前半3byteはチップメーカー固有で決まっているのでASUSTekCなどと表示される。この項目を開いくと最後の項目にTypeってのがある。これは通信プロトコルのタイプが表示される。TCPやUDP、ICMPなどのIPに基づくプロトコルの場合は0x0800、ARPなら0x0806
- Internet Protocol version 4:これはIPv4の場合のみ表示される。送信元と送信先がIPアドレスで定義される。ダンプのままだとわかりにくいので詳細画面で一般的な表示形式で表示される。あまりここは確認しない
- User Datagram Protocol:UDPのこと。UDPのポート設定など。TCPの場合はそのほかにもいろいろな設定が入る。ポートの設定ミスが無いか確認する時を除いてここもそこまで使用しない
- Real-time Transprt/Dataなど都度色々入る:機器が実際にやり取りするときのデータでもっとも重要な部分。通信仕様書等で定義されたデータはここに保存されている。
ログ解析例 2台間の通信が正常か確認する
機器間でワークを受け渡す機械があり、その間でインターロック通信が行われている。インターロックがちゃんとやり取りできているかの確認方法を示す。
どんな設備か?のイメージ
- 該当するログをWiresharkに読み込む
- Filterを設定する。「(ip.dst==172.16.8.105 && ip.src==172.16.8.106) || (ip.dst==172.16.8.106 && ip.src==172.16.8.105)」など
- 通信仕様を元にしてインターロックの最初の通信を見つける。
- 以降、テキストIDの位置のデータが0x11,0x12,0x21…と変化していくのを確認していく。
- もしネットワーク側に問題があれば、やり取りが行われない、一部パケットが欠損するなどが発生する。ネットワーク側のパケットには残っていて機器側のログに情報が残っていなければ機器の不具合が考えられる。
パケット間の時間差を知りたい
パケットが定期送信されているかなどを調べたい場合、パケットの時間差で表示することが出来る。表示されたパケットで時間差を表示したい場合、Time Display FormatでCtrl+Alt+6を使う。フィルタを入力した状態で、Seconds Since Previous Captured Packet(前にキャプチャしたパケットからの秒数)を使用した場合、非表示になっているパケットとの時間差を表示するため注意必要。
時刻表示を変更した場合の例を示す。