代码编织梦想

MQTT 协议

1.简介

MQTT协议(Message Queuing Telemetry Transport)是是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。
在这里插入图片描述

2.工作原理:

在这里插入图片描述
如上图所示,客户端A连接到消息代理(message broker),消息代理返回确认消息。客户B发布msg的值为1,客户A订阅‘msg’,消息代理将消息推给客户A,客户A发布msg的值为2,但客户B没有订阅,消息代理不推送。消息B又发布了msg的值为3,客户A就再次收到订阅的消息msg的值为3。最后客户端断开连接。是不是很容易理解。

3.MQTT的消息类型

1 )CONNECT – 连接服务端:客户端到服务端的网络连接建立后, 客户端发送给服务端的第一个报文必须是CONNECT报文
2 )CONNACK – 确认连接请求:服务端发送CONNACK报文响应从客户端收到的CONNECT报文。 服务端发送给客户端的第一个报文必须是CONNACK。如果客户端在合理的时间内没有收到服务端的CONNACK报文, 客户端应该关闭网络连接。合理的时间取决于应用的类型和通信基础设施。
3 )PUBLISH – 发布消息:PUBLISH控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息。
4 )PUBACK –发布确认:PUBACK报文是对QoS 1等级的PUBLISH报文的响应。
5 )PUBREC – 发布收到( QoS 2, 第一步):PUBREC报文是对QoS等级2的PUBLISH报文的响应。 它是QoS 2等级协议交换的第二个报文。
6 )PUBREL – 发布释放( QoS 2, 第二步):PUBREL报文是对PUBREC报文的响应。 它是QoS 2等级协议交换的第三个报文。
7 )PUBCOMP – 发布完成( QoS 2, 第三步):PUBCOMP报文是对PUBREL报文的响应。 它是QoS 2等级协议交换的第四个也是最后一个报文。
8 )SUBSCRIBE - 订阅主题:客户端向服务端发送SUBSCRIBE报文用于创建一个或多个订阅。 每个订阅注册客户端关心的一个或多个主题。 为了将应用消息转发给与那些订阅匹配的主题, 服务端发送PUBLISH报文给客户端。 SUBSCRIBE报文也( 为每个订阅) 指定了最大的QoS等级, 服务端根据这个发送应用消息给客户端。
9 )SUBACK – 订阅确认:服务端发送SUBACK报文给客户端, 用于确认它已收到并且正在处理SUBSCRIBE报文。
10 )UNSUBSCRIBE –取消订阅:客户端发送UNSUBSCRIBE报文给服务端, 用于取消订阅主题。
11 )UNSUBACK – 取消订阅确认:服务端发送UNSUBACK报文给客户端用于确认收到UNSUBSCRIBE报文。
12 )PINGREQ – 心跳请求:客户端发送PINGREQ报文给服务端的。 用于:1. 在没有任何其它控制报文从客户端发给服务的时, 告知服务端客户端还活着。2. 请求服务端发送 响应确认它还活着。3. 使用网络以确认网络连接没有断开。
13 )PINGRESP – 心跳响应:服务端发送PINGRESP报文响应客户端的PINGREQ报文。 表示服务端还活着。
14 )DISCONNECT –断开连接:DISCONNECT报文是客户端发给服务端的最后一个控制报文。 表示客户端正常断开连接。

4.MQTT消息的QOS

上面所提到的QOS指的是 MQTT支持三种QOS等级:
QoS 0:“最多一次”,消息发布完全依赖底层 TCP/IP 网络。分发的消息可能丢失或重复。例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久后还会有第二次发送。
QoS 1:“至少一次”,确保消息可以到达,但消息可能会重复。
QoS 2:“只有一次”,确保消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费。

5. MQTT协议数据包结构

在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。MQTT数据包结构如下:
(1)固定头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
(2)可变头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
(3)消息体(Payload)。存在于部分MQTT数据包中,表示客户端收到的具体内容。

Fixed headeVariable headerPayload
固定报: 所有控制报文都包含可变比报头: 部分控制报文包含有效载荷: 部分控制报文包含

5.1 MQTT数据包类型

位置:byte 1, bits 7-4。
在这里插入图片描述
相于一个4位的无符号值,类型如下:
在这里插入图片描述
结束:下一篇更新MQTT跑在TLS上,安全性的保障是如何实施。敬请期待

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_39224267/article/details/110993801

hackthebox-changllenge-web-looking glass-爱代码爱编程

