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位无符号整数

有效标志:

  • ``dup``(重复消息标志)

  • ``retain``(消息应在代理保留标志)

示例:

mqtt.flags:dup,!retain;
mqtt.flags:retain;

10.34.4. mqtt.qos

匹配MQTT固定头中的服务质量等级代码。 有效值:

  • ``0``(至多一次)

  • ``1``(至少一次)

  • ``2``(精确一次)

示例:

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``、trueno``或``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. 补充信息

更多协议信息请参考: