网路抓包学MQTT协议(一)----环境搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FourLeafCloverLLLS/article/details/83717220

唉,  本来打算深入学mqtt协议的, 没想到搭个环境, 搭建了好久, 差点放弃了, 好多坑...., 我的环境的选择是:Emqtt搭建本地服务器+ wireshark网络抓包工具+通信猫+mqtt.fx客户端, 接下来一步步说这几个软件的安装吧.

一: Emqtt服务器

     mqtt服务器有很多开源的, 这里我选择后台界面比较美观的Emqtt, 人来了世界生是为了看颜值高的, 我选择他, EMQTT服务器搭建没有什么坑要跳, 直接参考该博客就行:https://blog.csdn.net/myruo/article/details/79377583 下面附一张控制台艳照

二:通信猫网络调试助手

 有这么多的tcp调试助手, 为什么选择他呢, 一是因为它发送数据的时候有hex进制发送, 因为mqtt协议的包都是要求16进制发送的, 通信猫还有其他的好多功能, 自己用了就知道, 我就不在这帮他打广告了, 通信猫下载地址:http://www.tongxinmao.com/Topic/Detail/id/6 关键还是绿色的, 就喜欢绿色的软件了, 不要时直接卸载文件夹, 这里没坑, 解压就行了, 附一张通信猫的图:

三: mqtt.fx安装

        mqtt.fx安装也很简单, 下载地址: http://www.jensd.de/apps/mqttfx/1.5.0/  使用教程:http://blog.sina.com.cn/s/blog_45eaa01a0102xam3.html 来一张我得配置图和连接图吧

如果连接成功了刚刚搭建的服务器, 上图的红色框中圆圈是绿色的, 没连接成功就是红色的, 在emqtt的服务器控制台, 也就是网址:http://localhost:18083/#/clients 能看到客户端信息

好了,  来到我们最麻烦最多坑的wireshark网络抓包工具了.

四:wireshark软件

wireshork呀, 真的想说爱你不容易哦, 折腾的我想死了都, 幸好这几天在练车, 被教练骂的狗血临头, 相比于wireshork好多了, 废话不说了, 来直接看教程吧.

wireshork下载连接: https://www.wireshark.org/ 官网,  最喜欢去官网下载了, 体现我们是高贵的人,  下载后看了一下简单教程, 需要的自己去网上找吧,下来一张界面图吧:

注: 这是正常不过的图了, 今天才正常的说说坑吧: 

问题一: 当我设置了文件过滤后, 就是上图的tcp.port==1883后, 用通信猫连接服务器时, 没有出现tcp三次握手的信息, 通信猫的配置界面如下图所示:

只需关注红色框的信息, 左边的信息是我成功发送数据的信息. wireshark配置如图所示:

输出的信息我就不贴了, 全部空白, 没有任何消息, 我心想就奇怪了, tcp.port==1883 端口没错, 即使我没发信息, 应该有三次握手的信息吧,  找了好久wireshark的教程, 发现我也没配置错, 怎么就会没呢, 找了一天没找到, 就先放放没里了, 

第二天. 在亲爱的度娘上看到你这篇文章:https://www.cnblogs.com/lvdongjie/p/6110183.html  瞬间明白了, 原来这是计算机的网络通信机理, 不是软件有问题,  windows系统没有提供本地回环网络的接口,用wireshark监控网络的话只能看到经过网卡的流量,看不到访问localhost的流量,因为wireshark在windows系统上默认使用的是WinPcap来抓包的,现在可以用Npcap来替换掉WinPcap,Npcap是基于WinPcap 4.1.3开发的,api兼容WinPcap。仿佛看到了一丝希望,  找着教程, 终于能看到三次握手的信息了, 如下图所示:

红色为三次握手信息, 黄色为客户端向服务器发送请求包

问题二: 当我用mqtt.fx连接服务器时, wireshark中protocol中一直显示tcp, 该栏目中表示wireshark中自动帮我们根据包的结构解析出协议的类型, 为什么一直时tcp, 不应该时mqtt吗?(忽略上图的mqtt字母, 这是我成功后的图)

这个问题经过百度后, 发现wireshark是解析不出mqtt协议的, 需要增加第三方插件, 参考了: https://www.jianshu.com/p/a766dcfa747d  https://www.cnblogs.com/ascii0x03/p/8781643.html 结果还是没解决, 心想是不是服务器的问题(我原来用的apollo搭建的mqtt服务器, 现在用的是本文提到的emqtt服务器), 后来在电脑上安装了emqtt服务器, 神奇了能解析出了mqtt协议了, 效果如上图所示, 既然能解析出了, 那来测试一下吧, 用通信猫向服务器发送一段16进制的报文: 10 0c 00 04 4d 51 54 54 04 02 ff ff 00 00  结果返回了20 02 00  00 该段返回码表示我连接成功了, 如下图所示:

再看看wireshark抓取的包吧:

也解析出来了, 成功!!!

注: 有人会问这个wireshark中的数据怎么看,  再来说明一下吧, 通信猫中有显示本地端口为54037, 这个端口是我们电脑客户端的端口号,  我们结合看wireshark中的信息来讲解:

no: 为包的顺序, time为抓包的时间, source为包的来源ip地址, destination为包目的ip地址, 这里因为都是本地发送接受的, 所以都为127.0.0.1 protocel为软件解析出包的协议属于的类型,  length为包的长度, info为包的信息: 看到54037 - 1883了吗? 这表示是客户端向服务器发送的数据, 剩下的一些信息等我们讲解协议的时候再讲解吧, 今天先这样吧,   我再看看mqtt文档协议

猜你喜欢

转载自blog.csdn.net/FourLeafCloverLLLS/article/details/83717220
今日推荐