基于动态规则匹配的MQTT消息过滤方法及系统与流程

文档序号:15170285发布日期:2018-08-14 17:53阅读:698来源:国知局

本发明涉及mqtt消息过滤领域,具体是涉及一种基于动态规则匹配的mqtt消息过滤方法及系统。



背景技术:

随着移动互联网步入发展的巅峰,越来越多的公司将注意力转移到物联网的发展上。在国外,苹果公司已经推出了其较成熟的智能家居解决方案,而在国内,华为、小米等新兴互联网公司也推出了其各自的智能家居物联网解决方案。在这些各具特色的解决方案中,mqtt(messagequeuingtelemetrytransport,消息队列遥测传输)协议由于其低开销、低带宽等特点而广受关注,并受到广泛应用。mqtt协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,已经得到广泛应用。

目前的主要智能家居解决方案中,mqtt协议主要用于处理平台与智能设备间的即时通信,部分应用于android、ios系统的客户端推送服务上。而在互联网领域,mqtt也被微信等互联网应用所使用。对于基于mqtt协议形成的客户端来说,使用mqtt协议的操作有发布/订阅消息、发送和接收消息,流程较简单。而对于mqtt服务器来说,处理多并发的消息、将消息按照类型等分类进行归档和定点推送是主要工作。

在某些应用中,可能需要对收到的客户端消息进行某种特殊的操作,例如消息拦截、复制、二次分发等,需要针对性地开发特定的拦截器插件,怎样对收到的消息进行分类识别、同时保证收到的消息的有效性,是进行mqtt服务器开发亟需解决的问题。



技术实现要素:

本发明的目的是为了克服上述背景技术的不足,提供一种基于动态规则匹配的mqtt消息过滤方法及系统,能够快速、准确地将消息进行分类过滤,将过滤后的消息分发出去。

本发明提供一种基于动态规则匹配的mqtt消息过滤方法,包括以下步骤:

s1、根据mqtt协议自定义规则文件,每条规则包括规则头部rtn、规则选项otn,规则头部rtn填充有数据包的控制信息,规则选项otn描述数据包的定义信息、满足触发条件时处理数据包的规则动作;将规则文件加载到内存中,形成规则链表并保存;

s2、若数据是分片传输,待所有的数据分片到达mqtt服务器后,对所有的数据分片重新进行组装,形成完整的数据包;若数据不是分片传输,则不组装;

s3、根据规则链表对数据包进行规则匹配、过滤,一次匹配完成后,调整此次匹配上的otn节点对应的索引位置,并添加一个指向该索引位置的定位指针,下次匹配从该定位指针标记的位置开始匹配;若匹配不成功,则跳到规则首节点,进行下一次匹配;

s4、匹配过程完成后,输出过滤数据,将有效数据导出,传回给mqtt服务器进行分发,并对未通过的数据进行记录输出。

在上述技术方案的基础上,所述规则头部rtn包括协议类型、源ip地址、目的ip地址和端口类型。

在上述技术方案的基础上,所述规则链表包括链表头节点、节点表、规则树节点、特征参数匹配节点、选项树节点。

在上述技术方案的基础上,所述满足触发条件时处理数据包的规则动作包括:

alert:生成一个警报并记录;

log:记录当前数据包;

pass:丢弃当前数据包;

activate:产出警报并附带激活额外的匹配规则;

dynamic:保持空闲并等待被激活,激活后成为log执行规则。

在上述技术方案的基础上,步骤s3中,所述根据规则链表对数据包进行规则匹配、过滤的过程如下:

步骤301、导入待检测的数据包,若是第一次导入数据包,则需进行初始化:将otn规则匹配频率置为0,定位指针指向null;

步骤302、根据规则头部rtn进行基本规则匹配;

步骤303、进行sn节点规则匹配,sn节点记录的是otn中的重复特征参数,若sn匹配成功,则结束;若sn匹配失败,则转到步骤304;

步骤304、根据规则选项otn进行otn规则匹配,otn规则匹配频率取值为0、1、2、3,检查otn规则匹配频率是否为3,若是,转到步骤305;否则转到步骤306;

步骤305、otn规则匹配频率保持3不变,定位指针指向当前otn的索引链表的首位不变,返回步骤301;

步骤306、检查otn规则匹配频率是否为2,若是,则转到步骤307;否则转到步骤308;

步骤307、otn规则匹配频率增加1,并将otn规则节点对应的索引位置上调到当索引链表的首位,定位指针指向新索引位置,返回步骤301;

步骤308、检查otn规则匹配频率是否为1,若是,转到步骤309;否则转到步骤310;

步骤309、otn规则匹配频率增加1,并将otn规则节点对应的索引位置上调到当前位置值的1/2处,定位指针指向新索引位置,返回步骤301;

