10.34. MQTT 关键词¶
多种关键词可用于匹配MQTT消息固定头、可变头中的字段以及负载值。
10.34.1. mqtt.protocol_version¶
匹配固定头中的MQTT协议版本字段值。
mqtt.protocol_version使用 8位无符号整数。
关键词格式:
mqtt.protocol_version:<最小值>-<最大值>;
mqtt.protocol_version:[<|>]<数值>;
mqtt.protocol_version:<具体值>;
示例:
mqtt.protocol_version:5;
10.34.2. mqtt.type¶
匹配MQTT消息类型(即控制报文类型)。 有效值包括:
CONNECT
CONNACK
PUBLISH
PUBACK
PUBREC
PUBREL
PUBCOMP
SUBSCRIBE
SUBACK
UNSUBSCRIBE
UNSUBACK
PINGREQ
PINGRESP
DISCONNECT
AUTH
UNASSIGNED
其中 UNASSIGNED
指代类型码为0的消息。
mqtt.type使用 8位无符号整数。
示例:
mqtt.type:CONNECT;
mqtt.type:PUBLISH;
mqtt.type:2;
10.34.3. mqtt.flags¶
匹配MQTT头部标志位的组合,用逗号(,
)分隔。标志前可加``!``表示取反,即带``!``前缀的标志必须未设置才能匹配。
mqtt.flags使用 8位无符号整数
有效标志:
示例:
mqtt.flags:dup,!retain;
mqtt.flags:retain;
10.34.4. mqtt.qos¶
匹配MQTT固定头中的服务质量等级代码。 有效值:
示例:
mqtt.qos:0;
mqtt.qos:2;
10.34.5. mqtt.reason_code¶
匹配MQTT 5.0中部分消息类型使用的数字原因码。具体含义请参考规范,这些值通常与特定消息类型相关。
mqtt.reason_code使用 8位无符号整数。
示例:
# 匹配取消订阅未订阅主题的情况
mqtt.type:UNSUBACK; mqtt.reason_code:17;
# 匹配无订阅者时被接受的发布
mqtt.type:PUBACK; mqtt.reason_code:16;
# 匹配被封禁客户端的连接尝试
mqtt.CONNACK; mqtt.reason_code:138;
# 匹配因凭证错误导致的连接失败
mqtt.CONNACK; mqtt.reason_code:134;
# 匹配服务器关闭导致的连接终止
mqtt.DISCONNECT; mqtt.reason_code:139;
为保持完整性,该关键词也可用别名 mqtt.connack.return_code
表示。
10.34.6. mqtt.connack.session_present¶
匹配MQTT CONNACK报文的``session_present``标志。可选值为``yes``、true
、no``或``false
。
示例:
mqtt.CONNACK; mqtt.connack.session_present:true;
10.34.7. mqtt.connect.clientid¶
匹配MQTT CONNECT消息中客户端自分配的ID。
示例:
mqtt.connect.clientid; pcre:"/^mosq.*/";
mqtt.connect.clientid; content:"myclient";
mqtt.connect.clientid
是'粘性缓冲区',可用作 fast_pattern
。
10.34.8. mqtt.connect.flags¶
匹配MQTT CONNECT标志位的组合,用逗号(,
)分隔。标志前可加``!``表示取反,即带``!``前缀的标志必须未设置才能匹配。
mqtt.connect.flags使用 8位无符号整数
有效标志:
``username``(包含用户名)
``password``(包含密码)
``will``(包含遗嘱定义)
``will_retain``(遗嘱应在代理保留)
``clean_session``(以干净会话开始)
示例:
mqtt.connect.flags:username,password,!will;
mqtt.connect.flags:username,!password;
mqtt.connect.flags:clean_session;
10.34.9. mqtt.connect.password¶
匹配MQTT CONNECT消息中的密码凭证。
示例:
mqtt.connect.password; pcre:"/^123[0-9]*/";
mqtt.connect.password; content:"swordfish";
mqtt.connect.password
是'粘性缓冲区',可用作 fast_pattern
。
10.34.10. mqtt.connect.protocol_string¶
匹配MQTT CONNECT消息中的协议字符串。与``mqtt.protocol_version``不同,此属性仅在初始CONNECT通信中相关,后续不再使用,因此归类在``mqtt.connect``下。
示例:
mqtt.connect.protocol_string; content:"MQTT";
mqtt.connect.protocol_string; content:"MQIsdp";
mqtt.connect.protocol_string
是'粘性缓冲区',可用作 fast_pattern
。
10.34.11. mqtt.connect.username¶
匹配MQTT CONNECT消息中的用户名凭证。
示例:
mqtt.connect.username; content:"benson";
mqtt.connect.username
是'粘性缓冲区',可用作 fast_pattern
。
10.34.12. mqtt.connect.willmessage¶
匹配MQTT CONNECT消息中定义的遗嘱消息(如果存在遗嘱)。
示例:
mqtt.connect.willmessage; pcre:"/^fooba[rz]/";
mqtt.connect.willmessage; content:"hunter2";
mqtt.connect.willmessage
是'粘性缓冲区',可用作 fast_pattern
。
10.34.13. mqtt.connect.willtopic¶
匹配MQTT CONNECT消息中定义的遗嘱主题(如果存在遗嘱)。
示例:
mqtt.connect.willtopic; pcre:"/^hunter[0-9]/";
mqtt.connect.willtopic
是'粘性缓冲区',可用作 fast_pattern
。
10.34.14. mqtt.publish.message¶
匹配MQTT PUBLISH消息中要发布的负载内容。
示例:
mqtt.type:PUBLISH; mqtt.publish.message; pcre:"/uid=[0-9]+/";
# 匹配发布的JPEG图片
mqtt.type:PUBLISH; mqtt.publish.message; content:"|FF D8 FF E0|"; startswith;
mqtt.publish.message
是'粘性缓冲区',可用作 fast_pattern
。
10.34.15. mqtt.publish.topic¶
匹配MQTT PUBLISH消息中要发布到的主题。
示例:
mqtt.publish.topic; content:"mytopic";
mqtt.publish.topic
是'粘性缓冲区',可用作 fast_pattern
。
10.34.16. mqtt.subscribe.topic¶
匹配MQTT SUBSCRIBE消息中订阅的任意主题。
示例:
mqtt.subscribe.topic; content:"mytopic";
mqtt.subscribe.topic
是'粘性缓冲区',可用作 fast_pattern
。
mqtt.subscribe.topic
支持多缓冲区匹配,参见 多缓冲区匹配。
10.34.17. mqtt.unsubscribe.topic¶
匹配MQTT UNSUBSCRIBE消息中取消订阅的任意主题。
示例:
mqtt.unsubscribe.topic; content:"mytopic";
mqtt.unsubscribe.topic
是'粘性缓冲区',可用作 fast_pattern
。
mqtt.unsubscribe.topic
支持多缓冲区匹配,参见 多缓冲区匹配。
10.34.18. 补充信息¶
更多协议信息请参考: