一种规则匹配方法及装置制造方法

文档序号:6527342阅读:219来源:国知局
一种规则匹配方法及装置制造方法
【专利摘要】本发明实施例提供一种规则匹配方法及装置,涉及通信领域,能够提高报文处理速度、减少规则的存储空间,以及提高报文的匹配效率。该方法包括:接收第一报文;通过DFA匹配第一报文中的多个字符;当确定DFA的当前状态为前缀接受态,且满足匹配条件时,开启第一计数器,保存第一字符的偏移地址;同时以每次匹配x个连续字符的方式对该多个字符进行匹配,以确定匹配的n个连续字符,并根据该次确定的n个连续字符的偏移地址对更新第一计数器的值;当确定DFA的当前状态为后缀接受态时,保存第二字符的偏移地址;根据第一字符和第二字符的偏移地址、更新后的第一计数器的值、规则的后缀长度及字符重复次数判断第一报文是否满足第一规则。
【专利说明】—种规则匹配方法及装置【技术领域】
[0001]本发明涉及通信领域,尤其涉及一种规则匹配方法及装置。
【背景技术】
[0002]随着网络技术的深入发展,网络应用越来越广泛,网络应用中攻击报文的形式和种类也越来越复杂。
[0003]目前通常采用正则表达式来描述报文的特征,并使用有限自动机匹配该正则表达式,以快速识别出具有攻击性的报文。
[0004]现有技术中,对于重复次数较多的正则表达式,一般采用NFA (NondeterministicFinite Automaton,不确定的有限自动机)和 DFA (Deterministic Finite Automaton,确定的有限自动机)来进行匹配。若采用NFA进行匹配,则需将整个匹配规则编译为NFA,从而以判别接收到的报文的正则表达式是否与该匹配规则匹配;若采用DFA,则需将匹配规则的前缀和后缀编译为包含有前缀接受态和后缀接受态的DFA,并采用计数器和DFA同步对接收到的报文的正则表达式中的每个字符进行判断,从而以判别该报文的正则表达式是否与该匹配规则匹配。
[0005]然而,在采用NFA进行匹配的过程中,由于NFA的状态跳转具有不确定性而使得报文处理速度较慢,且将整条匹配规则编译为NFA时需要较大的存储空间;在采用DFA进行匹配的过程中,由于无法找到前缀接受态的死状态,从而不能提前结束DFA的状态跳转,因此,导致匹配效率较低。

【发明内容】

[0006]本发明实施例提供一种规则匹配方法及装置,能够提高报文处理速度,减少规则的存储空间,以及提高报文的匹 配效率。
[0007]为达到上述目的,本发明实施例采用如下技术方案:
[0008]第一方面,本发明实施例提供一种规则匹配方法,用于对符合第一规则的报文进行匹配,所述第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数,包括:
[0009]接收第一报文,所述第一报文包括多个字符;
[0010]通过有限自动机DFA对所述第一报文中的多个字符进行匹配,其中,所述DFA包括前缀接受态和后缀接受态,所述DFA由更新后的第一规则编译后得到,所述更新后的第一规则包括所述前缀部分,更新后的中间部分,以及所述后缀部分;所述更新后的中间部分的正则表达式为
[0011]当通过所述DFA匹配确定所述DFA的当前状态为前缀接受态,并满足匹配条件时,开启第一计数器,并保存第一字符的偏移地址,所述第一字符为所述第一报文中使得所述DFA跳转至所述前缀接受态的字符,所述第一计数器用于对匹配的字符进行计数;
[0012]在通过所述DFA进行匹配的同时,以每次匹配X个连续字符的方式对所述第一报文中的多个字符进行匹配,以确定是否有一个或多个所述中间部分的字符,每当确定有η个连续字符是所述中间部分的字符时,保存该次确定的所述η个连续字符的偏移地址对,以及根据所述偏移地址对更新所述第一计数器的值,所述偏移地址对包括起始地址以及结束地址,所述起始地址为所述η个连续字符中的第一个字符的偏移地址,所述结束地址为所述η个连续字符中的第η个字符的偏移地址;其中,X为大于等于2的整数;η为大于等于I的整数;
[0013]当通过所述DFA匹配确定所述DFA的当前状态为所述后缀接受态时,保存第二字符的偏移地址,所述第二字符为所述第一报文中使得所述DFA跳转至所述后缀接受态的字符;[0014]根据所述第一字符的偏移地址、所述第二字符的偏移地址、更新后的所述第一计数器的值、所述第一规则的后缀部分的长度及所述字符重复次数判断所述第一报文是否满足所述第一规则。
[0015]在第一方面的第一种可能的实现方式中,当更新所述第一计数器的次数不等于所述字符重复次数时,所述方法还包括:
[0016]若Offset≥Begin且End-Offset+1 <m,则关闭所述第一计数器,其中,Offset为输入所述DFA的当前字符的偏移地址,Begin为与Offset的差值最小的所述η个连续字符中的第一个字符的偏移地址,End为与Offset的差值最小的所述η个连续字符中的第η个字符的偏移地址,m为所述字符重复次数。
[0017]结合前述的第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述匹配条件包括:
[0018]End-Offset+Ι≥m,其中,Offset为输入所述DFA的当前字符的偏移地址,End为与Offset的差值最小的所述η个连续字符中的第η个字符的偏移地址,m为所述字符重复次数;
[0019]或者,
[0020]未保存所述η个连续字符中的第η个字符的偏移地址。
[0021]结合前述的第一方面或第一方面的第一种可能的实现方式至第二种可能的实现方式中的任一种实现方式,在第三种可能的实现方式中,
[0022]当通过所述DFA匹配确定所述DFA的当前状态时,查询所述DFA的状态是否设置有死状态标志;
[0023]若所述DFA的状态设置有所述死状态标志,且所述第一计数器关闭,则结束所述DFA的状态跳转。
[0024]结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述查询所述DFA的状态是否设置有死状态标志之前,所述方法还包括:
[0025]获取所述DFA的有向图;
[0026]若在所述DFA的有向图中,获取到未与所述前缀接受态连接的状态,则将所述未与所述前缀接受态连接的状态设置一个所述死状态标志。
[0027]结合前述的第一方面或第一方面的第一种可能的实现方式至第四种可能的实现方式中的任一种实现方式,在第五种可能的实现方式中,所述根据所述第一字符的偏移地址、所述第二字符的偏移地址、更新后的所述第一计数器的值、所述第一规则的后缀部分的长度及所述字符重复次数判断所述第一报文是否满足所述第一规则,具体包括:
[0028]若所述第二字符的偏移地址与所述第一规则的后缀部分的长度之差大于等于,所述第一字符的偏移地址与所述字符重复次数之和,且所述第二字符的偏移地址与所述第一规则的后缀部分的长度之差小于等于,所述第一字符的偏移地址、所述字符重复次数及更新后的所述第一计数器的值之和,则判断所述第一报文满足所述第一规则。
[0029]结合前述的第一方面或第一方面的第一种可能的实现方式至第五种可能的实现方式中的任一种实现方式,在第六种可能的实现方式中,所述根据所述偏移地址对更新所述第一计数器的值,具体包括:
[0030]获取所述偏移地址对的长度,所述偏移地址对的长度为所述结束地址与所述起始地址之差,再加上I ;
[0031]将所述第一计数器的值减去所述偏移地址对的长度。
[0032]结合前述的第一方面或第一方面的第一种可能的实现方式至第六种可能的实现方式中的任一种实现方式,在第七种可能的实现方式中,所述前缀部分和所述后缀部分保存在所述DFA中,所述中间部分保存在字符判别模块中,其中,所述DFA用于对所述第一报文中的多个字符进行匹配,并当通过匹配确定当前状态为所述前缀接受态,并满足所述匹配条件时,开启所述第一计数器,并保存所述第一字符的偏移地址,以及当通过匹配确定所述当前状态为所述后缀接受态时,保存所述第二字符的偏移地址;所述字符判别模块用于在通过所述DFA进行匹配的同时,以每次匹配所述X个连续字符的方式对所述第一报文中的多个字符进行匹配,以确定是否有一个或多个所述中间部分的字符,每当确定有所述η个连续字符是所述中间部分的字符时,保存该次确定的所述η个连续字符的偏移地址对,以及根据所述偏移地址对更新所述第一计数器的值。
[0033]结合前述的第一方面或第一方面的第一种可能的实现方式至第七种可能的实现方式中的任一种实现方式,在第八种可能的实现方式中,
[0034]所述中间部分的字符为一个确定的字符,或者为多个可选字符中的任意一个字符;
[0035]所述字符重复次数为一个固定次数,或者为由一个下限值和一个上限值组成的次数范围。
[0036]第二方面,本发明实施例提供一种规则匹配装置,用于对符合第一规则的报文进行匹配,所述第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数,包括:
[0037]接收单元,用于接收第一报文,所述第一报文包括多个字符;
[0038]匹配单元,用于通过有限自动机DFA对所述接收单元接收的所述第一报文中的多个字符进行匹配,其中,所述DFA包括前缀接受态和后缀接受态,所述DFA由更新后的第一规则编译后得到,所述更新后的第一规则包括所述前缀部分,更新后的中间部分,以及所述后缀部分;所述更新后的中间部分的正则表达式为*” ;
[0039]开启单元,用于当通过所述匹配单元匹配确定所述DFA的当前状态为前缀接受态,并满足匹配条件时,开启设置第一计数器,所述第一计数器用于对匹配的字符进行计数,
[0040]以及第一保存单元,用于保存第一字符的偏移地址,所述第一字符为所述接收单元接收到的所述第一报文中使得所述DFA跳转至所述前缀接受态的字符;
[0041]确定单元,用于在通过所述匹配单元进行匹配的同时,以每次匹配X个连续字符的方式对所述接收单元接收的所述第一报文中的多个字符进行匹配,以确定是否有一个或多个所述中间部分的字符;
[0042]第二保存单元,用于每当所述确定单元确定有η个连续字符是所述中间部分的字符时,保存该次所述确定单元确定的所述η个连续字符的偏移地址,所述偏移地址对包括起始地址以及结束地址,所述起始地址为所述η个连续字符中的第一个字符的偏移地址,所述结束地址为所述η个连续字符中的第η个字符的偏移地址;其中,X为大于等于2的整数;η为大于等于I的整数;
[0043]更新单元,用于根据所述第二保存单元保存的所述偏移地址对更新所述第一计数器的值; [0044]所述第一保存单元,还用于通过匹配单元确定所述DFA的当前状态为所述后缀接受态时,保存第二字符的偏移地址,所述第二字符为所述接收单元接收到的所述第一报文中使得所述DFA跳转至所述后缀接受态的字符;
[0045]判断单元,用于根据所述第一保存单元保存的所述第一字符的偏移地址、所述第二字符的偏移地址、所述更新单元更新后的所述第一计数器的值、后缀的长度及所述字符重复次数判断所述接收单元接收的第一报文是否满足所述第一规则。
[0046]在第二方面的第一种可能的实现方式中,所述规则匹配装置还包括关闭单元;
[0047]所述关闭单元,用于当所述更新单元更新所述第一计数器的次数不等于所述字符重复次数时,若Offset ^ Begin且End-Offset+1 < m,则关闭所述第一计数器,其中,Offset为输入所述DFA的当前字符的偏移地址,Begin为与Offset的差值最小的所述η个连续字符中的第一个字符的偏移地址,End为与Offset的差值最小的所述η个连续字符中的第η个字符的偏移地址,m为所述字符重复次数。
[0048]结合前述的第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述匹配条件包括:
[0049]End-Offset+Ι≥m,其中,Offset为输入所述DFA的当前字符的偏移地址,End为与Offset的差值最小的所述η个连续字符中的第η个字符的偏移地址,m为所述字符重复次数;
[0050]或者,
[0051]所述第二保存单元未保存所述η个连续字符中的第η个字符的偏移地址。
[0052]结合前述的第二方面或第二方面的第一种可能的实现方式至第二种可能的实现方式中的任一种实现方式,在第三种可能的实现方式中,所述规则匹配装置还包括处理单元;
[0053]所述处理单元,用于当通过所述匹配单元匹配确定所述DFA的当前状态时,查询所述DFA的状态是否设置有死状态标志,以及若所述DFA的状态设置有所述死状态标志,且所述关闭单元将所述第一计数关闭,则结束所述DFA的状态跳转。
[0054]结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,
[0055]所述处理单元,还用于在所述查询所述DFA的状态是否设置有死状态标志之前,获取所述DFA的有向图,以及若在所述DFA的有向图中,获取到未与所述前缀接受态连接的状态,则将所述未与所述前缀接受态连接的状态设置一个所述死状态标志。
[0056]结合前述的第二方面或第二方面的第一种可能的实现方式至第四种可能的实现方式中的任一种实现方式,在第五种可能的实现方式中,
[0057]所述判断单元,具体用于若所述第一保存单元保存的所述第二字符的偏移地址与所述第一规则的后缀部分的长度之差大于等于,所述第一保存单元保存的所述第一字符的偏移地址与所述字符重复次数之和,且所述第一保存单元保存的所述第二字符的偏移地址与所述第一规则的后缀部分的长度之差小于等于,所述第一保存单元保存的所述第一字符的偏移地址、所述字符重复次数及所述更新单元更新后的所述第一计数器的值之和,则判断所述接收单元接收到的所述第一报文满足所述第一规则。
[0058]结合前述的第二方面或第二方面的第一种可能的实现方式至第五种可能的实现方式中的任一种实现方式,在第六种可能的实现方式中,
[0059]所述更新单元,具体用于获取所述第二保存单元保存的所述偏移地址对的长度,所述偏移地址对的长度为所述结束地址与所述起始地址之差,再加上1,以及将所述第一计数器的值减去所述偏移地址对的长度。
[0060]结合前述的第二方面或第二方面的第一种可能的实现方式至第六种可能的实现方式中的任一种实现方式,在第七种可能的实现方式中,所述前缀部分和所述后缀部分保存在所述DFA中,所述中间部分保存在字符判别模块中,其中,所述DFA包括所述匹配单元、所述开启单元和所述第一保存单元;所述字符判别模块包括所述确定单元和所述第二保存单元。
[0061]结合前述的第二方面或第二方面的第一种可能的实现方式至第七种可能的实现方式中的任一种实现方式,在第八种可能的实现方式中,所述中间部分的字符为一个确定的字符,或者为多个可选字符中的任意一个字符;
[0062]所述字符重复次数为一个固定次数,或者为由一个下限值和一个上限值组成的次数范围。
[0063]本发明实施例提供一种规则匹配方法及装置,用于对符合第一规则的报文进行匹配,该第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数,通过接收第一报文,该第一报文包括多个字符,并通过有限自动机DFA对该第一报文中的多个字符进行匹配,其中,DFA包括前缀接受态和后缀接受态,该DFA由更新后的第一规则编译后得到,更新后的第一规则包括该前缀部分,更新后的中间部分,以及该后缀部分,该更新后的中间部分的正则表达式为*”,及当通过该DFA匹配确定该DFA的当前状态为前缀接受态,并满足匹配条件时,开启第一计数器,并保存第一字符的偏移地址,该第一字符为第一报文中使得DFA跳转至前缀接受态的字符,该第一计数器用于对匹配的字符进行计数,以及在通过DFA进行匹配的同时,以每次匹配X个连续字符的方式对第一报文中的多个字符进行匹配,以确定是否有一个或多个中间部分的字符,每当确定有η个连续字符是中间部分的字符时,保存该次确定的η个连续字符的偏移地址对,并根据该偏移地址对更新第一计数器的值,该偏移地址对包括起始地址以及结束地址,该起始地址为η个连续字符中的第一个字符的偏移地址,该结束地址为η个连续字符中的第η个字符的偏移地址,其中,X为大于等于2的整数;η为大于等于I的整数,然后当通过DFA匹配确定DFA的当前状态为后缀接受态时,保存第二字符的偏移地址,该第二字符为第一报文中使得DFA跳转至后缀接受态的字符,最后根据第一字符的偏移地址、第二字符的偏移地址、更新后的第一计数器的值、第一规则的后缀部分的长度及字符重复次数判断第一报文是否满足第一规则。通过该方案,由于每次可以对第一报文中的多个连续字符同时进行判断,且只在DFA中设置了规则的前缀接受态和后缀接受态,因此,能够提高报文处理速度、减少规则的存储空间,以及提高报文的匹配效率。
【专利附图】

