MQTT 关键词 ============= 多种关键词可用于匹配MQTT消息固定头、可变头中的字段以及负载值。 mqtt.protocol_version --------------------- 匹配固定头中的MQTT协议版本字段值。 mqtt.protocol_version使用 :ref:`8位无符号整数 `。 关键词格式:: mqtt.protocol_version:<最小值>-<最大值>; mqtt.protocol_version:[<|>]<数值>; mqtt.protocol_version:<具体值>; 示例: mqtt.protocol_version:5; mqtt.type --------- 匹配MQTT消息类型(即控制报文类型)。 有效值包括: * ``CONNECT`` * ``CONNACK`` * ``PUBLISH`` * ``PUBACK`` * ``PUBREC`` * ``PUBREL`` * ``PUBCOMP`` * ``SUBSCRIBE`` * ``SUBACK`` * ``UNSUBSCRIBE`` * ``UNSUBACK`` * ``PINGREQ`` * ``PINGRESP`` * ``DISCONNECT`` * ``AUTH`` * ``UNASSIGNED`` 其中 ``UNASSIGNED`` 指代类型码为0的消息。 mqtt.type使用 :ref:`8位无符号整数 `。 示例:: mqtt.type:CONNECT; mqtt.type:PUBLISH; mqtt.type:2; mqtt.flags ---------- 匹配MQTT头部标志位的组合,用逗号(``,``)分隔。标志前可加``!``表示取反,即带``!``前缀的标志必须未设置才能匹配。 mqtt.flags使用 :ref:`8位无符号整数 ` 有效标志: * ``dup``(重复消息标志) * ``retain``(消息应在代理保留标志) 示例:: mqtt.flags:dup,!retain; mqtt.flags:retain; mqtt.qos -------- 匹配MQTT固定头中的服务质量等级代码。 有效值: * ``0``(至多一次) * ``1``(至少一次) * ``2``(精确一次) 示例:: mqtt.qos:0; mqtt.qos:2; mqtt.reason_code ---------------- 匹配MQTT 5.0中部分消息类型使用的数字原因码。具体含义请参考规范,这些值通常与特定消息类型相关。 mqtt.reason_code使用 :ref:`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`` 表示。 mqtt.connack.session_present ---------------------------- 匹配MQTT CONNACK报文的``session_present``标志。可选值为``yes``、``true``、``no``或``false``。 示例:: mqtt.CONNACK; mqtt.connack.session_present:true; mqtt.connect.clientid --------------------- 匹配MQTT CONNECT消息中客户端自分配的ID。 示例:: mqtt.connect.clientid; pcre:"/^mosq.*/"; mqtt.connect.clientid; content:"myclient"; ``mqtt.connect.clientid`` 是'粘性缓冲区',可用作 ``fast_pattern``。 mqtt.connect.flags ------------------ 匹配MQTT CONNECT标志位的组合,用逗号(``,``)分隔。标志前可加``!``表示取反,即带``!``前缀的标志必须未设置才能匹配。 mqtt.connect.flags使用 :ref:`8位无符号整数 ` 有效标志: * ``username``(包含用户名) * ``password``(包含密码) * ``will``(包含遗嘱定义) * ``will_retain``(遗嘱应在代理保留) * ``clean_session``(以干净会话开始) 示例:: mqtt.connect.flags:username,password,!will; mqtt.connect.flags:username,!password; mqtt.connect.flags:clean_session; mqtt.connect.password --------------------- 匹配MQTT CONNECT消息中的密码凭证。 示例:: mqtt.connect.password; pcre:"/^123[0-9]*/"; mqtt.connect.password; content:"swordfish"; ``mqtt.connect.password`` 是'粘性缓冲区',可用作 ``fast_pattern``。 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``。 mqtt.connect.username --------------------- 匹配MQTT CONNECT消息中的用户名凭证。 示例:: mqtt.connect.username; content:"benson"; ``mqtt.connect.username`` 是'粘性缓冲区',可用作 ``fast_pattern``。 mqtt.connect.willmessage ------------------------ 匹配MQTT CONNECT消息中定义的遗嘱消息(如果存在遗嘱)。 示例:: mqtt.connect.willmessage; pcre:"/^fooba[rz]/"; mqtt.connect.willmessage; content:"hunter2"; ``mqtt.connect.willmessage`` 是'粘性缓冲区',可用作 ``fast_pattern``。 mqtt.connect.willtopic ---------------------- 匹配MQTT CONNECT消息中定义的遗嘱主题(如果存在遗嘱)。 示例:: mqtt.connect.willtopic; pcre:"/^hunter[0-9]/"; ``mqtt.connect.willtopic`` 是'粘性缓冲区',可用作 ``fast_pattern``。 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``。 mqtt.publish.topic ------------------ 匹配MQTT PUBLISH消息中要发布到的主题。 示例:: mqtt.publish.topic; content:"mytopic"; ``mqtt.publish.topic`` 是'粘性缓冲区',可用作 ``fast_pattern``。 mqtt.subscribe.topic -------------------- 匹配MQTT SUBSCRIBE消息中订阅的任意主题。 示例:: mqtt.subscribe.topic; content:"mytopic"; ``mqtt.subscribe.topic`` 是'粘性缓冲区',可用作 ``fast_pattern``。 ``mqtt.subscribe.topic`` 支持多缓冲区匹配,参见 :doc:`multi-buffer-matching`。 mqtt.unsubscribe.topic ---------------------- 匹配MQTT UNSUBSCRIBE消息中取消订阅的任意主题。 示例:: mqtt.unsubscribe.topic; content:"mytopic"; ``mqtt.unsubscribe.topic`` 是'粘性缓冲区',可用作 ``fast_pattern``。 ``mqtt.unsubscribe.topic`` 支持多缓冲区匹配,参见 :doc:`multi-buffer-matching`。 补充信息 ---------------------- 更多协议信息请参考: * MQTT 3.1: ``_ * MQTT 3.1.1: ``_ * MQTT 5.0: ``_