やること
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