怎么抓取 MQTT 協(xié)議數(shù)據(jù)包進(jìn)行調(diào)試分析

      網(wǎng)友投稿 1102 2022-05-30

      在使用 mqtt 協(xié)議開發(fā)物聯(lián)網(wǎng)相關(guān)項(xiàng)目或者作為消息隊(duì)列使用時,可能會遇到一些問題:

      例如為什么訂閱失效了?連接為什么斷開了等等

      在 MQTT5.0 中存在 code 的屬性,可以通過 code 來分析錯誤原因,而在 MQTT3.x 中沒有 code 的屬性,所以對于分析問題的話,只能借助抓包工具來分析了

      可以使用tcpdump來進(jìn)行抓包,命令為:

      tcpdump -i en0 port 1883 -w mqtt.pcap

      這里需要注意修改網(wǎng)卡和對應(yīng)的端口號,使用ifconfig查看網(wǎng)卡信息

      lo0: flags=8049 mtu 16384 options=1203 inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 nd6 options=201 en0: flags=8863 mtu 1500 options=400 ether f0:18:98:ae:9e:df inet6 fe80::1053:12ff:524e:c2a2%en0 prefixlen 64 secured scopeid 0x6 inet 192.168.2.139 netmask 0xffffff00 broadcast 192.168.2.255 nd6 options=201 media: autoselect status: active

      服務(wù)端 Broker 如果使用外網(wǎng)通訊則可以使用en0,而本地內(nèi)網(wǎng)通訊的話可以使用lo0

      端口1883就可以按照實(shí)際對應(yīng)的端口設(shè)置,一般默認(rèn)為1883,建議使用常規(guī)的端口:

      1883 : MQTT, unencrypted

      8883 : MQTT, encrypted

      8884 : MQTT, encrypted, client certificate required

      8887 : MQTT, encrypted, server certificate deliberately expired

      8080 : MQTT over WebSockets, unencrypted

      8081 : MQTT over WebSockets, encrypted

      在執(zhí)行tcpdump之后,看到如下輸出,就可以發(fā)起請求了

      $ tcpdump -i en0 port 1883 -w mqtt.pcap tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes

      出現(xiàn)問題的請求之后,使用CTRL+C結(jié)束,看到如下輸出:

      怎么抓取 MQTT 協(xié)議數(shù)據(jù)包進(jìn)行調(diào)試分析

      $ tcpdump -i en0 port 1883 -w mqtt.pcap tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes ^C14 packets captured 70 packets received by filter 0 packets dropped by kernel

      表示捕獲到了 14 個數(shù)據(jù)包,就可以進(jìn)行分析,分析可以使用 Wireshark,打開生成的 mqtt.pcap 文件

      當(dāng)然也可以直接使用 Wireshark 進(jìn)行抓包分析

      而 MQTT 5.0 協(xié)議中有 code 返回碼,可以使用 simps/mqtt 中的 Simps\MQTT\Hex\ReasonCode 轉(zhuǎn)為人類可讀的信息,如:

      use Simps\MQTT\Client; use Simps\MQTT\Hex\ReasonCode; use Simps\MQTT\Protocol\V5; use Simps\MQTT\Config\ClientConfig; use function Swoole\Coroutine\run; run(function () { $config = (new ClientConfig())->setClientId(Client::genClientID()) ->setKeepAlive(10) ->setDelay(3000) // 3s ->setMaxAttempts(5) ->setProtocolLevel(V5::MQTT_PROTOCOL_LEVEL_5_0) ->setSwooleConfig([ 'open_mqtt_protocol' => true, 'package_max_length' => 2 * 1024 * 1024, 'connect_timeout' => 5.0, ]); $client = new Client('broker.emqx.io', 1883, $config); $res = $client->connect(); var_dump('Connect: ' . ReasonCode::getReasonPhrase($res['code'])); $res = $client->publish('simps-mqtt/test', 'hello', 3); var_dump($res); var_dump('Publish: ' . ReasonCode::getReasonPhrase($res['code'])); });

      connect 可以正常成功,返回Success,而 publish 因?yàn)榘l(fā)布了錯誤的 qos 等級3,所以被斷開了鏈接,錯誤信息為:QoS not supported

      具體的上下文還是要用過 Wireshark 來抓包進(jìn)行分析的

      關(guān)于 PHPMQTT

      MQTT 協(xié)議解析 & 協(xié)程客戶端

      適用于 PHP 的 MQTT 協(xié)議解析和協(xié)程客戶端

      支持 MQTT 協(xié)議 3.1、3.1.1 和 5.0 版本,支持 QoS 0、QoS 1、QoS 2

      首個支持 MQTT v5.0 協(xié)議的 PHP library

      文檔:https://mqtt.simps.io

      GitHub:https://github.com/simps/mqtt

      Gitee:https://gitee.com/phpiot/mqtt

      支持記得點(diǎn)個 Star~

      MQTT TCP/IP

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:JQuery必備基礎(chǔ)知識(一)
      下一篇:四十九、微信小程序開發(fā)頁面樣式WXSS和頁面交互JS
      相關(guān)文章
      亚洲六月丁香六月婷婷蜜芽| 亚洲精品午夜无码专区| 亚洲av无码专区国产乱码在线观看 | 精品国产亚洲一区二区三区| 中文字幕不卡亚洲| 亚洲性日韩精品一区二区三区| 亚洲AV无码成H人在线观看| 国产成人精品日本亚洲语音| 亚洲午夜无码久久久久小说| 在线亚洲高清揄拍自拍一品区| 亚洲乱码在线卡一卡二卡新区| 亚洲自偷自偷精品| 久久亚洲私人国产精品vA | 亚洲电影在线播放| 亚洲精品国产啊女成拍色拍| 亚洲成人福利在线| 最新国产成人亚洲精品影院| 亚洲欧洲尹人香蕉综合| 亚洲 日韩经典 中文字幕| 亚洲伊人久久大香线蕉AV| 亚洲jizzjizz少妇| 亚洲AV中文无码乱人伦| 亚洲中文无韩国r级电影| 亚洲热妇无码AV在线播放| 亚洲AV无码乱码国产麻豆穿越| 亚洲爱情岛论坛永久| 亚洲一区影音先锋色资源| 亚洲毛片基地日韩毛片基地| 亚洲综合色7777情网站777| 亚洲欧美国产精品专区久久| 成人婷婷网色偷偷亚洲男人的天堂| jjzz亚洲亚洲女人| 狠狠综合久久综合88亚洲| 亚洲成A人片在线观看无码不卡 | 亚洲色图综合网站| 国产成+人+综合+亚洲专| 亚洲av成人一区二区三区在线播放 | 久久亚洲色一区二区三区| 好看的亚洲黄色经典| 911精品国产亚洲日本美国韩国 | 自拍偷自拍亚洲精品被多人伦好爽|