MacのWiresharkでMQTT通信のパケットを見やすくキャプチャする


やること

Macにて、
MQTT通信の内容が、本当に意図した通りに行われているか(QoS, Retain...他)を確認したいものの、
ただ単にWiresharkを使っても、いまいちMQTTメッセージのやり取りを追いきれませんでした。

Wiresharkにて、MQTT通信のパケットキャプチャ結果をもっと見易くなるようにします。

前提

筆者環境

  • macOS sierra
  • Homebrew 1.5.4

知識

  • MQTTを知っている
  • Wiresharkを知っている
  • Homebrewを使っている

実践

1. Wiresharkのインストール

mac版をインストールします。

2018年2月9日時点のバージョン 2.4.4
https://www.wireshark.org/#download

2. luaをインストール

Wiresharkのプラグインでは、luaを利用することが多いようなので、
luaをmacにインストールします。

$ brew install lua

3. MQTT用のプラグインをWiresharkにインストール

3-1. プラグインを探してダウンロード

有志のWiresharkプラグイン(Mac対応版)を探してダウンロードします。

Mac用で探したら以下を見つけたので、有り難く利用します。
https://github.com/bobwenx/Wireshark-MQTT-OSX

Windows, Linux用では以下のを見つけましたが、試してないので不明です。
https://github.com/menudoproblema/Wireshark-MQTT

(しかしながら、プラグインの更新日が結構古いので、
 MQTTプロトコルバージョン3ではあるものの、何か必要な仕様が足りてなかったりするかも...?)

3-2. Wiresharkプラグインをインストール

Wiresharkの所定のディレクトリに、上記で手に入れた mqtt.lua を置きます。

## プラグインディレクトリの場所
## plugins ディレクトリは存在しない場合もあるので、そのときはmkdirで作成します。
~/.config/wireshark/plugins

$ cp /path/to/mqtt.lua ~/.config/wireshark/plugins

4. Wiresharkを起動して使ってみる

Wireshark起動時に、プラグインは自動的に読み込まれます。

Wiresharkでパケットキャプチャを開始(またはキャプチャデータを読み込み)して、
パケットフィルタに mqtt3 とすれば目的のフィルタリングができます。

トラブルシューティング

Wiresharkでプラグインの読み込み時に何かエラーが出たら、
エラー内容を見てなんとかします。

  • プラグインとして登録しようとしているプロトコル名(フィルタ等で利用するための名称、識別子)が、既に存在するものと重複している
  • luaライブラリがインストールされていない
  • .lua ファイルがなんかおかしい
  • ...etc