步骤310、otn规则匹配频率增加1,并将otn规则节点对应的索引位置上调到当前位置值的2/3处,定位指针指向新索引位置,返回到步骤301。

本发明还提供一种基于动态规则匹配的mqtt消息过滤系统,该系统包括自定义模块、规则链表形成模块、预处理模块、规则匹配过滤模块、输出模块,其中:

自定义模块用于:根据mqtt协议自定义规则文件,每条规则包括规则头部rtn、规则选项otn,规则头部rtn填充有数据包的控制信息,规则选项otn描述数据包的定义信息、满足触发条件时处理数据包的规则动作;

规则链表形成模块用于:将规则文件加载到内存中,形成规则链表并保存;

预处理模块用于:若数据是分片传输,待所有的数据分片到达mqtt服务器后,对所有的数据分片重新进行组装,形成完整的数据包;若数据不是分片传输,则不组装;

规则匹配过滤模块用于:根据规则链表对数据包进行规则匹配、过滤,一次匹配完成后,调整此次匹配上的otn节点对应的索引位置,并添加一个指向该索引位置的定位指针,下次匹配从该定位指针标记的位置开始匹配;若匹配不成功,则跳到规则首节点,进行下一次匹配;

输出模块用于:匹配过程完成后,输出过滤数据,将有效数据导出,传回给mqtt服务器进行分发,并对未通过的数据进行记录输出。

在上述技术方案的基础上,所述规则头部rtn包括协议类型、源ip地址、目的ip地址和端口类型。

在上述技术方案的基础上,所述规则链表包括链表头节点、节点表、规则树节点、特征参数匹配节点、选项树节点。

在上述技术方案的基础上,所述满足触发条件时处理数据包的规则动作包括:

alert:生成一个警报并记录;

log:记录当前数据包;

pass:丢弃当前数据包;

activate:产出警报并附带激活额外的匹配规则;

dynamic:保持空闲并等待被激活,激活后成为log执行规则。

在上述技术方案的基础上,所述规则匹配过滤模块根据规则链表对数据包进行规则匹配、过滤的过程如下:

步骤301、导入待检测的数据包,若是第一次导入数据包,则需进行初始化:将otn规则匹配频率置为0,定位指针指向null;

步骤302、根据规则头部rtn进行基本规则匹配;

步骤303、进行sn节点规则匹配,sn节点记录的是otn中的重复特征参数,若sn匹配成功,则结束;若sn匹配失败,则转到步骤304;

步骤304、根据规则选项otn进行otn规则匹配,otn规则匹配频率取值为0、1、2、3,检查otn规则匹配频率是否为3,若是,转到步骤305;否则转到步骤306;

步骤305、otn规则匹配频率保持3不变,定位指针指向当前otn的索引链表的首位不变,返回步骤301;

步骤306、检查otn规则匹配频率是否为2,若是,则转到步骤307;否则转到步骤308;

步骤307、otn规则匹配频率增加1,并将otn规则节点对应的索引位置上调到当索引链表的首位,定位指针指向新索引位置,返回步骤301;

步骤308、检查otn规则匹配频率是否为1,若是,转到步骤309;否则转到步骤310;

步骤309、otn规则匹配频率增加1,并将otn规则节点对应的索引位置上调到当前位置值的1/2处,定位指针指向新索引位置,返回步骤301;

步骤310、otn规则匹配频率增加1,并将otn规则节点对应的索引位置上调到当前位置值的2/3处,定位指针指向新索引位置,返回到步骤301。

与现有技术相比,本发明的优点如下:

(1)本发明能够快速、准确地将消息进行分类过滤,并将分类过滤的消息进行特定处理,通过服务器插件将过滤后的消息分发出去,同时区分收到的消息的可靠性,对一些常见的攻击消息具有一定的识别能力。

(2)mqtt服务器能够避免分发一些有误和无效的数据,并对这些数据能够进行查询,一定程度上保证了服务器的数据安全。

(3)本发明通过算法的改进,能够有效减少匹配时长,相同的待检数据包只进行一次匹配,即可被检测出。

(4)本发明能够快速、准确的识别特定消息,保证了对特定消息进行特定操作的时效性能。

(5)本发明提供自定义模块,能够方便服务器进行集成和实现自定义服务,常见的自定义服务是提供自定义规则文件导入服务。

附图说明

图1是本发明实施例中规则链表的结构示意图。

图2是本发明实施例中进行一次规则匹配的流程图。

图3是本发明实施例中根据规则链表对数据包进行规则匹配、过滤的流程图。

具体实施方式

下面结合附图及具体实施例对本发明作进一步的详细描述。

本发明实施例提供一种基于动态规则匹配的mqtt消息过滤方法,包括以下步骤:

s1、根据mqtt协议自定义规则文件,每条规则包括rtn(ruletreenode,规则头部)、otn(optionaltreenode,规则选项),规则头部rtn填充有数据包的控制信息,规则选项otn描述数据包的定义信息、满足触发条件时处理数据包的规则动作;将规则文件加载到内存中,形成规则链表并保存;

s2、若数据是分片传输,待所有的数据分片到达mqtt服务器后,对所有的数据分片重新进行组装,形成完整的数据包;若数据不是分片传输,则不组装;

s3、根据规则链表对数据包进行规则匹配、过滤,一次匹配完成后,调整此次匹配上的otn节点对应的索引位置,并添加一个指向该索引位置的定位指针,下次匹配从该定位指针标记的位置开始匹配;若匹配不成功,则跳到规则首节点,进行下一次匹配;相同的待检数据包只进行一次匹配,即可被检测出;

s4、匹配过程完成后,输出过滤数据,将有效数据导出,传回给mqtt服务器进行分发,并对未通过的数据进行记录输出。

规则是对待检数据的行为描述。本发明实施例采用规则头部、规则选项来描述一条具体的规则。规则头部主要包括信息如检测数据包的一些控制信息。规则头部包括协议类型、源ip地址、目的ip地址和端口类型。本发明实施例在规则头部中填充控制信息为协议类型tcp/ip。规则选项中描述了一个包的相关定义信息,及满足触发条件时处理数据包的规则动作。

满足触发条件时处理数据包的规则动作包括:

alert:生成一个警报并记录;

log:记录当前数据包;

pass:丢弃当前数据包;

activate:产出警报并附带激活额外的匹配规则;

dynamic:保持空闲并等待被激活,激活后成为log执行规则。

依据以上的预置类型,用户可以很好的得到输出结果,同时用户可以根据特定的需要,自定义自己需要的类型,并将自己定义的类型和一些输出模块结合,形成自己需求的规则动作。

规则选项部分位于规则头部之后,一般规则选项部分使用一对圆括号界定范围,由多个字段组成,并且不同的字段间使用“:”隔开,规则选项部分是进行规则匹配的核心内容,是匹配和执行功能的具体实现部分。

参见图1所示,规则链表包括链表头节点、节点表、规则树节点、特征参数匹配节点、选项树节点。图1中的sn节点是指otn中的重复特征参数集合,匹配过程在该层成功匹配后,就不需要通过otn节点匹配。图1中的“f”是添加的指向匹配成功节点的定位指针。本发明实施例对规则的解析是使用三维链表的方式维持规则结构的。规则结构首先按照响应动作的不同生成第一层,链表头节点,链表头节点的类型决定了匹配过程结束后会采取的动作,例如链表头节点为log类型的,则在该链表下的匹配过程结束后,会记录日志信息。第二层则是根据协议类型的不同生成相对应的规则树节点,即ip、tcp、udp和icmp规则树节点。同时,每个不同协议类型的规则树节点包含有一个完整规则的全部内容:规则头部(ruletreenode,rtn)、规则选项(optionaltreenode,otn)和函数指针。一个rtn节点下可以拥有多个otn节点。

参见图2所示,进行一次规则匹配的流程如下:

步骤201、进行初始化,主要进行规则的生成;

步骤202、导入待匹配的数据信息,进行规则匹配;

步骤203、判断规则匹配是否成功;若匹配成功,则转到步骤204;若匹配不成功,则转到步骤205;

步骤204、输出匹配结果,结束;

步骤205、判断是否达到本次匹配规则生成的规则链表的末尾,若是,本次匹配结束;若否,则转到步骤206;

步骤206、匹配下一条规则,返回步骤203。

参见图3所示,步骤s3中,根据规则链表对数据包进行规则匹配、过滤的过程如下:

步骤301、导入待检测的数据包,若是第一次导入数据包,则需进行初始化:将otn规则匹配频率置为0,定位指针指向null;

步骤302、根据规则头部rtn进行基本规则匹配;

步骤303、进行sn节点规则匹配,sn节点记录的是otn中的重复特征参数,若sn匹配成功,则结束;若sn匹配失败,则转到步骤304;

本发明实施例主要针对于mqtt协议的包进行匹配过滤,每个mqtt数据包都包含有一个2个字节的固定头部,第一个字节存储数据类型和标志字段,第二个字节表示剩余长度,在针对mqtt协议生成otn选项树节点时,会包含针对于固定头部的匹配项,因此可以将mqtt数据包的固定头部特征提取成sn节点的重复特征参数。

步骤304、根据规则选项otn进行otn规则匹配,otn规则匹配频率取值可以为0、1、2、3,初始值设为0,最大值为3,检查otn规则匹配频率是否为3,若是,转到步骤305;否则转到步骤306;

步骤305、otn规则匹配频率保持3不变,定位指针指向当前otn的索引链表的首位不变,返回步骤301;

步骤306、检查otn规则匹配频率是否为2,若是,则转到步骤307;否则转到步骤308;