能输入ip地址,试试看命令执行 尝试 &&  ; 拼接ls命令 ;成功 cat 一下看看 <?php function getUserIp() {     return $_SERVER['REMOTE_ADDR']; } function runTest($tes

less2整数型注入-爱代码爱编程

打开后发现与less1一样,提示请输入参数id,并为它赋一个数字值。 1、寻找注入点 输入?id=1正常;输入?id=1’报错,说明存在sql注入漏洞。 输入?id=1 and 1=1正常,输入?id=1 and 1=2页面显示不正常。 猜测查询语句如下: SELECT * FROM users WHERE id=$id LIMIT 0,1 说

pikachu xss攻击模块 信息安全 xss漏洞 详细分析-爱代码爱编程

XSS攻击 跨站脚本漏洞测试流程反射型xss(get)反射型xss(post)存储型xss实例:xss钓鱼DOM型xssDom型xss-xXss盲打Xss之过滤Xss之htmlspecialcharsXss之href输出Xss之js输出Xss常见防范措施 跨站脚本漏洞测试流程 在目标站点上找到输入点,比如查询接口,留言板等。输入一

中毒.Delta865qqz后缀的文件该如何解决?-爱代码爱编程

  什么是.Delta865qqz勒索病毒? 名称 .Delta865qqz勒索病毒 文件扩展名 .Globeimposter-.Delta865qqz 类型 勒索病毒 家庭 GlobeImposter 简短的介绍 勒索病毒会加密存储在系统中的所有数据,并要求您支付一定的赎金以恢复重要文件。 病征 勒索病毒通过AES和RSA加密

实时嵌入式系统隐患分析与安全保障-爱代码爱编程

从2020年第2期开始,《单片机与嵌入式系统应用》开始推出“卷首语”栏目,每期邀请一位业内专家围绕嵌入式技术针对时下热点分享自己的观点,以飨广大嵌入式技术从业者/爱好者。今天发表的这篇文章是2020年第12期的卷首语! 卷首语 实时嵌入式系统隐患分析与安全保障 谢国琪 湖南大学信息科学与工程学院 实时嵌入式系统是嵌入式系统的一个

【直播预告】攻防对抗+溯源反制 创宇蜜罐实战应用分享-爱代码爱编程

“网络安全的本质是对抗,对抗的本质是攻防两端能力的较量。” 不管是每年的网络攻防专项行动,还是重要时期网络信息安全保障都逐渐成为众多政府、企业用户的工作日常,高对抗性俨然成为网络安全攻防的标志性特征。 实战永远是检验安全产品与防护体系的重要契机,在越来越注重实战性与对抗性的网络安全攻防中,毫无疑问固守防守已经无法满足对抗需求。 抵御网络

渗透测试:使用phpstudy搭建bwapp/dvwa/phpcms/pikachu环境-爱代码爱编程

使用phpstudy搭建bwapp/dvwa/phpcms/pikachu环境 使用phpstudy搭建PHP环境使用phpstudy搭建bwapp使用phpstudy搭建dvwa使用phpstudy搭建phpcms v9使用phpstudy搭建pikachu软件 使用phpstudy搭建PHP环境 phpStudy:是一个PHP调试环境的程

渗透测试必备技能,踩点信息收集-爱代码爱编程

收集哪些信息? 服务器信息(端口,服务,真实ip)网站信息(服务器操作系统,中间件,数据库.编程语言,敏感目录与文件)域名信息收集(whois,备案信息,子域名收集)网站管理员信息(姓名,职务,生日)域名信息收集方法 whois介绍: 是用来查询域名IP以及所有者等信息的传输协议; Whois查询方法web接口查询 阿里云查询域名信息查询(WHOI

less2整数型注入-爱代码爱编程

打开后发现与less1一样,提示请输入参数id,并为它赋一个数字值。 1、寻找注入点 输入?id=1正常;输入?id=1’报错,说明存在sql注入漏洞。 输入?id=1 and 1=1正常,输入?id=1 and 1=2页面显示不正常。 猜测查询语句如下: SELECT * FROM users WHERE id=$id LIMIT 0,1 说

DoS、DDoS工具Cobalt Strike-爱代码爱编程

Cobalt Strike 简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS。最近这个工具大火,成为了渗透测试中不可缺少的利器。其拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket代理,office攻击,文件捆绑,钓鱼等功能。同时,Cobalt Strike还可以调用Mimikatz等

JBoss Application Server 反序列化漏洞-爱代码爱编程

JBoss Application Server 反序列化漏洞 CVE-2017-12149 http://192.168.11.123:8080/invoker/readonly 1:执行生成二进制的payload文件 javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollec

Kioptrix 2014 (#5)-爱代码爱编程

目标:Kioptrix 2014 (#5) 攻击机:kali(192.168.1.107) 网关:192.168.1.255   #1端口探测 nmap 192.168.1.159 -O -sV -sS -O 系统探测 -sV 探测开启的端口来获取服务、版本信息 -sS 使用SYN扫描 #2访问80和8080端口 查看网页源代码