一种多关键字自动状态机查找匹配方法

文档序号:6575114阅读:522来源:国知局
专利名称:一种多关键字自动状态机查找匹配方法
技术领域
本发明涉及一种计算机安全过滤中所用到的关键字查找匹配方法,尤其涉及一种在网络正文数据包中定位特定问题关键字的多关键字查找匹配方法。
背景技术
现有的对单一关键字的查找匹配方法有很多,目前常用的方法是自动状态机查找匹配方法,该方法的大致思路是这样的状态机M是一个5元组(Q,q,A,∑,δ),其中Q是状态的有限集合q属于Q是初态A属于Q是一个独特的接收状态集∑是有限的输入字母表δ是状态机M的从状态Q*∑到Q的变迁函数。
如果状态机在状态q,读入输入字符a,则它从状态q变为状态δ(q,a)(进行了一次传播)。每当其当前状态属于A时,则状态机M接收了迄今为止所读入的串。
对每个模式P都存在一个串匹配自动机,必须在预处理阶段根据模式构造出响应的自动机后才能利用它来搜寻正文串。图1是关于模式P=ababaca的状态机的状态转换图。它的开始状态为0,状态集Q={0,1,2,3,4,5,6,7},输入字母表∑={a,b,c}。图2是相应的转换函数δ的构造过程。
从图1和图2中我们可以看出对于任意的字符集∑={a,b,c}的正文串输入,以当前的状态和输入字符为输入参数,经过状态转换函数δ,我们都可以得到一个新状态,一旦状态转换函数δ的输出结果为状态7,也就是说到达了我们设定的接收状态,我们就找到了搜索串。
目前的自动状态机查找匹配方法比较好的解决了单一关键字地查找和匹配,对查找正文每个字符只比较一次,从速度上可以满足系统对算法的要求。但是当需要查找多个关键字时(例如2000个关键字),则需要一种可以将多个关键字的状态表联合形成一个总的状态表的生成算法,这需要考虑将多个关键字的状态表的相似状态进行合并的问题,但是目前的自动状态机查找匹配方法不能解决多关键字同时查找的问题。
此外,美国的斯蒂尔.P.尼克尔在1990年提出的《具有部分关键字分支的前缀检索树》的关键字查找方法(中国专利申请号90107971.5),将包含前缀关键字字段的节点构成的查找前缀索引树可以从正文中查找出多个关键字,但是这种方法在速度上还不能达到对每个字符只比较一次的线形查找速率。

发明内容
本发明的目的是提出一种能够对多个关键字同时查找匹配并且在速度上达到对每个字符只比较一次的线形查找速率的自动状态机查找匹配方法。
本发明的技术方案是这样实现的一种多关键字自动状态机查找匹配方法,包括下列步骤①建立匹配总状态表;②输入待匹配信息;③自动状态机利用匹配总状态表进行查找匹配;④输出查找匹配结果。
其中所述步骤①包括两个阶段第一阶段为生成多关键字总状态表,第二阶段为同步总状态表中的状态。
第一阶段包括下列步骤①初始化自动状态机的总状态表,各关键字状态表和终结状态匹配描述表;②确定所有待查找的关键字之间的关系,对于有包含关系且有相同前缀的关键字的一些字节状态进行确定或合并;③对所有关键字的字符状态表中没有被匹配到的字符再进行匹配;④根据字符状态表进行总状态表的生成。
第二阶段包括下列步骤①对每一个关键字,建立一个临时状态表;②对所有待匹配关键字在该关键字中找到所有匹配的前缀,与临时状态表中的已有前缀进行比较;③根据最大前缀原则更新临时状态表中的状态;④根据临时状态表中的内容对总状态表进行更新。
关键字间的单一状态机的合并程度取决于状态序列的相似程度。所述的相似程度包括三类包含关系,相似关系和没有关系。
所述确定所有待查找的关键字之间的关系包括①判断某关键字与其下所有关键字判断是否有前缀关系;②判断两个关键字是否有包含关系。
将具有前缀关系的关键字进行如下状态合并
①如果是相同的关键字,则删除后面一个关键字,并释放后面一个关键字的字符状态表;②如果两个关键字只有部分相同,则从相同的第一个字符开始,分别从两个关键字的字符状态表中找出该字符下关键字的当前状态。
1)如果两个关键字中相应的字符状态都为空闲状态,则取新的状态,并更新两个关键字的字符状态表中的相应的状态为一个相同的中间状态;2)如果两个关键字中某个字符下的字符状态表中的当前状态不为空闲状态,若其中一个已经被赋过状态,则用其值更新另一个的当前状态;3)如果是二者都不处于空闲状态,并且两者的当前状态又不相等,则判断是已经存在匹配关系。如果二者都是终结状态,以前一个状态为准;如果只有一个是终结状态,用该状态同步另一个中相应的状态。
对两个关键字有包含关系的进行如下处理①如果长关键字在包含串所对应的最后一个字符处的状态为空闲状态,则申请一个新的终结状态;②如果长关键字在包含串所对应的最后一个字符处的状态不为终结状态,则为其申请一个新的终结状态;③如果两个关键字有同样的前缀又是包含关系,则二关键字的终结状态以长关键字为准;④如果是到长关键字的最后一个字符匹配,则把长关键字也加入字符状态匹配描述表。
所述根据最大前缀原则更新临时状态表中的状态包括下列步骤①如果匹配长度为目的关键字的长度,这种包含关系的状态确定,在前面包含关系匹配中已经确定,其状态已经全部合并完成,可以不做处理;②如果源关键字下面一个字符是结尾,则说明源关键字在目标关键字中,二者有包含关系,如果需要继续向下找其它匹配字符,则可以继续进行处理;③在临时状态表中,取出当前匹配的最大前缀长度,如果目前的前缀大于原来的前缀,则状态转为目的关键字匹配终结时字符所要对应的状态。
本发明根据多个关键字间的关系,生成出可以用于同时查找匹配多个关键字的自动状态机,当自动机的当前状态为查找的终结状态,则多个关键字中的某个或多个关键字同时被查找定位到。本发明的查找速度为对正文中每一个字符只比较一次,可以满足系统对处理速度的实时性要求。本发明的查找速度和规则数无关,故在规则数量多的情况下更具备优势。
综上所述,本发明具有以下有益效果
1、查找速度快。对正文中的每一个字符只比较一次,对查找速率实时性要求高的系统,本发明的速度优势比较明显。
2、查找速度和规则数无关。同时匹配查找关键字的数量的多少对查找速度没有影响,可以满足海量规则的要求。
3、对查找关键字的编码没有特殊要求,可以查找多种文字混合的正文。
4、可以同时查找多个特定关键字,也可以只查找指定的某一个关键字。


