2019年3月12日更新
這是17年寫的文章,太舊了。目前最新版本Wireshark可能就直接支持分析MQTT協議了,請另找資料。
概述
由於wireshark抓MQTT協議的包只能顯示到TCP層次,要分析MQTT協議,就要添加wireshark插件——Wireshark Generic Dissector。
下載和配置
首先第一步下載generic.dll
(Windows)或generic.so
(Linux),並放到Wireshark的插件目錄(Global Plugins folder或者Personal Plugins folder,可以通過菜單欄Help -> About Wireshark -> Folders查看)。
注意對應好
Global Plugins folder一般是在Wireshark主目錄下的plugins\1.12.4(…\Wireshark\plugins\1.12.4)。
然後添加MQTT規則文件,有兩個:.wsgd
和.fdesc
。
generic.dll下載地址:http://wsgd.free.fr/download.html
MQTT規則文件可以在這裏下載:http://false.ekta.is/2011/06/mqtt-dissector-decoder-for-wireshark/#
添加環境變量
最後添加系統環境變量:WIRESHARK_GENERIC_DISSECTOR_DIR
,指定爲上面兩個規則文件的目錄。
或者把上面兩個文件放到下面其中一個目錄下:
- wireshark profiles directory (e.g. C:\Users<user>\AppData\Roaming\Wireshark\profiles)
- wireshark data directory (e.g. C:\Users<user>\Documents)
- wireshark plugin directory (e.g. C:\Program Files\Wireshark1.0.3\plugins\1.0.3)
- wireshark main directory (e.g. C:\Program Files\Wireshark1.0.3)
運行
運行Wireshark,在過濾器輸入mqttv31
或對應的ip地址,就可以看到Protocol有顯示MQTTv3.1協議了。
最終效果圖
注意事項
如果是使用Apache-Apollo作爲MQTT服務器,由於使用的端口不同,所以還需要修改過濾文件的端口(原本是1883)。使用編輯器打開mqtt3.1.wsgd文件。把PARENT_SUBFIELD_VALUES
修改成61613,保存。
# mqtt3.1.wsgd 大約第10行
# Specify when the dissector is used.
PARENT_SUBFIELD tcp.port
PARENT_SUBFIELD_VALUES 61613
打包下載
上面所需的generic.dll(for wireshark 1.12.X win32 and win64)以及mqttv3.1規則文件我自己打了一個包放到了百度網盤,方便需要的人下載。
鏈接: https://pan.baidu.com/s/1pKTaMZh
密碼: 7w7n