【附图说明】
[0064]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0065]图1为本发明实施例提供的一种规则匹配方法的流程图一;
[0066]图2为本发明实施例提供的一种规则匹配方法的流程图二 ;
[0067]图3为本发明实施例提供的一种规则匹配方法的流程示意图;
[0068]图4为本发明实施例提供的规则匹配装置的结构示意图一;
[0069]图5为本发明实施例提供的规则匹配装置的结构示意图二 ;
[0070]图6为本发明实施例提供的规则匹配装置的结构示意图三;
[0071]图7为本发明实施例提供的规则匹配装置的结构示意图四;
[0072]图8为本发明实施例提供的单板的结构示意图。
【具体实施方式】
[0073]下面结合附图对本发明实施例提供的一种规则匹配方法及装置进行详细地描述。
[0074]实施例一
[0075]本发明实施例提供一种规则匹配方法,如图1所示,该方法可以包括:
[0076]S101、规则匹配装置接收第一报文,该第一报文包括多个字符。
[0077]报文(message)是网络中交换与传输的数据单元,即网络中的站点一次性需发送的数据块。报文中包含了完整的待发送的数据信息,其长度不限且可变。
[0078]具体的,当规则匹配装置与网络侧设备进行通信时,网络侧设备发送第一报文至规则匹配装置,即规则匹配装置接收第一报文,该第一报文包括多个字符。
[0079]需要说明的是,第一报文可以包括前缀、后缀和字符。
[0080]不例性的,第一报文可以为:~abc\s*ef abcOOaaaOlccclOO…wyz,其中,第一报文的前缀为:~abc\s*ef,后缀为wyz, abcOOaaaOlccclOO…为字符。
[0081]S102、规则匹配装置通过DFA对第一报文中的多个字符进行匹配,其中,DFA包括前缀接受态和后缀接受态,该DFA由更新后的第一规则编译后得到,该更新后的第一规则包括前缀部分,更新后的中间部分,以及后缀部分,该更新后的中间部分的正则表达式为“.*”。
[0082]FA (Finite Automat on,有限自动机)是为了研究某些语言类和有限内存的计算过程而抽象出来的一种计算模型。FA可以表示为一个有向图,该有向图的每个结点对应一个状态,即FA的状态,两个FA的状态之间的连线对应一种状态的跳转,FA可以包括有限数量的FA的状态,且每个FA的状态可以跳转至其他FA的状态。使用FA时,通过输入不同的字符使得FA进行状态的跳转。FA可以分为两种形式:DFA和NFA。其中,DFA可以实现确定的状态的跳转,即对于一个给定的有向图和与该有向图对应的多个字符,DFA可以分别根据各个字符及预先设定的跳转函数从一个状态跳转至另一个状态。
[0083]DFA是由一个非空有限的状态集合、一个输入字母表(例如:报文),一个跳转函数、一个开始状态,及一个接受态的集合所组成。当启动DFA后,DFA处于开始状态,若依次将报文中的字符输入至DFA,DFA则根据预先设定的跳转函数依次跳转至各个状态。当依次将报文中的字符输入至DFA时,若DFA接收某个字符后,DFA可以跳转至接受态集合中的某个接受态,则表示报文中该某个字符之前的所有字符与预设的第一规则相对应,即DFA可以继续接收报文中的其他字符。其中,预设的第一规则为将与第一报文对应的第一规则更新后的第一规则。
[0084]需要说明的是,第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数。
[0085]规则匹配装置接收第一报文之后,规则匹配装置通过DFA对第一报文中的多个字符进行匹配,其中,DFA包括前缀接受态和后缀接受态,该DFA由更新后的第一规则编译后得到,该更新后的第一规则包括前缀部分,更新后的中间部分,以及后缀部分,该更新后的中间部分的正则表达式为*”。
[0086]需要说明的是,本发明实施例提供的规则匹配方法中,DFA的接受态可以包括两个接受态,即前缀接受态和后缀接受态,这是由于为了节省第一规则的存储空间,只需将第一规则的前缀部分和后缀部分分别编译为包括前缀接受态和后缀接受态的DFA即可。
[0087]示例性的,第 一规则为~abC\S*ef[a-Z] {1000}wyz,规则匹配装置接收到的第一报文为~abc\s*ef abcOOaaaOlccclOO…wyz。对于这种重复次数(1000次)较多的第一规贝U,为了提高规则匹配装置对第一报文的匹配效率,开发人员一般会根据编程语言将这种重复次数较多的第一规则进行相应的更新,即可以将~abc\S*ef [a-Z] {1000}wyz规则改写为~abc\S*ef.*wyz,其中,”表示256种字符中的任意字符,表示任意多个字符,即字符的个数可以为任意多个。其中,对于该条第一规则,中间部分的字符为[a-ζ]中的任意字符,字符重复次数为1000。
[0088]S103、当规则匹配装置通过DFA匹配确定该DFA的当前状态为前缀接受态,并满足匹配条件时,规则匹配装置开启第一计数器,并保存第一字符的偏移地址,第一字符为第一报文中使得DFA跳转至前缀接受态的字符,第一计数器用于对匹配的字符进行计数。
[0089]当规则匹配装置通过DFA对第一报文中的多个字符进行匹配时,对于该DFA,规则匹配装置启动该DFA后,该DFA处于开始状态,当规则匹配装置将接收到的第一报文中的首个字符输入该DFA时,该DFA可以从开始状态跳转至与首个字符对应的DFA的状态,且规则匹配装置可以获取DFA的当前状态。
[0090]规则匹配装置继续将第一报文中的其他字符依次输入该DFA,以使得该DFA根据输入的字符及预先设定的跳转函数依次跳转至与各个字符对应的DFA的状态,且规则匹配装置获取DFA的当前状态,若DFA的当前状态为前缀接受态,则使得DFA跳转至前缀接受态的字符为第一报文的前缀的最后一个字符,即第一字符。至此,规则匹配装置判断第一报文的前缀满足第一规则的前缀部分和匹配条件。若第一报文的前缀满足第一规则的前缀部分和匹配条件,规则匹配装置则开启设置有字符重复次数的第一计数器,并保存第一字符的偏移地址。其中,第一计数器用于对匹配的字符进行计数。
[0091]可选的,字符重复次数可以为第一规则中,除第一规则的前缀部分的字符和第一规则的后缀部分的字符之外的其他字符的个数,即中间部分的字符的个数。
[0092]需要说明的是,上述匹配条件将在后续实施例中进行详细地描述,此处不再赘述。
[0093]S104、规则匹配装置在通过DFA进行匹配的同时,规则匹配装置以每次匹配X个连续字符的方式对第一报文中的多个字符进行匹配,以确定是否有一个或多个中间部分的字符,每当规则匹配装置确定有η个连续字符是中间部分的字符时,规则匹配装置保存该次确定的η个连续字符的偏移地址对,以及规则匹配装置根据偏移地址对更新第一计数器的值,该偏移地址对包括起始地址以及结束地址,该起始地址为η个连续字符中的第一个字符的偏移地址,该结束地址为η个连续字符中的第η个字符的偏移地址,其中,X为大于等于2的整数,η为大于等于I的整数。
[0094]规则匹配装置在通过DFA进行匹配的同时,规则匹配装置以每次匹配X个连续字符的方式对第一报文中的多个字符进行匹配,以确定是否有一个或多个中间部分的字符,每当规则匹配装置确定有η个连续字符是中间部分的字符时,规则匹配装置保存该次确定的η个连续字符的偏移地址对,以及规则匹配装置根据偏移地址对更新第一计数器的值,该偏移地址对包括起始地址以及结束地址,该起始地址为η个连续字符中的第一个字符的偏移地址,该结束地址为η个连续字符中的第η个字符的偏移地址,其中,X为大于等于2的整数,η为大于等于I的整数。
[0095]示例性的,规则匹配装置可以通过该η个连续字符中的结束字符的偏移地址减去该η个连续字符中的起始字符的偏移地址,再加I得到该η个连续字符的长度,即η的值,并通过将第一计数器的值减去η的值,从而以更新第一计数器。
[0096]需要说明的是,本发明实施例提供的规则匹配方法中,第一规则的中间部分保存在规则匹配装置的字符判别模块中。
[0097]S105、当规则匹配装置通过DFA匹配确定该DFA的当前状态为后缀接受态时,规则匹配装置保存第二字符的偏移地址,第二字符为第一报文中使得DFA跳转至后缀接受态的字符。
[0098]规则匹配装置依次将第一报文中的各个字符输入DFA,以使得该DFA根据输入的字符及预先设定的跳转函数依次跳转至与各个字符对应的DFA的状态,且规则匹配装置获取DFA的当前状态,若DFA的当前状态为后缀接受态,则使得DFA跳转至后缀接受态的字符为第一报文的后缀的最后一个字符,即第二字符。至此,规则匹配装置判断第一报文的后缀是否满足第一规则。由于该第一规则为对与第一报文对应的第一规则更新后的第一规则,因此,若需判断第一报文是否满足未更新的第一规则(真正的第一规则),规则匹配装置则还需根据上述步骤保存的相关信息进行进一步判断,具体如S104的描述。若第一报文中的字符满足该第一规则的后缀部分,规则匹配装置则保存第二字符的偏移地址。
[0099]特别的,当DFA的状态跳转至前缀接受态后,规则匹配装置仍然继续将报文中位于第一字符后的各个字符依次输入至DFA,以使得DFA根据规则匹配装置输入的各个字符依次跳转至与各个字符对应的DFA的状态,直至DFA跳转至后缀接受态。
[0100]S106、规则匹配装置根据第一字符的偏移地址、第二字符的偏移地址、更新后的第一计数器的值、第一规则的后缀部分的长度及字符重复次数判断第一报文是否满足第一规则。
[0101]规则匹配装置可根据上述步骤保存的第一字符的偏移地址和第二字符的偏移地址,及第一规则的后缀部分的长度、字符重复次数,以及更新后的第一计数器的值判断第一报文是否满足第一规则。
[0102]具体的,规则匹配装置可以将第二字符的偏移地址与第一规则的后缀部分的长度之差,和第一字符的偏移地址与字符重复次数之和进行比较,并将第二字符的偏移地址与第一规则的后缀部分的长度之差,和第一字符的偏移地址、字符重复次数及更新后的第一计数器的值之和进行比较,从而以判断第一报文是否满足第一规则。
[0103]需要说明的是,第一规则的后缀的长度为第一规则中后缀部分的字符的个数,字符重复次数为第一规则中的字符重复次数。
[0104]特别的,第一规则的前缀部分和后缀部分保存在规则匹配装置中的DFA中,而第一规则的中间部分保存在规则匹配装置中的字符判别模块中,其中,该DFA用于执行S102-S103及S105,以及该字符判别模块用于执行S104。
[0105]进一步地,规则匹配装置中的字符判别模块的可以通过一个状态机实现,也可以通过其他可编程逻辑实现同时多个字符进行比较功能的结构,具体的实施方式不发明不作限制。
[0106]本发明实施例提供一种规则匹配方法,用于规则匹配装置对符合第一规则的报文进行匹配,该第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数,规则匹配装置通过接收第一报文,该第一报文包括多个字符,并规则匹配装置通过有限自动机DFA对该第一报文中的多个字符进行匹配,其中,DFA包括前缀接受态和后缀接受态,该DFA由更新后的第一规则编译后得到,更新后的第一规则包括该前缀部分,更新后的中间部分,以及该后缀部分,该更新后的中间部分的正则表达式为*”,及当规则匹配装置通过该DFA匹配确定该DFA的当前状态为前缀接受态,并满足匹配条件时,规则匹配装置开启第一计数器,并保存第一字符的偏移地址,该第一字符为第一报文中使得DFA跳转至前缀接受态的字符,该第一计数器用于对匹配的字符进行计数,以及在规则匹配装置通过DFA进行匹配的同时,规则匹配装置以每次匹配X个连续字符的方式对第一报文中的多个字符进行匹配,以确定是否有一个或多个中间部分的字符,每当规则匹配装置确定有η个连续字符是中间部分的字符时,规则匹配装置保存该次确定的η个连续字符的偏移地址对,并根据该偏移地址对更新第一计数器的值,该偏移地址对包括起始地址以及结束地址,该起始地址为η个连续字符中的第一个字符的偏移地址,该结束地址为η个连续字符中的第η个字符的偏移地址,其中,X为大于等于2的整数;η为大于等于I的整数,然后当规则匹配装置通过DFA匹配确定DFA的当前状态为后缀接受态时,规则匹配装置保存第二字符的偏移地址,该第二字符为第一报文中使得DFA跳转至后缀接受态的字符,最后规则匹配装置根据第一字符的偏移地址、第二字符的偏移地址、更新后的第一计数器的值、第一规则的后缀部分的长度及字符重复次数判断第一报文是否满足第一规则。通过该方案,由于每次可以对第一报文中的多个连续字符同时进行判断,且只在DFA中设置了规则的前缀接受态和后缀接受态,因此,能够提高报文处理速度、减少规则的存储空间,以及提高报文的匹配效率。[0107]实施例二
[0108]本发明实施例提供一种规则匹配方法,如图2所示,该方法可以包括:
[0109]S201、规则匹配装置接收来自网络侧设备的第一报文,该第一报文包括多个字符。
[0110]报文是网络中交换与传输的数据单元,即网络中的站点一次性需发送的数据块。报文中包含了完整的待发送的数据信息,其长度不限且可变。
[0111]具体的,当规则匹配装置与网络侧设备进行通信时,网络侧设备发送第一报文至规则匹配装置,即规则匹配装置接收第一报文,该第一报文包括多个字符。
[0112]需要说明的是,第一报文可以包括前缀、后缀和字符。
[0113]不例性的,第一报文可以为:~abc\s*ef abcOOaaaOlccclOO…wyz,其中,第一报文的前缀为:~abc\s*ef,后缀为wyz, abcOOaaaOlccclOO…为字符。
[0114]S202、规则匹配装置通过DFA对第一报文中的多个字符进行匹配,其中,DFA包括前缀接受态和后缀接受态,该DFA由更新后的第一规则编译后得到,该更新后的第一规则包括前缀部分,更新后的中间部分,以及后缀部分,该更新后的中间部分的正则表达式为“.*”。
[0115]FA是为了研究某些语言类和有限内存的计算过程而抽象出来的一种计算模型。FA可以表示为一个有向图,该有向图的每个结点对应一个状态,即FA的状态,两个FA的状态之间的连线对应一种状态的跳转,FA可以包括有限数量的FA的状态,且每个FA的状态可以跳转至其他FA的状态。使用FA时,通过输入不同的字符使得FA进行状态的跳转。FA可以分为两种形式:DFA和NFA。其中,DFA可以实现确定的状态的跳转,即对于一个给定的有向图和与该有向图对应的多个字符,DFA可以分别根据各个字符及预先设定的跳转函数从一个状态跳转至另一个状态。
[0116]DFA是由一个非空有限的状态集合、一个输入字母表(例如:报文),一个跳转函数、一个开始状态,及一个接受态的集合所组成。当启动DFA后,DFA处于开始状态,若依次将报文中的字符输入至DFA,DFA则根据预先设定的跳转函数依次跳转至各个状态。当依次将报文中的字符输入至DFA时,若DFA接收某个字符后,DFA可以跳转至接受态集合中的某个接受态,则表示报文中该某个字符之前的所有字符与预设的第一规则相对应,即DFA可以继续接收报文中的其他字符。其中,预设的第一规则为将与第一报文对应的第一规则更新后的第一规则。
[0117]需要说明的是,第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数。
[0118]规则匹配装置接收第一报文之后,规则匹配装置通过DFA对第一报文中的多个字符进行匹配,其中,DFA包括前缀接受态和后缀接受态,该DFA由更新后的第一规则编译后得到,该更新后的第一规则包括前缀部分,更新后的中间部分,以及后缀部分,该更新后的中间部分的正则表达式为*”。
[0119]规则匹配装置接收来 自网络侧设备的第一报文后,规则匹配装置获取第一报文中的各个字符,以便后续判断第一报文中的各个字符是否满足第一规则。
[0120]具体的,规则匹配装置依次输入各个字符至DFA,以使得DFA根据各个字符依次跳转至与各个字符对应的DFA的状态。
[0121 ] 规则匹配装置获取第一报文中的各个字符之后,规则匹配装置可以依次输入各个字符至DFA,以使得DFA可根据各个字符依次跳转至与各个字符对应的DFA的状态。
[0122]具体的,规则匹配装置启动该DFA后,该DFA处于开始状态,当规则匹配装置将接收到的第一报文中的首个字符输入该DFA时,该DFA可以从开始状态跳转至与该首个字符对应的DFA的状态,规则匹配装置继续将第一报文中的其他字符依次输入该DFA,以使得该DFA可根据规则匹配装置输入的字符及预先设定的跳转函数依次跳转至与各个字符对应的DFA的状态。
[0123]需要说明的是,本发明实施例提供的规则匹配方法中,DFA的接受态可以包括两个接受态,即前缀接受态和后缀接受态,这是由于为了节省第一规则的存储空间,只需将第一规则的前缀部分和后缀部分分别编译为包括前缀接受态和后缀接受态的DFA即可。
[0124]示例性的,第一规则为~abC\S*ef[a-Z] {1000}wyz,规则匹配装置接收到的第一报文为~abc\s*ef abcOOaaaOlccclOO…wyz。对于这种重复次数(1000次)较多的第一规贝U,为了提高规则匹配装置对第一报文的匹配效率,开发人员一般会根据编程语言将这种重复次数较多的第一规则进行相应的更新,即可以将~abc\S*ef [a-Z] {1000}wyz规则改写为~abc\S*ef.*wyz,其中,”表示256种字符中的任意字符,表示任意多个字符,即字符的个数可以为任意多个。其中,对于该条第一规则,中间部分的字符为[a-ζ]中的任意字符,字符重复次数为1000。
[0125] S203、当规则匹配装置通过DFA匹配确定该DFA的当前状态为前缀接受态,并满足匹配条件时,规则匹配装置开启第一计数器,并保存第一字符的偏移地址,第一字符为第一报文中使得DFA跳转至前缀接受态的字符,第一计数器用于对匹配的字符进行计数。
[0126]当规则匹配装置通过DFA对第一报文中的多个字符进行匹配时,对于该DFA,规则匹配装置启动该DFA后,该DFA处于开始状态,当规则匹配装置将接收到的第一报文中的首个字符输入该DFA时,该DFA可以从开始状态跳转至与该首个字符对应的DFA的状态,且规则匹配装置可以获取DFA的当前状态。
[0127]规则匹配装置继续将第一报文中的其他字符依次输入该DFA,以使得该DFA可根据规则匹配装置输入的字符及预先设定的跳转函数依次跳转至与各个字符对应的DFA的状态,且规则匹配装置获取DFA的当前状态,若DFA的当前状态为前缀接受态,规则匹配装置则可以获知使得DFA跳转至前缀接受态的字符为第一报文的前缀的最后一个字符,即第一字符。至此,规则匹配装置判断第一报文的前缀满足第一规则的前缀部分和匹配条件。若第一报文的前缀满足第一规则和匹配条件,规则匹配装置则开启设置有字符重复次数的第一计数器,并保存第一字符的偏移地址。其中,第一计数器用于对匹配的字符进行计数。
[0128]可选的,当规则匹配装置通过DFA匹配确定该DFA的当前状态为前缀接受态时,匹配条件可以为规则匹配装置开启计数器的判别条件,具体的,匹配条件可以包括下述的任意一个:
[0129](l)End-0ffset+l≥m,其中,Offset为规则匹配装置输入至DFA的当前字符的偏移地址,End为与Offset的差值最小的η个连续字符中的第η个字符的偏移地址,m为字符
重复次数。
[0130](2)规则匹配装置未保存η个连续字符中的第η个字符的偏移地址。
[0131]需要说明的是,当规则匹配装置通过DFA匹配确定该DFA的当前状态为前缀接受态时,匹配条件中的Offset为规则匹配装置输入至DFA的前缀接受态时的字符的偏移地址。
[0132]可以理解的是,若规则匹配装置确定DFA的当前状态为前缀接受态,并满足匹配条件时,规则匹配装置开启第一计数,可以避免规则匹配装置确定DFA的当前状态为前缀接受态,但是完全不可能匹配上的报文的匹配,从而节省了计数器,避免在规则匹配装置匹配报文的过程中因没有空闲的计数器,而造成漏匹配的情况的发生。
[0133]可选的,字符重复次数可以为第一规则中,除第一规则的前缀部分的字符和第一规则的后缀部分的字符之外的其他字符的个数,即中间部分的字符的个数。
[0134]S204、规则匹配装置继续依次输入各个字符至DFA,以使得DFA根据各个字符依次跳转至与各个字符对应的DFA的状态,并继续获取DFA的状态。
[0135]当规则匹配装置通过DFA匹配确定该DFA的当前状态为前缀接受态之后,规则匹配装置继续依次输入各个字符至DFA,以使得DFA根据各个字符依次跳转至与各个字符对应的DFA的状态,并继续获取DFA的状态。
[0136]需要说明的是,S203中规则匹配装置依次输入的各个字符为第一报文中位于第一字符后的各个字符。
[0137]S205、规则匹配装置在通过DFA进行匹配的同时,规则匹配装置以每次匹配X个连续字符的方式对第一报文中的多个字符进行匹配,以确定是否有一个或多个中间部分的字符,其中,X为大于等于2的整数。
[0138]规则匹配装置在通过DFA进行匹配的同时,规则匹配装置可以将第一报文中位于第一字符后的X个连续字符与第一规则的中间部分进行对比,以确定满足第一规则的中间部分的字符,其中,X为大于等于2的整数。
[0139]具体的,如图3所示,规则匹配装置将第一报文中位于第一字符后的其他字符依次输入该字符判别模块,以使得该字符判别模块可以根据规则匹配装置可以将第一报文中位于第一字符后的X个连续字符与第一规则的中间部分进行对比,以确定满足第一规则的中间部分的字符,其中,X为大于等于2的整数。
[0140]需要说明的是,字符判别模块是由FPGA(Field — Programmable Gate Array,现场可编程门阵列)编译的可编程逻辑结构,且一般在规则匹配装置的FPGA中,X可以为8或16,本发明实施例中选取x=8进行说明。
[0141]示例性的,第一报文中的第一字符后的字符可以为sjfhdkajsabc,当x为8时,SP规则匹配装置通过字符判别模块将sjfhdkaj与第一规则的中间部分进行对比,以确定满足第一规则的中间部分的字符的个数。
[0142]可以理解的是,X为大于等于2的整数,规则匹配装置可以同时对X个连续字符进行匹配确定,从而提高了提高第一报文处理速度,以及提高第一报文的匹配效率。
[0143]S206、每当规则匹配装置确定有η个连续字符是中间部分的字符时,规则匹配装置保存该次确定的η个连续字符的偏移地址对,以及规则匹配装置根据偏移地址对更新第一计数器的值,该偏移地址对包括起始地址以及结束地址,该起始地址为η个连续字符中的第一个字符的偏移地址,该结束地址为η个连续字符中的第η个字符的偏移地址,其中,η为大于等于I的整数。
[0144]规则匹配装置在通过DFA进行匹配的同时,规则匹配装置将第一报文中位于第一字符后的X个连续字符与第一规则的中间部分进行对比,当规则匹配装置每次确定满足第一规则的中间部分的η个连续字符后,规则匹配装置保存该次确定的η个连续字符的偏移地址对,其中,该偏移地址对包括起始地址以及结束地址,该起始地址为η个连续字符中的第一个字符的偏移地址,该结束地址为η个连续字符中的第η个字符的偏移地址,以及规则匹配装置可根据该η个连续字符中的起始字符的偏移地址和该η个连续字符中的结束字符的偏移地址更新第一计数器的值。
[0145]需要说明的是,η个连续字符可以包括X个连续字符中的满足第一规则的中间部分的连续字符,如图3所示,规则匹配装置可以保存满足第一规则的中间部分的连续字符的起始字符的偏移地址和结束字符的偏移地址。
[0146]本发明实施例中,规则匹配装置根据偏移地址对更新第一计数器的值具体为获取偏移地址对的长度,该偏移地址对的长度为结束地址与起始地址之差,再加上1,以及将第一计数器的值减去偏移地址对的长度。
[0147]示例性的,规则匹配装置可以通过该η个连续字符中的结束字符的偏移地址减去该η个连续字符中的起始字符的偏移地址,再加I得到该η个连续字符的长度,即η的值,并通过将第一计数器的值减去η的值,从而以更新第一计数器。
[0148]可以理解的是,第一计数器的计数方式可以为正计数或倒计数的方式进行计数,本发明实施例不作限制。
[0149]需要说明的是,本发明实施例提供的规则匹配方法中,第一规则可以包括字符重复次数和第一规则的中间部分。具体的第一规则的中间部分和字符重复次数,将在例子中进行详细地示例性的说明。
[0150]可选的,当规则匹配装置更新第一计数器的次数不等于字符重复次数时,若Offset≥Begin且End-Offset+1 < m,则关闭第一计数器,其中,Offset为规则匹配装置输入至DFA的当前字符的偏移地址,Begin为与Offset的差值最小的η个连续字符中的第一个字符的偏移地址,End为与Offset的差值最小的η个连续字符中的第η个字符的偏移地址,m为字符重复次数。通过上述步骤,规则匹配装置可以提前发现第一计数器将会由于重复次数不足导致第一报文无法真正满足第一规则,而将第一计数器提前关闭,故可以降低规则匹配装置对第一报文误判断的发生概率。
[0151]特别的,规则匹配装置依次将第一报文中的各个字符输入DFA时,DFA可以跳转至与各个字符对应的DFA的状态,且DFA也可输出各个字符的偏移地址。
[0152]S207、当规则匹配装置通过DFA匹配确定该DFA的当前状态为后缀接受态时,规则匹配装置则保存第二字符的偏移地址,第二字符为第一报文中使得DFA跳转至后缀接受态的字符。
[0153]规则匹配装置依次将第一报文中的各个字符输入DFA,以使得该DFA可根据规则匹配装置输入的字符及预先设定的跳转函数依次跳转至与各个字符对应的DFA的状态,且规则匹配装置获取DFA的当前状态,若DFA的当前状态为后缀接受态,则使得DFA跳转至后缀接受态的字符为第一报文的后缀的最后一个字符,即第二字符。至此,规则匹配装置判断第一报文的后缀是否满足第一规则。由于该第一规则为将用来判断第一报文的第一规则更新后的第一 规则,因此,若需判断第一报文是否满足未更新的第一规则(真正的第一规则),规则匹配装置则还需根据上述步骤保存的相关信息进行进一步判断,具体如S205-S206的描述。若第一报文中的字符满足该第一规则的后缀部分,规则匹配装置则保存第二字符的偏移地址。
[0154]需要说明的是,当DFA的状态跳转至前缀接受态后,规则匹配装置仍然继续将第一报文中位于第一字符后的各个字符依次输入至DFA,以使得DFA根据规则匹配装置输入的各个字符依次跳转至与各个字符对应的DFA的状态,直至DFA跳转至后缀接受态。
[0155]特别的,当DFA的状态跳转至前缀接受态后,规则匹配装置仍然继续将报文中位于第一字符后的各个字符依次输入至DFA,以使得DFA根据规则匹配装置输入的各个字符依次跳转至与各个字符对应的DFA的状态,直至DFA跳转至后缀接受态。
[0156]S208、规则匹配装置根据第一字符的偏移地址、第二字符的偏移地址、更新后的第一计数器的值、第一规则的后缀部分的长度及字符重复次数判断第一报文是否满足第一规则。
[0157]规则匹配装置可根据上述步骤保存的第一字符的偏移地址和第二字符的偏移地址、第一规则的后缀部分的长度、字符重复次数,以及更新后的第一计数器的值判断第一报文是否满足第一规则。
[0158]特别的,规则匹配装置可以将第二字符的偏移地址与第一规则的后缀部分的长度之差,和第一字符的偏移地址与字符重复次数之和进行比较,并将第二字符的偏移地址与第一规则的后缀部分的长度之差,和第一字符的偏移地址、字符重复次数及更新后的第一计数器的值之和进行比较,从而以判断第一报文是否满足第一规则。
[0159]具体的,若规则匹配装置保存的第二字符的偏移地址与第一规则的后缀部分的长度之差大于等于,规则匹配装置保存的第一字符的偏移地址与字符重复次数之和,且规则匹配装置保存的第二字符的偏移地址与第一规则的后缀部分的长度之差小于等于,规则匹配装置保存的第一字符的偏移地址、字符重复次数及更新后的第一计数器的值之和,规则匹配装置则判断第一报文满足第一规则。
[0160]进一步地,若规则匹配装置保存的第二字符的偏移地址与第一规则的后缀部分的长度之差小于,规则匹配装置保存的第一字符的偏移地址与字符重复次数之和,或规则匹配装置保存的第二字符的偏移地址与第一规则的后缀部分的长度之差大于,规则匹配装置保存的第一字符的偏移地址、字符重复次数及更新后的第一计数器的值之和,规则匹配装置则判断第一报文不满足第一规则。
[0161]其中,第一规则的后缀部分的长度为第一规则中后缀部分的字符的个数,字符重复次数为第一规则中的字符重复次数。
[0162]具体的,第一规则的中间部分的字符为一个确定的字符,或者为多个可选字符中的任意一个字符,以及第一规则的中间部分的字符重复次数为一个固定次数,或者为由一个下限值和一个上限值组成的次数范围。
[0163]例如,在规则~abc\s*ef[a_z] {1000} wyz中,该规则的中间部分的字符为[a_z]中的任意一个字符,该规则的中间部分的字符重复次数为一个固定次数1000,而在规则~abc\s*ef [d] {1200-2000} wyz中,该规则的中间部分的字符为确定的字符“d”,该规则的中间部分的字符重复次数为由一个下限值1200和一个上限值2000组成的次数范围。
[0164]可选的,规则匹配装置依次输入各个字符至DFA,以使得DFA可根据各个字符依次跳转至与各个字符对应的DFA的状态之后,规则匹配装置查询DFA的状态是否设置有死状态标志,若DFA的状态设置有死状态标志,且第一计数器关闭,规则匹配装置则结束DFA的状态跳转,即结束第一报文与该条第一规则的匹配。
[0165]可以理解的是,由于规则匹配装置能够提前判断出相对于前缀接受态的死状态而提前结束DFA的状态的跳转,故而大大提高了规则匹配装置对第一报文中的字符的匹配效率。
[0166]进一步地,规则匹配装置查询DFA的状态是否设置有死状态标志之前,规则匹配装置获取该DFA的有向图,以及若在该DFA的有向图中,规则匹配装置获取到未与该DFA前缀接受态连接的状态,规则匹配装置则将该未与DFA的前缀接受态连接的状态设置一个死状态标志。
[0167]需要说明的是,开发人员编译出与第一规则对应的DFA后,可将该DFA看作一个有向图,并在该有向图中找到所有不与该DFA中的前缀接受态连接的顶点(某个DFA的状态),该顶点则为相对于前缀接受态的死状态,开发人员找到相对于前缀接受态的死状态之后,可在该相对于前缀接受态的死状态中设置一个死状态标志,以用于指示该某个DFA的状态为相对于前缀接受态的死状态。
[0168]特别的,规则匹配装置在查询DFA的某个状态设置有死状态标志后,若此时规则匹配装置已开启了多个第一计数器,则需该多个第一计数器都关闭后才能结束DFA的状态的跳转。
[0169]其中,规则匹配装置关闭第一计数器条件可以包括:当第一计数器的更新次数或第二计数器的更新次数小于字符重复次数时,若Offset≥Begin且End-Offset+l < m,规则匹配装置则将对应的第一计数器关闭,其中,Offset为规则匹配装置输入至DFA的当前字符的偏移地址,Begin为与Offset的差值最小的η个连续字符中的第一个字符的偏移地址,End为与Offset的差值最小的η个连续字符中的第η个字符的偏移地址,m为字符重复次数。
[0170]需要说明的是,第一规则的前缀部分和后缀部分保存在规则匹配装置中的DFA中,而第一规则的中间部分保存在规则匹配装置中的字符判别模块中,其中,该DFA用于执行S202-S203-S204及S207 ;该字符判别模块用于执行S205-S206。
[0171]进一步地,规则匹配装置中的字符判别模块的可以通过一个状态机实现,也可以通过其他可编程逻辑实现同时多个字符进行比较功能的结构,具体的实施方式不发明不作限制。
[0172]具体的,如图3所示,图3为第一报文与第一规则匹配的流程示意图。规则匹配装置通过DFA对第一报文中的多个字符进行匹配,并输出DFA当前状态的字符的偏移地址。同时,规则匹配装置通过字符判别模块也对第一报文中的多个字符进行匹配,并保存第一报文中与第一规则的中间部分每次匹配的η个连续字符的偏移地址对,以及规则匹配装置根据DFA的前缀接受态和该每次匹配的η个连续字符的偏移地址对开启第一计数器,并根据该每次匹配的η个连续字符的偏移地址对更新第一计数器的值,以用于第一报文与第一规则的中间部分的字符匹配个数的计数,最后规则匹配装置根据DFA到达前缀接受态时字符的偏移地址、DFA到达后缀接受态时字符的偏移地址、更新后的第一计数器的值、第一规则的后缀部分的长度及字符重复次数判断第一报文是否满足第一规则。
[0173]下面以一条具体的一条规则为例来对本发明实施例提供的一种规则匹配方法进行详细地说明。[0174]假设未进行改写的第一规则为~abC\S*ef[a-Z] {1000} wyz,规则匹配装置接收到的第一报文为~abc\s*ef对于这种重复次数(1000次)较多的第一规则,为了提高规则匹配装置对第一报文的匹配效率,开发人员一般会根据编程语言将这种重复次数较多的第一规则进行相应的更新,即可以将~abc\s*ef [a-z] {1000}wyz规则改写为~abc\S*ef.*wyz,其中,”表示256种字符中的任意字符,表示任意多个字符,即字符的个数可以为任意多个。对于该条第一规则,第一规则的中间部分为[a-ζ],设置于第一计数器中的字符重复次数为1000。
[0175]规则匹配装置接收来自网络侧设备的第一报文:~abc\s*efabc00aaa01cccl00…wyz,并依次输入第一报文中的各个字符,即“~”、“a”、“b”、“c”、“\”……至DFA,该DFA接收到规则匹配装置输入的字符后,可根据各个字符及预先设定的跳转函数依次跳转至与各个字符对应的DFA的状态。当规则匹配装置将接收到的第一报文中的首个字符输入该DFA时,该DFA可以从开始状态跳转至与首个字符“ ~ ”对应的DFA的状态,规则匹配装置继续将第一报文中的其他字符“a”、“b”、“c”、“\”……依次输入该DFA,以使得该DFA可根据输入的字符及预先设定的跳转函数依次跳转至与各个字符对应的DFA的状态。当规则匹配装置将“f”输入至该DFA时,规则匹配装置获取到的该DFA的当前状态为前缀接受态,其中,“f”为第一字符,且规则匹配装置保存第一字符的偏移地址,即字符“f”的偏移地址9。规则匹配装置依次输入字符“a”、“b”、“c”、“0”、“0”……至该DFA,以使得该DFA可继续根据字符“a”、“b”、“c”、“0”、“0”……依次跳转至与各个字符对应的该DFA的状态,规则匹配装置继续获取该DFA的状态,当规则匹配装置将第一报文的后缀“wyz”中的字符“z”输入至该DFA时,该DFA可根据字符“z”及预先设定的跳转函数跳转至与字符“z”对应的DFA的状态,即后缀接受态,其中,字符“z”为第二字符,且规则匹配装置保存字符“z”的偏移地址。
[0176]同时,规则匹配装置将接收到的第一报文中位于第一字符后的X个连续字符通过字符判别模块与第一规则的中间部分进行对比,以确定满足第一规则的中间部分的η个连续字符。一般在规则匹配装置的FPGA中,X为8或16,本例选取χ=8进行说明。规则匹配装置可以将位于字符“f”后的8个连续字符与第一规则的中间部分[a-z]进行对比,若该8个连续字符中有满足[a-z]的η个连续字符,规则匹配装置则保存该η个连续字符的起始字符的偏移地址(Begin) 和 该η个连续字符的结束字符的偏移地址(End),其中,x≤2,η≤1,本例中位于字符“f”后的8个连续字符为“abcOOaaa”,其中“abc”、“aaa”分别为2组满足[a-z]的3个连续字符,则规则匹配装置保存的第一个(Begin,End)为(10,12),第二个(Begin,End)为(15,17)。以此类推,规则匹配装置继续每次判断第一报文中的x个连续字符,直至判断到第一报文的后缀“wyz”前的一个字符,并保存满足[a-z]的每η个连续字符的起始字符的偏移地址和每η个连续字符的结束字符的偏移地址。此外,在规则匹配装置确定DFA的当前状态为前缀接收态且规则匹配装置接收的第一报文中的字符满足匹配条件时,开启第一计数器。
[0177]需要说明的是,匹配条件为End-Offset+Ι≤m,其中,Offset为输入DFA的当前字符的偏移地址,End为与Offset的差值最小的η个连续字符中的第η个字符的偏移地址,m为字符重复次数;或者,未保存η个连续字符中的第η个字符的偏移地址。由上面的规则可知,第一报文为~abc\s*ef abc00aaa01cccl00…wyz, DFA到达前缀接受态时的第一字符的偏移地址为9,此时,规则匹配装置若通过字符判别模块判断的(Begin,End)为(10,12),则与该第一字符的偏移地址9差值最小的End值为12,由于12-9=3,且3小于1000,因此,该报文与第一规则不可能匹配,规则匹配装置不开启计数器。
[0178]若第一报文为~abc\s*ef abcftaaayucccsd…wyz, DFA到达前缀接受态时的第一字符的偏移地址为9,此时,规则匹配装置若通过字符判别模块判断的到字符“y”,由于“&”、“13”、“(3”、“广、“俨、“&”、“&”、“&”、“/’都满足第一规则的中间部分[a-z],因此,规则匹配装置还未保存与第一个字符“a”为起始字符的End值,从而规则匹配装置开启第一计数器。
[0179]若规则匹配装置获取的DFA的当前状态为后缀接受态,则表示规则匹配装置判断第一报文的后缀满足第一规则的后缀部分。然而,由于该第一规则为将用来判断第一报文的第一规则更新后的第一规则,因此,若需判断第一报文是否满足未更新的第一规则(真正的第一规则),规则匹配装置则还需通过字符判别模块进行进一步判断,从而判断第一报文是否满足第一规则。
[0180]具体的,若规则匹配装置保存的第二字符的偏移地址与第一规则的后缀部分的长度之差大于等于,规则匹配装置保存的第一字符的偏移地址与字符重复次数之和,且规则匹配装置保存的第二字符的偏移地址与第一规则的后缀部分的长度之差小于等于,规则匹配装置保存的第一字符的偏移地址、字符重复次数及更新后的第一计数器的值之和,规则匹配装置则判断该报文满足第一规则。
[0181]假设,本例中的第一报文:~abc\s*efabcftaaayucccsd...wyz 在前缀“ 'abc\s*ef”和后缀“wyz”之间的字符数为1007,其中满足第一规则的中间部分的字符数为1000。
[0182]本例中的规则匹 配装置保存的第二字符“z”的偏移地址为1012,第一规则的后缀“wyz”的长度为3,规则匹配装置保存的第一字符“f”的偏移地址为9,字符重复次数为1000,由于该第一报文中的满足第一规则的中间部分的字符有1000,规则匹配装置根据起始地址和结束地址更新第一计数器后,更新后的第一计数器的值为0,则规则匹配装置保存的第二字符的偏移地址与第一规则的后缀部分的长度之差为1012-3=1009,规则匹配装置保存的第一字符的偏移地址与字符重复次数之和为9+1000=1009,规则匹配装置保存的第一字符的偏移地址、字符重复次数及更新后的第一计数器的值之和为9+1000+0=1009,可以看出上述三者相等,即规则匹配装置保存的第二字符的偏移地址与第一规则的后缀部分的长度之差,等于规则匹配装置保存的第一字符的偏移地址与字符重复次数之和,并等于户终端保存的第一字符的偏移地址、字符重复次数及更新后的第一计数器的值之和,故规则匹配装置可以判断该第一报文满足第一规则。
[0183]本发明实施例提供一种规则匹配方法,用于规则匹配装置对符合第一规则的报文进行匹配,该第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数,规则匹配装置通过接收第一报文,该第一报文包括多个字符,并规则匹配装置通过有限自动机DFA对该第一报文中的多个字符进行匹配,其中,DFA包括前缀接受态和后缀接受态,该DFA由更新后的第一规则编译后得到,更新后的第一规则包括该前缀部分,更新后的中间部分,以及该后缀部分,该更新后的中间部分的正则表达式为*”,及当规则匹配装置通过该DFA匹配确定该DFA的当前状态为前缀接受态,并满足匹配条件时,规则匹配装置开启第一计数器,并保存第一字符的偏移地址,该第一字符为第一报文中使得DFA跳转至前缀接受态的字符,该第一计数器用于对匹配的字符进行计数,以及在规则匹配装置通过DFA进行匹配的同时,规则匹配装置以每次匹配X个连续字符的方式对第一报文中的多个字符进行匹配,以确定是否有一个或多个中间部分的字符,每当规则匹配装置确定有η个连续字符是中间部分的字符时,规则匹配装置保存该次确定的η个连续字符的偏移地址对,并根据该偏移地址对更新第一计数器的值,该偏移地址对包括起始地址以及结束地址,该起始地址为η个连续字符中的第一个字符的偏移地址,该结束地址为η个连续字符中的第η个字符的偏移地址,其中,X为大于等于2的整数;η为大于等于1的整数,然后当规则匹配装置通过DFA匹配确定DFA的当前状态为后缀接受态时,规则匹配装置保存第二字符的偏移地址,该第二字符为第一报文中使得DFA跳转至后缀接受态的字符,最后规则匹配装置根据第一字符的偏移地址、第二字符的偏移地址、更新后的第一计数器的值、第一规则的后缀部分的长度及字符重复次数判断第一报文是否满足第一规则。通过该方案,由于每次可以对第一报文中的多个连续字符同时进行判断,且只在DFA中设置了规则的前缀接受态和后缀接受态,因此,能够提高报文处理速度、减少规则的存储空间,以及提高报文的匹配效率。
[0184]实施例三
[0185]如图4所示,本发明的实施例提供一种规则匹配装置1,该规则匹配装置1用于对符合第一规则的报文进行匹配,该第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数,该规则匹配装置1可以包括:
[0186]接收单元10,用于接收第一报文,所述第一报文包括多个字符。
[0187]匹配单元11,用于通过有限自动机DFA对所述接收单元10接收的所述第一报文中的多个字符进行匹配,其中,所述DFA包括前缀接受态和后缀接受态,所述DFA由更新后的第一规则编译后得到,所述更新后的第一规则包括所述前缀部分,更新后的中间部分,以及所述后缀部分;所述更新后的中间部分的正则表达式为*”。
[0188]开启单元12,用于当通过所述匹配单元11匹配确定所述DFA的当前状态为前缀接受态,并满足匹配条件时,开启设置第一计数器,所述第一计数器用于对匹配的字符进行计数。
[0189]以及第一保存单元13,用于保存第一字符的偏移地址,所述第一字符为所述接收单元10接收到的所述第一报文中使得所述DFA跳转至所述前缀接受态的字符。
[0190]确定单元14,用于在通过所述匹配单元11进行匹配的同时,以每次匹配X个连续字符的方式对所述接收单元10接收的所述第一报文中的多个字符进行匹配,以确定是否有一个或多个所述中间部分的字符。
[0191]第二保存单元15,用于每当所述确定单元14确定有η个连续字符是所述中间部分的字符时,保存该次所述确定单元14确定的所述η个连续字符的偏移地址,所述偏移地址对包括起始地址以及结束地址,所述起始地址为所述η个连续字符中的第一个字符的偏移地址,所述结束地址为所述η个连续字符中的第η个字符的偏移地址;其中,X为大于等于2的整数;η为大于等于1的整数。
[0192]更新单元16,用于根据所述第二保存单元15保存的所述偏移地址对更新所述第一计数器的值。
[0193]所述第一保存单元13,还用于通过匹配单元11确定所述DFA的当前状态为所述后缀接受态时,保存第二字符的偏移地址,所述第二字符为所述接收单元10接收到的所述第一报文中使得所述DFA跳转至所述后缀接受态的字符。
[0194]判断单元17,用于根据所述第一保存单元13保存的所述第一字符的偏移地址、所述第二字符的偏移地址、所述更新单元16更新后的所述第一计数器的值、后缀的长度及所述字符重复次数判断所述接收单元10接收的第一报文是否满足所述第一规则。
[0195]可选的,如图5所示,所述规则匹配装置1还包括关闭单元18。
[0196]所述关闭单元18,用于当所述更新单元16更新所述第一计数器的次数不等于所述字符重复次数时,若Offset≥Begin且End-Offset+l < m,则关闭所述第一计数器,其中,Offset为输入所述DFA的当前字符的偏移地址,Begin为与Offset的差值最小的所述η个连续字符中的第一个字符的偏移地址,End为与Offset的差值最小的所述η个连续字符中的第η个字符的偏移地址,m为所述字符重复次数。
[0197]可选的,所述匹配条件包括:
[0198]End-Offset+Ι≥m,其中,Offset为输入所述DFA的当前字符的偏移地址,End为与Offset的差值最小的所述η个连续字符中的第η个字符的偏移地址,m为所述字符重复次数。
[0199]或者,
[0200]所述第二保存单元15未保存所述η个连续字符中的第η个字符的偏移地址。
[0201]可选的,如图6所示,该所述规则匹配装置1还包括处理单元19。
[0202]所述处理单元19,用于当通过所述匹配单元11匹配确定所述DFA的当前状态时,查询所述DFA的状态是否设置有死状态标志,以及若所述DFA的状态设置有所述死状态标志,且所述关闭单元18将所述第一计数关闭,则结束所述DFA的状态跳转。
[0203]可选的,所述处理单元19,还用于在所述查询所述DFA的状态是否设置有死状态标志之前,获取所述DFA的有向图,以及若在所述DFA的有向图中,获取到未与所述前缀接受态连接的状态,则将所述未与所述前缀接受态连接的状态设置一个所述死状态标志。
[0204]所述判断单元17,具体用于若所述第一保存单元13保存的所述第二字符的偏移地址与所述第一规则的后缀部分的长度之差大于等于,所述第一保存单元13保存的所述第一字符的偏移地址与所述字符重复次数之和,且所述第一保存单元13保存的所述第二字符的偏移地址与所述第一规则的后缀部分的长度之差小于等于,所述第一保存单元13保存的所述第一字符的偏移地址、所述字符重复次数及所述更新单元16更新后的所述第一计数器的值之和,则判断所述接收单元10接收到的所述第一报文满足所述第一规则。
[0205]可选的,所述更新单元16,具体用于获取所述第二保存单元15保存的所述偏移地址对的长度,所述偏移地址对的长度为所述结束地址与所述起始地址之差,再加上1,以及将所述第一计数器的值减去所述偏移地址对的长度。
[0206]可选的,所述前缀部分和所述后缀部分保存在所述DFA中,所述中间部分保存在字符判别模块中,其中,所述DFA包括所述匹配单元11、所述开启单元12和所述第一保存单元13 ;所述字符判别模块包括所述确定单元14和所述第二保存单元15。
[0207]可选的,所述中间部分的字符为一个确定的字符,或者为多个可选字符中的任意一个字符,以及所述字符重复次数为一个固定次数,或者为由一个下限值和一个上限值组成的次数范围。[0208]本发明实施例提供一种规则匹配装置,该规则匹配装置用于对符合第一规则的报文进行匹配,该第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数,该规则匹配装置通过接收第一报文,该第一报文包括多个字符,并该规则匹配装置通过有限自动机DFA对该第一报文中的多个字符进行匹配,其中,DFA包括前缀接受态和后缀接受态,该DFA由更新后的第一规则编译后得至IJ,更新后的第一规则包括该前缀部分,更新后的中间部分,以及该后缀部分,该更新后的中间部分的正则表达式为*”,及当该规则匹配装置通过该DFA匹配确定该DFA的当前状态为前缀接受态,并满足匹配条件时,该规则匹配装置开启第一计数器,并保存第一字符的偏移地址,该第一字符为第一报文中使得DFA跳转至前缀接受态的字符,该第一计数器用于对匹配的字符进行计数,以及在该规则匹配装置通过DFA进行匹配的同时,该规则匹配装置以每次匹配X个连续字符的方式对第一报文中的多个字符进行匹配,以确定是否有一个或多个中间部分的字符,每当该规则匹配装置确定有η个连续字符是中间部分的字符时,该规则匹配装置保存该次确定的η个连续字符的偏移地址对,并根据该偏移地址对更新第一计数器的值,该偏移地址对包括起始地址以及结束地址,该起始地址为η个连续字符中的第一个字符的偏移地址,该结束地址为η个连续字符中的第η个字符的偏移地址,其中,X为大于等于2的整数;η为大于等于1的整数,然后当该规则匹配装置通过DFA匹配确定DFA的当前状态为后缀接受态时,该规则匹配装置保存第二字符的偏移地址,该第二字符为第一报文中使得DFA跳转至后缀接受态的字符,最后该规则匹配装置根据第一字符的偏移地址、第二字符的偏移地址、更新后的第一计数器的值、第一规则的后缀部分的长度及字符重复次数判断第一报文是否满足第一规则。通过该方案,由于每次可以对第一报文中的多个连续字符同时进行判断,且只在DFA中设置了规则的前缀接受态和后缀接受态,因此,能够提高报文处理速度、减少规则的存储空间,以及提高报文的匹配效率。
[0209]实施例四
[0210]如图7所示,本发明的实施例提供一种规则匹配装置,该规则匹配装置用于对符合第一规则的报文进行匹配,第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数,该规则匹配装置包括逻辑器件20以及存储器21,其中,
[0211]逻辑器件20为规则匹配装置的控制以及处理中心,通过运行存储在存储器21中的软件程序,并调用及处理存储在存储器21中的数据,从而控制规则匹配装置进行收发信号,以及实现规则匹配装置的其他功能。
[0212]存储器21可用于存储软件程序及数据,以使得逻辑器件20可通过运行存储在存储器21中的软件程序,从而实现规则匹配装置的收发信号以及其他功能。
[0213]具体的,所述逻辑器件20可用于接收第一报文,所述第一报文包括多个字符,及通过有限自动机DFA对所述第一报文中的多个字符进行匹配,其中,所述DFA包括前缀接受态和后缀接受态,所述DFA由更新后的第一规则编译后得到,所述更新后的第一规则包括所述前缀部分,更新后的中间部分,以及所述后缀部分,所述更新后的中间部分的正则表达式为*”,及当通过所述DFA匹配确定所述DFA的当前状态为前缀接受态,并满足匹配条件时,开启第一计数器,并保存第一字符的偏移地址,所述第一字符为所述第一报文中使得所述DFA跳转至所述前缀接受态的字符,所述第一计数器用于对匹配的字符进行计数,并且在通过所述DFA进行匹配的同时,以每次匹配X个连续字符的方式对所述第一报文中的多个字符进行匹配,以确定是否有一个或多个所述中间部分的字符,每当确定有η个连续字符是所述中间部分的字符时,保存该次确定的所述η个连续字符的偏移地址对,以及根据所述偏移地址对更新所述第一计数器的值,所述偏移地址对包括起始地址以及结束地址,所述起始地址为所述η个连续字符中的第一个字符的偏移地址,所述结束地址为所述η个连续字符中的第η个字符的偏移地址,其中,X为大于等于2的整数,η为大于等于1的整数,然后当通过所述DFA匹配确定所述DFA的当前状态为所述后缀接受态时,保存第二字符的偏移地址,所述第二字符为所述第一报文中使得所述DFA跳转至所述后缀接受态的字符,最后根据所述第一字符的偏移地址、所述第二字符的偏移地址、更新后的所述第一计数器的值、所述第一规则的后缀部分的长度及所述字符重复次数判断所述第一报文是否满足所述第一规则;所述存储器21可用于存储所述第一字符的偏移地址的软件代码、所述η个连续字符中的第一个字符的偏移地址的软件代码、所述η个连续字符中的第η个字符的偏移地址的软件代码、所述第二字符的偏移地址的软件代码,以及控制所述规则匹配装置完成上述步骤的软件程序,从而使得所述逻辑器件20可通过执行所述存储器21中存储的所述软件程序及调用相应的软件代码完成上述步骤。
[0214]可选的,所述逻辑器件20,还用于当更新所述第一计数器的次数不等于所述字符重复次数时,若Offset ^ Begin且End-Offset+1 < m,则关闭所述第一计数器,其中,Offset为输入所述DFA的当前字符的偏移地址,Begin为与Offset的差值最小的所述η个连续字符中的第一个字符的偏移地址,End为与Offset的差值最小的所述η个连续字符中的第η个字符的偏移地址,m为所述字符重复次数。
[0215]可选的,所述匹配条件包括:
[0216]End-Offset+Ι≥m,其中,Offset为输入所述DFA的当前字符的偏移地址,End为与Offset的差值最小的所述η个连续字符中的第η个字符的偏移地址,m为所述字符重复次数。
[0217]或者,
[0218]未保存所述η个连续字符中的第η个字符的偏移地址。
[0219]可选的,所述逻辑器件20,还用于当通过所述DFA匹配确定所述DFA的当前状态时,查询所述DFA的状态是否设置有死状态标志,以及若所述DFA的状态设置有所述死状态标志,且所述第一计数器关闭,则结束所述DFA的状态跳转。
[0220]可选的,所述逻辑器件20,还用于所述查询所述DFA的状态是否设置有死状态标志之前,获取所述DFA的有向图,以及若在所述DFA的有向图中,获取到未与所述前缀接受态连接的状态,则将所述未与所述前缀接受态连接的状态设置一个所述死状态标志。
[0221]可选的,所述逻辑器件20,具体用于若所述第二字符的偏移地址与所述第一规则的后缀部分的长度之差大于等于,所述第一字符的偏移地址与所述字符重复次数之和,且所述第二字符的偏移地址与所述第一规则的后缀部分的长度之差小于等于,所述第一字符的偏移地址、所述字符重复次数及更新后的所述第一计数器的值之和,则判断所述第一报文满足所述第一规则。
[0222]可选的,所述逻辑器件20,具体用于获取所述偏移地址对的长度,所述偏移地址对的长度为所述结束地址与所述起始地址之差,再加上1,以及将所述第一计数器的值减去所述偏移地址对的长度。
[0223]可选的,所述前缀部分和所述后缀部分保存在所述DFA中,所述中间部分保存在字符判别模块中,其中,所述逻辑器件20包括第一子逻辑器件和第二子逻辑器件,所述第一子逻辑器件为所述DFA的逻辑器件,所述第二子逻辑器件为所述字符判别模块的逻辑器件,所述第一子逻辑器件,用于对所述第一报文中的多个字符进行匹配,并当通过匹配确定当前状态为所述前缀接受态,并满足所述匹配条件时,开启所述第一计数器,并保存所述第一字符的偏移地址,以及当通过匹配确定所述当前状态为所述后缀接受态时,保存所述第二字符的偏移地址,所述第二字逻辑器件用于在通过所述DFA进行匹配的同时,以每次匹配所述X个连续字符的方式对所述第一报文中的多个字符进行匹配,以确定是否有一个或多个所述中间部分的字符,每当确定有所述η个连续字符是所述中间部分的字符时,保存该次确定的所述η个连续字符的偏移地址对,以及根据所述偏移地址对更新所述第一计数器的值;所述存储器21包括第一子存储器和第二子存储器,所述第一子存储器,用于存储所述第一字符的偏移地址的软件代码及所述第二字符的偏移地址的软件代码,所述第二子存储器,用于存储确定的所述η个连续字符的偏移地址对的软件代码。
[0224]可选的,所述中间部分的字符为一个确定的字符,或者为多个可选字符中的任意一个字符,以及所述字符重复次数为一个固定次数,或者为由一个下限值和一个上限值组成的次数范围。
[0225]如图8所示,本发明的实施例提供一种单板,该单板包括规则匹配装置30、中央处理器31、系统总线32、硬盘33及内存34,其中,
[0226]规则匹配装置30、中央处理器31、硬盘33及内存34通过系统总线32进行通信。
[0227]规则匹配装置30,用于对符合第一规则的报文进行匹配,第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数,规则匹配装置30包括逻辑器件20以及存储器21。
[0228]中央处理器31,为单板的控制以及处理中心,通过运行存储在硬盘33或内存34中的软件程序及数据,从而控制单板进行收发信号,以及单板的其他功能。
[0229]硬盘33及内存34,可用于存储软件程序及数据,以使得中央处理器31可通过运行存储在其中的软件程序,从而实现单板的收发信号以及其他功能。
[0230]具体的,所述规则匹配装置30对接收的报文进行规则匹配后,将规则匹配的结果通过所述系统总线32发送至所述中央处理器31,所述中央处理器32根据所述规则匹配的结果,对所述报文进行删除或不处理操作,并通过所述系统总线32将所述删除或不处理操作记录在所述硬盘33或所述内存34中,以供所述中央处理器31下次处理所述报文时使用。
[0231]本发明实施例提供一种规则匹配装置,该规则匹配装置用于对符合第一规则的报文进行匹配,该第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数,该规则匹配装置通过接收第一报文,该第一报文包括多个字符,并该规则匹配装置通过有限自动机DFA对该第一报文中的多个字符进行匹配,其中,DFA包括前缀接受态和后缀接受态,该DFA由更新后的第一规则编译后得至IJ,更新后的第一规则包括该前缀部分,更新后的中间部分,以及该后缀部分,该更新后的中间部分的正则表达式为*”,及当该规则匹配装置通过该DFA匹配确定该DFA的当前状态为前缀接受态,并满足匹配条件时,该规则匹配装置开启第一计数器,并保存第一字符的偏移地址,该第一字符为第一报文中使得DFA跳转至前缀接受态的字符,该第一计数器用于对匹配的字符进行计数,以及在该规则匹配装置通过DFA进行匹配的同时,该规则匹配装置以每次匹配X个连续字符的方式对第一报文中的多个字符进行匹配,以确定是否有一个或多个中间部分的字符,每当该规则匹配装置确定有η个连续字符是中间部分的字符时,该规则匹配装置保存该次确定的η个连续字符的偏移地址对,并根据该偏移地址对更新第一计数器的值,该偏移地址对包括起始地址以及结束地址,该起始地址为η个连续字符中的第一个字符的偏移地址,该结束地址为η个连续字符中的第η个字符的偏移地址,其中,X为大于等于2的整数;η为大于等于1的整数,然后当该规则匹配装置通过DFA匹配确定DFA的当前状态为后缀接受态时,该规则匹配装置保存第二字符的偏移地址,该第二字符为第一报文中使得DFA跳转至后缀接受态的字符,最后该规则匹配装置根据第一字符的偏移地址、第二字符的偏移地址、更新后的第一计数器的值、第一规则的后缀部分的长度及字符重复次数判断第一报文是否满足第一规则。通过该方案,由于每次可以对第一报文中的多个连续字符同时进行判断,且只在DFA中设置了规则的前缀接受态和后缀接受态,因此,能够提高报文处理速度、减少规则的存储空间,以及提高报文的匹配效率。
[0232]所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0233]在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0234]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0235]另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0236]所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM, Read-Only Memory)、随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0237]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
【权利要求】
1.一种规则匹配方法,其特征在于,用于对符合第一规则的报文进行匹配,所述第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数,所述方法包括: 接收第一报文,所述第一报文包括多个字符; 通过有限自动机DFA对所述第一报文中的多个字符进行匹配,其中,所述DFA包括前缀接受态和后缀接受态,所述DFA由更新后的第一规则编译后得到,所述更新后的第一规则包括所述前缀部分,更新后的中间部分,以及所述后缀部分;所述更新后的中间部分的正则表达式为*” ; 当通过所述DFA匹配确定所述DFA的当前状态为前缀接受态,并满足匹配条件时,开启第一计数器,并保存第一字符的偏移地址,所述第一字符为所述第一报文中使得所述DFA跳转至所述前缀接受态的字符,所述第一计数器用于对匹配的字符进行计数; 在通过所述DFA进行匹配的同时,以每次匹配X个连续字符的方式对所述第一报文中的多个字符进行匹配,以确定是否有一个或多个所述中间部分的字符,每当确定有η个连续字符是所述中间部分的字符时,保存该次确定的所述η个连续字符的偏移地址对,以及根据所述偏移地址对更新所述第一计数器的值,所述偏移地址对包括起始地址以及结束地址,所述起始地址为所述η个连续字符中的第一个字符的偏移地址,所述结束地址为所述η个连续字符中的第η个字符的偏移地址;其中,X为大于等于2的整数;η为大于等于I的整数; 当通过所述DFA匹配确定所述DFA的当前状态为所述后缀接受态时,保存第二字符的偏移地址,所述第二字符为所述第一报文中使得所述DFA跳转至所述后缀接受态的字符; 根据所述第一字符的偏移地址、所述第二字符的偏移地址、更新后的所述第一计数器的值、所述第一规则的后缀部分的长度及所述字符重复次数判断所述第一报文是否满足所述第一规则。
2.根据权利要求1所述的规则匹配方法,其特征在于,当更新所述第一计数器的次数不等于所述字符重复次数时,所述方法还包括: 若Offset≥Begin且End-Offset+1 < m,则关闭所述第一计数器,其中,Offset为输入所述DFA的当前字符的偏移地址,Begin为与Offset的差值最小的所述η个连续字符中的第一个字符的偏移地址,End为与Offset的差值最小的所述η个连续字符中的第η个字符的偏移地址,m为所述字符重复次数。
3.根据权利要求1或2所述的规则匹配方法,其特征在于,所述匹配条件包括: End-Offset+Ι≥m,其中,Offset为输入所述DFA的当前字符的偏移地址,End为与Offset的差值最小的所述η个连续字符中的第η个字符的偏移地址,m为所述字符重复次数; 或者, 未保存所述η个连续字符中的第η个字符的偏移地址。
4.根据权利要求1-3任一项所述的规则匹配方法,其特征在于,所述方法还包括: 当通过所述DFA匹配确定所述DFA的当前状态时,查询所述DFA的状态是否设置有死状态标志; 若所述DFA的状态设置有所述死状态标志,且所述第一计数器关闭,则结束所述DFA的状态跳转。
5.根据权利要求4所述的规则匹配方法,其特征在于,所述查询所述DFA的状态是否设置有死状态标志之前,所述方法还包括: 获取所述DFA的有向图; 若在所述DFA的有向图中,获取到未与所述前缀接受态连接的状态,则将所述未与所述前缀接受态连接的状态设置一个所述死状态标志。
6.根据权利要求1-5任一项所述的规则匹配方法,其特征在于,所述根据所述第一字符的偏移地址、所述第二字符的偏移地址、更新后的所述第一计数器的值、所述第一规则的后缀部分的长度及所述字符重复次数判断所述第一报文是否满足所述第一规则,具体包括: 若所述第二字符的偏移地址与所述第一规则的后缀部分的长度之差大于等于,所述第一字符的偏移地址与所述字符重复次数之和,且所述第二字符的偏移地址与所述第一规则的后缀部分的长度之差小于等于,所述第一字符的偏移地址、所述字符重复次数及更新后的所述第一计数器的值之和,则判断所述第一报文满足所述第一规则。
7.根据权利要求1-6任一项所述的规则匹配方法,其特征在于,所述根据所述偏移地址对更新所述第一计数器的值,具体包括: 获取所述偏移地址对的长度,所述偏移地址对的长度为所述结束地址与所述起始地址之差,再加上I ; 将所述第一计数器的值减去所述偏移地址对的长度。
8.根据权利要求1-7任一项所述的规则匹配方法,其特征在于,所述前缀部分和所述后缀部分保存在所述DFA中,所述中间部分保存在字符判别模块中,其中,所述DFA用于对所述第一报文中的多个字符进行匹配,并当通过匹配确定当前状态为所述前缀接受态,并满足所述匹配条件时,开启所述第一计数器,并保存所述第一字符的偏移地址,以及当通过匹配确定所述当前状态为所述后缀接受态时,保存所述第二字符的偏移地址;所述字符判别模块用于在通过所述DFA进行匹配的同时,以每次匹配所述X个连续字符的方式对所述第一报文中的多个字符进行匹配,以确定是否有一个或多个所述中间部分的字符,每当确定有所述η个连续字符是所述中间部分的字符时,保存该次确定的所述η个连续字符的偏移地址对,以及根据所述偏移地址对更新所述第一计数器的值。
9.根据权利要求1-8任一项所述的规则匹配方法,其特征在于, 所述中间部分的字符为一个确定的字符,或者为多个可选字符中的任意一个字符; 所述字符重复次数为一个固定次数,或者为由一个下限值和一个上限值组成的次数范围。
10.一种规则匹配装置,其特征在于,用于对符合第一规则的报文进行匹配,所述第一规则为基于正则表达式的规则,包括前缀部分、中间部分、以及后缀部分,其中,中间部分包括字符以及字符重复次数,包括: 接收单元,用于接收第一报文,所述第一报文包括多个字符; 匹配单元,用于通过有限自动机DFA对所述接收单元接收的所述第一报文中的多个字符进行匹配,其中,所述DFA包括前缀接受态和后缀接受态,所述DFA由更新后的第一规则编译后得到,所述更新后的第一规则包括所述前缀部分,更新后的中间部分,以及所述后缀部分;所述更新后的中间部分的正则表达式为*”; 开启单元,用于当通过所述匹配单元匹配确定所述DFA的当前状态为前缀接受态,并满足匹配条件时,开启设置第一计数器,所述第一计数器用于对匹配的字符进行计数, 以及第一保存单元,用于保存第一字符的偏移地址,所述第一字符为所述接收单元接收到的所述第一报文中使得所述DFA跳转至所述前缀接受态的字符; 确定单元,用于在通过所述匹配单元进行匹配的同时,以每次匹配X个连续字符的方式对所述接收单元接收的所述第一报文中的多个字符进行匹配,以确定是否有一个或多个所述中间部分的字符; 第二保存单元,用于每当所述确定单元确定有η个连续字符是所述中间部分的字符时,保存该次所述确定单元确定的所述η个连续字符的偏移地址,所述偏移地址对包括起始地址以及结束地址,所述起始地址为所述η个连续字符中的第一个字符的偏移地址,所述结束地址为所述η个连续字符中的第η个字符的偏移地址;其中,X为大于等于2的整数;η为大于等于I的整数;更新单元,用于根据所述第二保存单元保存的所述偏移地址对更新所述第一计数器的值; 所述第一保存单元,还用于通过匹配单元确定所述DFA的当前状态为所述后缀接受态时,保存第二字符的偏移地址,所述第二字符为所述接收单元接收到的所述第一报文中使得所述DFA跳转至所述后缀接受态的字符; 判断单元,用于根据所述第一保存单元保存的所述第一字符的偏移地址、所述第二字符的偏移地址、所述更新单元更新后的所述第一计数器的值、后缀的长度及所述字符重复次数判断所述接收单元接收的第一报文是否满足所述第一规则。
11.根据权利要求10所述的规则匹配装置,其特征在于,所述规则匹配装置还包括关闭单元; 所述关闭单元,用于当所述更新单元更新所述第一计数器的次数不等于所述字符重复次数时,若Offset≥Begin且End-Offset+1 < m,则关闭所述第一计数器,其中,Offset为输入所述DFA的当前字符的偏移地址,Begin为与Offset的差值最小的所述η个连续字符中的第一个字符的偏移地址,End为与Offset的差值最小的所述η个连续字符中的第η个字符的偏移地址,m为所述字符重复次数。
12.根据权利要求10或11所述的规则匹配装置,其特征在于,所述匹配条件包括: End-Offset+Ι≥m,其中,Offset为输入所述DFA的当前字符的偏移地址,End为与Offset的差值最小的所述η个连续字符中的第η个字符的偏移地址,m为所述字符重复次数; 或者, 所述第二保存单元未保存所述η个连续字符中的第η个字符的偏移地址。
13.根据权利要求10-12任一项所述的规则匹配装置,其特征在于,所述规则匹配装置还包括处理单元; 所述处理单元,用于当通过所述匹配单元匹配确定所述DFA的当前状态时,查询所述DFA的状态是否设置有死状态标志,以及若所述DFA的状态设置有所述死状态标志,且所述关闭单元将所述第一计数关闭,则结束所述DFA的状态跳转。
14.根据权利要13所述的规则匹配装置,其特征在于, 所述处理单元,还用于在所述查询所述DFA的状态是否设置有死状态标志之前,获取所述DFA的有向图,以及若在所述DFA的有向图中,获取到未与所述前缀接受态连接的状态,则将所述未与所述前缀接受态连接的状态设置一个所述死状态标志。
15.根据权利要求10-14任一项所述的规则匹配装置,其特征在于, 所述判断单元,具体用于若所述第一保存单元保存的所述第二字符的偏移地址与所述第一规则的后缀部分的长度之差大于等于,所述第一保存单元保存的所述第一字符的偏移地址与所述字符重复次数之和,且所述第一保存单元保存的所述第二字符的偏移地址与所述第一规则的后缀部分的长度之差小于等于,所述第一保存单元保存的所述第一字符的偏移地址、所述字符重复次数及所述更新单元更新后的所述第一计数器的值之和,则判断所述接收单元接收到的所述第一报文满足所述第一规则。
16.根据权利要求10-15任一项所述的规则匹配装置,其特征在于, 所述更新单元,具体用于获取所述第二保存单元保存的所述偏移地址对的长度,所述偏移地址对的长度为所述结束地址与所述起始地址之差,再加上1,以及将所述第一计数器的值减去所述偏移地址对的长度。
17.根据权利要求10-16任一项所述的规则匹配装置,其特征在于,所述前缀部分和所述后缀部分保存在所述DFA中,所述中间部分保存在字符判别模块中,其中,所述DFA包括所述匹配单元、所述开启单元和所述第一保存单元;所述字符判别模块包括所述确定单元和所述第二保存单元。
18.根据权利要求10-17任一项所述的规则匹配装置,其特征在于,所述中间部分的字符为一个确定的字符,或者为多个可选字符中的任意一个字符; 所述字符重复次数为一个固定次数,或者为由一个下限值和一个上限值组成的次数范围。
【文档编号】G06F17/30GK103729452SQ201310755396
【公开日】2014年4月16日 申请日期:2013年12月31日 优先权日:2013年12月31日
【发明者】李朋凯, 孙灵燕, 耿玉磊 申请人:杭州华为数字技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1