图1是现有技术中自动状态机关于模式串P=ababaca的状态转换示意图。
图2是现有技术中自动状态机关于模式串P=ababaca的状态转换函数δ的构造过程示意图。
图3是本发明提出的多关键字自动状态机查找匹配方法的总流程图。
图4是本发明提出的方法中建立匹配总状态表的第一阶段的流程图。
图5是本发明提出的方法中建立匹配总状态表的第二阶段的流程图。
具体实施例方式
下面结合附图对本发明做进一步的详细说明。
图1和图2在背景技术中已经做过说明。
图3是本发明提出的多关键字自动状态机查找匹配方法的总流程图。对待查询的协议正文的过滤处理可以看作是在一段正文中同时查询多个特定关键字的问题。因为IDS系统对实时性要求往往都比较高,在正文中查找关键字的处理速度和正确率直接影响到匹配过滤性能的好坏,其性能是系统性能的一个关键部分。系统要求对查找正文的每个字符匹配次数要尽可能少,查找关键字的长度对查找性能没有影响。另外,系统要求同时查找的关键字的数量对系统的影响应该尽可能的小,不会因为查找关键字数量的大量增加而使系统的性能大幅下降。如图3所示,本发明提出的这种多关键字自动状态机查找匹配方法,包括下列步骤①建立匹配总状态表;②输入待匹配信息;③自动状态机利用匹配总状态表进行查找匹配;④输出查找匹配结果。
上面所述的步骤①包括两个阶段第一阶段为生成多关键字总状态表,第二阶段为同步总状态表中的状态。图4是是本发明提出的方法中建立匹配总状态表的第一阶段的流程图。如图4所示,第一阶段包括下列步骤①初始化自动状态机的总状态表,各关键字状态表和终结状态匹配描述表。关键字状态表是各关键字的每个字节的状态表。字符状态匹配描述表是表示在某个终结状态下的查找到的关键字的信息。②确定所有待查找的关键字之间的关系,对于有包含关系且有相同前缀的关键字的一些字节状态进行确定或合并;③对所有关键字的字符状态表中没有被匹配到的字符再进行匹配;④根据字符状态表进行总状态表的生成。
每个关键字都可以归纳出该关键字的状态表,状态表中的状态表示当前已经匹配的关键字前缀。对于同时匹配多个关键字,则各关键字状态表中的状态是可以并且必须合并的。关键字间单一状态机的合并程度取决于状态序列的相似程度,所以可以将关键字与关键字间的关系用它们之间的相似程度来划分。根据两个关键字的相同部分在关键字中的位置可以将关键字间的相互关系归为以下几类

