使用Mosquitto/python3进行MQTT连接

一、简介

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。
使用Mosquitto/python3进行MQTT连接_第1张图片

MQTT传输的消息分为主题Topic和负载payload,当订阅指定的Topic后,就会收到该Topic下的消息内容payload。

二、mosquitto使用

安装

https://mosquitto.org/download/

windows:
使用Mosquitto/python3进行MQTT连接_第2张图片
linux:

apt install mosquitto

开启broker

C:\Program Files\mosquitto>mosquitto.exe --help
C:\Program Files\mosquitto>mosquitto.exe -p 5555 -v

使用Mosquitto/python3进行MQTT连接_第3张图片

开启Subscriber

指定broker并指定"test"的topic进行订阅

C:\Program Files\mosquitto>mosquitto_sub.exe --help
C:\Program Files\mosquitto>mosquitto_sub.exe -h 127.0.0.1 -p 5555 -t  "test"

使用Publisher发送消息

指定"test"的topic发送payload为123的消息:

C:\Program Files\mosquitto>mosquitto_pub.exe --help
C:\Program Files\mosquitto>mosquitto_pub.exe -h 127.0.0.1 -p 5555 -t "test" -m "123"

在这里插入图片描述
此时的Subscriber:
在这里插入图片描述

三、解决TLS证书问题

使用mosquitto_sub时,因为tcp传输问题不成功:
使用Mosquitto/python3进行MQTT连接_第4张图片
原因是证书问题,导致TCP握手并不成功,图为携带证书后的结果:
在这里插入图片描述
为解决该问题,首先pip安装如下库:

pip3 install paho-mqtt

使用如下代码:

import ssl
import paho.mqtt.client as mqtt

# 定义回调函数,处理接收到的消息
def on_message(client, userdata, msg):
    print(f"Topic: {msg.topic}, Message: {msg.payload.decode('utf-8')}")

# 定义回调函数,处理连接事件
def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    # 订阅主题
    client.subscribe("your/topic")

# 创建 MQTT 客户端
client = mqtt.Client()
# 设置连接和消息回调函数
client.on_connect = on_connect
client.on_message = on_message
# 禁用证书认证
client.tls_set(ca_certs=None, certfile=None, keyfile=None, cert_reqs=ssl.CERT_NONE, tls_version=ssl.PROTOCOL_TLS, ciphers=None)
# 连接到 MQTT 代理服务器
client.connect("your_host_address", 8883, 60)
# 开始处理消息循环
client.loop_start()

# 保持连接
while True:
    pass

# 停止消息循环
client.loop_stop()

# 断开与 MQTT 代理服务器的连接
client.disconnect()

结果成功订阅:
使用Mosquitto/python3进行MQTT连接_第5张图片

你可能感兴趣的:(IoT安全,MQTT,IoT渗透测试,网络安全,python,mosquitto)