步骤307、otn规则匹配频率增加1,并将otn规则节点对应的索引位置上调到当索引链表的首位,定位指针指向新索引位置,返回步骤301;

步骤308、检查otn规则匹配频率是否为1,若是,转到步骤309;否则转到步骤310;

步骤309、otn规则匹配频率增加1,并将otn规则节点对应的索引位置上调到当前位置值的1/2处,定位指针指向新索引位置,返回步骤301;

步骤310、otn规则匹配频率增加1,并将otn规则节点对应的索引位置上调到当前位置值的2/3处,定位指针指向新索引位置,返回步骤301。

本发明实施例还提供一种基于动态规则匹配的mqtt消息过滤系统,该系统包括自定义模块、规则链表形成模块、预处理模块、规则匹配过滤模块、输出模块,其中:

自定义模块用于:根据mqtt协议自定义规则文件,每条规则包括规则头部rtn、规则选项otn,规则头部rtn填充有数据包的控制信息,规则选项otn描述数据包的定义信息、满足触发条件时处理数据包的规则动作;

规则链表形成模块用于:将规则文件加载到内存中,形成规则链表并保存;

预处理模块用于:若数据是分片传输,待所有的数据分片到达mqtt服务器后,对所有的数据分片重新进行组装,形成完整的数据包;若数据不是分片传输,则不组装;

规则匹配过滤模块用于:根据规则链表对数据包进行规则匹配、过滤,一次匹配完成后,调整此次匹配上的otn节点对应的索引位置,并添加一个指向该索引位置的定位指针,下次匹配从该定位指针标记的位置开始匹配;若匹配不成功,则跳到规则首节点,进行下一次匹配;相同的待检数据包只进行一次匹配,即可被检测出;

输出模块用于:匹配过程完成后,输出过滤数据,将有效数据导出,传回给mqtt服务器进行分发,并对未通过的数据进行记录输出。

规则头部rtn包括协议类型、源ip地址、目的ip地址和端口类型。

规则链表包括链表头节点、节点表、规则树节点、特征参数匹配节点、选项树节点。

满足触发条件时处理数据包的规则动作包括:

alert:生成一个警报并记录;

log:记录当前数据包;

pass:丢弃当前数据包;

activate:产出警报并附带激活额外的匹配规则;

dynamic:保持空闲并等待被激活,激活后成为log执行规则。

规则匹配过滤模块根据规则链表对数据包进行规则匹配、过滤的过程如下:

步骤301、导入待检测的数据包,若是第一次导入数据包,则需进行初始化:将otn规则匹配频率置为0,定位指针指向null;

步骤302、根据规则头部rtn进行基本规则匹配;

步骤303、进行sn节点规则匹配,sn节点记录的是otn中的重复特征参数,若sn匹配成功,则结束;若sn匹配失败,则转到步骤304;

步骤304、根据规则选项otn进行otn规则匹配,otn规则匹配频率取值可以为0、1、2、3,初始值设为0,最大值为3,检查otn规则匹配频率是否为3,若是,转到步骤305;否则转到步骤306;

步骤305、otn规则匹配频率保持3不变,定位指针指向当前otn的索引链表的首位不变,返回步骤301;

步骤306、检查otn规则匹配频率是否为2,若是,则转到步骤307;否则转到步骤308;

步骤307、otn规则匹配频率增加1,并将otn规则节点对应的索引位置上调到当索引链表的首位,定位指针指向新索引位置,返回步骤301;

步骤308、检查otn规则匹配频率是否为1,若是,转到步骤309;否则转到步骤310;

步骤309、otn规则匹配频率增加1,并将otn规则节点对应的索引位置上调到当前位置值的1/2处,定位指针指向新索引位置,返回步骤301;

步骤310、otn规则匹配频率增加1,并将otn规则节点对应的索引位置上调到当前位置值的2/3处,定位指针指向新索引位置,返回到步骤301。

本发明实施例利用规则匹配算法,对收到的消息进行规则匹配识别,最终输出分发的过滤消息。基于此,整个系统可分为:自定义模块、规则链表形成模块、预处理模块、规则匹配过滤模块、输出模块,自定义模块是可扩展模块,可支持规则的自定义,即可以通过自定义模块提交自定义的规则文件,并在规则链表形成模块中生成规则链表;预处理模块主要是对截获到的数据包进行预处理操作;规则匹配过滤模块的功能是对已经进行过预处理的数据进行更深入的匹配,过滤数据;输出模块将过滤后的数据进行入库,分发等操作。

本领域的技术人员可以对本发明实施例进行各种修改和变型,倘若这些修改和变型在本发明权利要求及其等同技术的范围之内,则这些修改和变型也在本发明的保护范围之内。

说明书中未详细描述的内容为本领域技术人员公知的现有技术。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1