需要合并的是具有相似关系和包含关系的关键字。
具有相似关系的关键字分为两类一类是相同部分从两个关键字的头开始,结束于关键字中。如abcde和abcmnl间的关系,他们有相同的前缀关键字abc。
另一类是相同部分从其中一个关键字的中间开始,如abcdef和bcdgk,第二个关键字的前缀bcd与第一个关键字中的部分相同。
还有的就是具有特殊的包含关系的(两个关键字相同或者一个关键字从头开始被完全包含在另一个关键字中)。如acd被acdfg包含,abc被aabcd包含。
若两个关键字之间从前缀开始互相没有任何相似关系,则它们之间不会有状态间互相转换的可能,它们的状态集没有交集,那么两个关键字的状态将互相独立存在于多关键字状态机中。
关键字间的关系若具有上述的相互联系的关系的,那么两个关键字在状态表中将有相互间的状态转换的关系。两个关键字相同的关键字部分在状态表中的状态必须用唯一的状态来表示,关键字完全查找到的状态用终结状态来表示。若某一关键字属于另一个关键字的中间一部分,则该关键字的状态都属于另一个关键字的状态集。
所述第一阶段的第②中确定所有待查找的关键字之间的关系包括①判断某关键字与其下所有关键字判断是否有前缀关系;②判断两个关键字是否有包含关系。
将具有前缀关系的关键字进行如下状态合并①如果是相同的关键字,则删除后面一个关键字,并释放后面一个关键字的字符状态表;
②如果两个关键字只有部分相同,则从相同的第一个字符开始,分别从两个关键字的字符状态表中找出该字符下关键字的当前状态。
1)如果两个关键字中相应的字符状态都为空闲状态,则取新的状态,并更新两个关键字的字符状态表中的相应的状态为一个相同的中间状态;2)如果两个关键字中某个字符下的字符状态表中的当前状态不为空闲状态,若其中一个已经被赋过状态,则用其值更新另一个的当前状态;3)如果是二者都不处于空闲状态,并且两者的当前状态又不相等,则判断是已经存在匹配关系。如果二者都是终结状态,以前一个状态为准;如果只有一个是终结状态,用该状态同步另一个中相应的状态。
对两个关键字有包含关系的进行如下处理①如果长关键字在包含串所对应的最后一个字符处的状态为空闲状态,则申请一个新的终结状态;②如果长关键字在包含串所对应的最后一个字符处的状态不为终结状态,则为其申请一个新的终结状态;③如果两个关键字有同样的前缀又是包含关系,则二关键字的终结状态以长关键字为准;④如果是到长关键字的最后一个字符匹配,则把长关键字也加入字符状态匹配描述表。
第一阶段的第③步,对所有关键字的字符状态表中没有被匹配到的字符再进行匹配。对所有关键字的字符状态表中没有被匹配到的字符再进行匹配。对于为空闲状态的申请一个新的中间状态。关键字最后字符下的当前状态若为空闲状态,则申请一个新的终结状态。
第一阶段的第④步是根据字符状态表进行总状态表的生成。总状态表为变量分别为状态和输入字符的二维表,表中数据为状态变迁的下一个跳转状态。
根据所有关键字的状态表,将所有状态同步到总状态表中去,可以初步完成总状态表的建立。初步的总状态表还不能解决关键字间状态转换时存在的最佳跳转问题,也就是在某个字符状态下所有关键字(包括本身)在该状态下隐含的最大已匹配前缀的问题。通过对每个关键字建一临时状态表,对所有待查找关键字在该关键字中找到所有匹配的前缀,和临时表中的已有前缀做比较,保留最大前缀,最后将临时表更新到总状态表中去,完成总状态表的建立。图5是本发明提出的方法中建立匹配总状态表的第二阶段的流程图。如图5所示,第二阶段包括下列步骤①对每一个关键字,建立一个临时状态表;②对所有待匹配关键字在该关键字中找到所有匹配的前缀,与临时状态表中的已有前缀进行比较;③根据最大前缀原则更新临时状态表中的状态;④根据临时状态表中的内容对总状态表进行更新。同步方法为对所有的关键字,设初始当前状态为空闲状态,输入字符为关键字的第一个字符,则总状态表的下一个跳转状态为该关键字在字符状态表中的当前字符下的下一个跳转状态。接着设当前状态为下一个跳转状态,当前的输入字符为关键字的第二个字符,又从该关键字在字符状态表中取的了下一个的跳转状态。依此类推,将所有的关键字的字符状态表同步的总状态表中。
对每一个关键字,建立一个临时状态表,是变量为关键字长度和字符可能值(255)的二维数组,数组存放值为目前到该字符终止,下一跳正文前移前缀可能的最大长度。与其它所有待查找的关键字进行比较,找出其所有前缀,根据原来的表比较找到其串系,并针对每一个字节来确定其状态机的内容,更新临时状态表,刷新总状态转换表。对比较的源关键字,在其中找出目的关键字在其中的匹配前缀的长度。
根据最大前缀原则更新临时状态表中的状态包括下列步骤①如果匹配长度为目的关键字的长度,这种包含关系的状态确定,在前面包含关系匹配中已经确定,其状态已经全部合并完成,可以不做处理;②如果源关键字下面一个字符是结尾,则说明源关键字在目标关键字中,二者有包含关系,如果需要继续向下找其它匹配字符,则可以继续进行处理;③在临时状态表中,取出当前匹配的最大前缀长度,如果目前的前缀大于原来的前缀,则状态转为目的关键字匹配终结时字符所要对应的状态。
本发明的应用范围非常广泛,可应用于HTTP,FTP,邮件等安全过滤中在正文中同时查找多个关键字。即可用于实时性要求很高的实时网络信息监控系统和检索信息量很大的大规模监控,也可应用于一般的信息检测系统。
权利要求
1.一种多关键字自动状态机查找匹配方法,其特征在于包括下列步骤①建立匹配总状态表;②输入待匹配信息;③自动状态机利用匹配总状态表进行查找匹配;④输出查找匹配结果。
2.根据权利要求1所述的一种多关键字自动状态机查找匹配方法,其特征在于所述步骤①包括两个阶段第一阶段为生成多关键字总状态表,第二阶段为同步总状态表中的状态。
3.根据权利要求2所述的一种多关键字自动状态机查找匹配方法,其特征在于所述第一阶段包括下列步骤①初始化自动状态机的总状态表,各关键字状态表和终结状态匹配描述表;②确定所有待查找的关键字之间的关系,对于有包含关系且有相同前缀的关键字的一些字节状态进行确定或合并;③对所有关键字的字符状态表中没有被匹配到的字符再进行匹配;④根据字符状态表进行总状态表的生成。
4.根据权利要求2所述的一种多关键字自动状态机查找匹配方法,其特征在于所述第二阶段包括下列步骤①对每一个关键字,建立一个临时状态表;②对所有待匹配关键字在该关键字中找到所有匹配的前缀,与临时状态表中的已有前缀进行比较;③根据最大前缀原则更新临时状态表中的状态;④根据临时状态表中的内容对总状态表进行更新。
5.根据权利要求3所述的一种多关键字自动状态机查找匹配方法,其特征在于所述关键字间的单一状态机的合并程度取决于状态序列的相似程度。
6.根据权利要求5所述的一种多关键字自动状态机查找匹配方法,其特征在于所述的相似程度包括三类包含关系,相似关系和没有关系。
7.根据权利要求3所述的一种多关键字自动状态机查找匹配方法,其特征在于所述步骤②包括①判断某关键字与其下所有关键字判断是否有前缀关系;②判断两个关键字是否有包含关系。
8.根据权利要求7所述的一种多关键字自动状态机查找匹配方法,其特征在于将具有前缀关系的关键字进行如下状态合并①如果是相同的关键字,则删除后面一个关键字,并释放后面一个关键字的字符状态表;②如果两个关键字只有部分相同,则从相同的第一个字符开始,分别从两个关键字的字符状态表中找出该字符下关键字的当前状态。
9.根据权利要求8所述的一种多关键字自动状态机查找匹配方法,其特征在于所述步骤②具体包括如下步骤①如果两个关键字中相应的字符状态都为空闲状态,则取新的状态,并更新两个关键字的字符状态表中的相应的状态为一个相同的中间状态;②如果两个关键字中某个字符下的字符状态表中的当前状态不为空闲状态,若其中一个已经被赋过状态,则用其值更新另一个的当前状态;③如果是二者都不处于空闲状态,并且两者的当前状态又不相等,则判断是已经存在匹配关系。如果二者都是终结状态,以前一个状态为准;如果只有一个是终结状态,用该状态同步另一个中相应的状态。
10.根据权利要求7所述的一种多关键字自动状态机查找匹配方法,其特征在于对两个关键字有包含关系的进行如下处理①如果长关键字在包含串所对应的最后一个字符处的状态为空闲状态,则申请一个新的终结状态;②如果长关键字在包含串所对应的最后一个字符处的状态不为终结状态,则为其申请一个新的终结状态;③如果两个关键字有同样的前缀又是包含关系,则二关键字的终结状态以长关键字为准;④如果是到长关键字的最后一个字符匹配,则把长关键字也加入字符状态匹配描述表。
11.根据权利要求4所述的一种多关键字自动状态机查找匹配方法,其特征在于所述步骤③包括下列步骤①如果匹配长度为目的关键字的长度,这种包含关系的状态确定,在前面包含关系匹配中已经确定,其状态已经全部合并完成,可以不做处理;②如果源关键字下面一个字符是结尾,则说明源关键字在目标关键字中,二者有包含关系,如果需要继续向下找其它匹配字符,则可以继续进行处理;③在临时状态表中,取出当前匹配的最大前缀长度,如果目前的前缀大于原来的前缀,则状态转为目的关键字匹配终结时字符所要对应的状态。
全文摘要
本发明公开了一种多关键字自动状态机查找匹配方法,包括下列步骤①建立匹配总状态表;②输入待匹配信息;③自动状态机利用匹配总状态表进行查找匹配;④输出查找匹配结果。本发明查找速度快、查找速度和规则数无关;对查找关键字的编码没有特殊要求,可以查找多种文字混合的正文;可以同时查找多个特定关键字,也可以只查找指定的某一个关键字。本发明即可用于实时性要求很高的实时网络信息监控系统和检索信息量很大的大规模监控,也可应用于一般的信息检测系统。
文档编号G06F17/30GK1492359SQ0211137
公开日2004年4月28日 申请日期2002年4月10日 优先权日2002年4月10日
发明者许志军, 秦浩, 吴晨 申请人:深圳市中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1