CN102523219A - 正则表达式匹配系统及匹配方法 - Google Patents

正则表达式匹配系统及匹配方法 Download PDF

Info

Publication number
CN102523219A
CN102523219A CN2011104248534A CN201110424853A CN102523219A CN 102523219 A CN102523219 A CN 102523219A CN 2011104248534 A CN2011104248534 A CN 2011104248534A CN 201110424853 A CN201110424853 A CN 201110424853A CN 102523219 A CN102523219 A CN 102523219A
Authority
CN
China
Prior art keywords
regular expression
rule
matching
regular
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2011104248534A
Other languages
English (en)
Other versions
CN102523219B (zh
Inventor
王凯
亓亚烜
李军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CERTUSNET CORP
Original Assignee
Tsinghua University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tsinghua University filed Critical Tsinghua University
Priority to CN201110424853.4A priority Critical patent/CN102523219B/zh
Publication of CN102523219A publication Critical patent/CN102523219A/zh
Application granted granted Critical
Publication of CN102523219B publication Critical patent/CN102523219B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种正则表达式匹配系统及匹配方法,涉及网络安全技术领域,所述方法包括:预处理单元、匹配单元和转发单元,所述预处理单元对正则表达式规则集合中的规则进行拆分,根据拆分结果构造正则表达式匹配引擎并发送给所述匹配单元,所述匹配单元通过正则表达式匹配引擎对输入网包进行正则表达式匹配处理,输出匹配结果给转发单元,由转发单元实现网包的存储转发。本发明匹配速度快,可以和DFA相比拟;本发明占用内存很小,可以和NFA相比拟,且与正则表达式规则集合的规模成线性关系,可扩展性强;本发明构造速度快,预处理时间接近甚至优于不拆分规则时的NFA构造速度,能够满足实际处理中在规则更新时间上的需求。

Description

正则表达式匹配系统及匹配方法
技术领域
本发明涉及网络安全技术领域,尤其涉及一种正则表达式匹配系统及匹配方法。
背景技术
基于正则表达式的模式匹配,简称正则表达式匹配,是深度检测防火墙(Deep Inspection Firewall)、网络入侵检测/防御系统(NIDS/NIPS)、统一威胁管理(UTM)等安全网关系统的关键组成部分和核心技术所在。正则表达式匹配通过检查和处理OSI网络协议的L4层之上的网包载荷(Payload)来对网包进行监控或者过滤。
正则表达式匹配主要通过确定型有穷自动机(DFA)和非确定型有穷自动机(NFA)两种数据结构来实现。DFA匹配速度快,但内存占用过高,对于不少复杂的正则表达式规则或者大规模的正则表达式规则集合DFA会发生状态爆炸从而根本无法构造出;NFA内存占用小,但匹配速度极慢,在多核或通用处理器平台上根本不能满足实际的网络处理要求。
目前工业界在正则表达式匹配上普遍没有好的解决方案,其方法和面临的瓶颈主要是:1)利用学术界提出的规则分组思想,将一个集合中的正则表达式规则分成多组,每一组正则表达式规则分别构造出对应的满足一定内存占用大小的DFA,用多个DFA来进行正则表达式匹配,但这无法解决不少规则单条就会造成DFA状态爆炸的问题,也无法解决大规模情况下分组DFA太多而造成匹配性能过低的问题;2)为了保证一定的正则表达式匹配性能,改动正则表达式规则的语义以避免生成状态爆炸的DFA,大大牺牲了正则表达式规则所描述特征的精确性;3)提取正则表达式规则中的近似精确串的部分作为预过滤规则,将一个集合中所有正则表达式规则对应的预过滤规则构造成DFA作为预过滤器,而将原来的正则表达式规则集合构造成NFA作为匹配引擎,通过预过滤器来过滤到大部分确定不匹配的内容,而只将疑似匹配的内容传给匹配引擎做精确匹配,但这无法保证匹配性能,好坏完全决定于匹配引擎是否被触发。
而在学术界,关于正则表达式匹配的研究也非常热门,代表性的方法如:基于FPGA平台的NFA方法【R.Sidhu and V.K.Prasanna,“Fast Regular Expression  Matching using FPGAs,”Proc of IEEE FCCM,2001】,正则表达式规则分组方法【F.Yu,X.Chen, Y.Diao,T.V.Lakshman,and R.H.Katz,“Fast and Memory-efficient Regular Expression Matching for Deep  Packet Inspection,”Proc.of ACM/IEEE ANCS,2006】,DFA压缩方法【Y.Qi,K.Wang,J.Fong,Y.Xue, J.Li,W.Jiang,and V.Prasanna,“FEACAN:Front-end Acceleration for Content-aware Network Processing,”Proc  of IEEE INFOCOM,2011】,混合型有穷自动机方法【M.Becchi and P.Crowley,“A Hybri Finite  Automaton for Practical Deep Packet Inspection,”Proc.of ACM CoNEXT,2007】以及扩展型有穷自动机方法【R.Smith,C.Estan,S.Jha,and S.Kong,“Deflating the Big Bang:Fast and Scalable Deep Packet  Inspection with Extended Finite Automata,”Proc.of ACM SIGCOMM,2008】等,但是目前没有一种已公开的方法可以实际全面地解决正则表达式匹配存在的上述问题。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:提供一种正则表达式匹配系统及匹配方法,其能够提高正则表达式匹配的速度,并且具有较强的扩展性。
(二)技术方案
为解决上述问题,本发明提供了一种正则表达式匹配系统,包括:预处理单元、匹配单元和转发单元,所述预处理单元对正则表达式规则集合中的规则进行拆分,根据拆分结果构造正则表达式匹配引擎并发送给所述匹配单元,所述匹配单元通过正则表达式匹配引擎对输入网包进行正则表达式匹配处理,输出匹配结果给转发单元,由转发单元实现网包的存储转发。
优选地,所述预处理单元包括第一预处理模块,用于对正则表达式规则进行拆分。
优选地,所述预处理单元包括第二预处理模块,用于构造正则表达式匹配引擎并发送给所述匹配单元。
优选地,所述第一预处理模块包括:用于对输入的正则表达式规则集合进行规范化处理的规范化处理模块,用于对规范化的正则表达式规则集合进行规则标记的规则标记模块,以及用于对标记好的正则表达式规则集合进行规则拆分的规则拆分模块。
优选地,所述第二预处理模块包括:用于为拆分生成的正则表达式子规则集合构造数据结构的子规则数据结构模块,用于为拆分生成的正则表达式子规则索引文件构造数据结构的索引文件数据结构模块,以及用于根据所述两数据结构模块构造正则表达式匹配引擎的匹配引擎构造模块。
优选地,所述匹配单元包括向匹配单元输入网包的输入模块,通过正则表达式匹配引擎对输入网包数据按字符进行匹配的正则表达式匹配模块,以及输出正则表达式匹配结果给转发单元的输出模块。
一种利用前述系统进行正则表达式匹配的方法,包括以下步骤:
A:预处理单元对正则表达式规则集合中的规则进行拆分生成正则表达式子规则集合,以及对应的正则表达式子规则索引文件;
B:预处理单元根据所述正则表达式子规则集合和正则表达式子规则索引文件构造正则表达式匹配引擎并发送给所述匹配单元;
C:匹配单元通过正则表达式匹配引擎对输入网包进行正则表达式匹配;
D:匹配单元输出匹配结果并发送给转发单元。
优选地,所述步骤A,进一步包括:
A1:对输入的正则表达式规则集合进行规范化处理得到规范化正则表达式规则集合;
A2:对规范化正则表达式规则集合中每条规则的拆分依据进行标记;
A3:根据所述标记对规范化正则表达式规则集合中的规则逐条进行拆分。
优选地,所述步骤B,进一步包括:
B1:为拆分生成的正则表达式子规则集合构造数据结构;
B2:为拆分生成的正则表达式子规则索引文件构造数据结构;
B3:根据所述两数据结构构造正则表达式匹配引擎。
优选地,所述步骤C,进一步包括:
C1:向匹配单元输入网包数据;
C2:通过正则表达式匹配引擎对输入网包数据按字符进行匹配。
(三)有益效果
本发明正则表达式匹配系统及方法,通过拆分正则表达式规则这一核心思想,将原正则表达式规则集合中会引起DFA状态爆炸的规则拆分成了不会引起DFA状态爆炸的子规则;同时构造出的DFA匹配引擎在数据结构描述上等价于原规则集合;最后通过设计子规则的匹配方法,实现了等价于原规则语义的正则表达式匹配,且激活状态数收敛并无限趋近于1。本发明匹配速度快,可以和DFA相比拟,并且基于多核处理器平台的并行处理设计可以让本方法实际地达到线速的匹配速度;本发明占用内存很小,可以和NFA相比拟,且与正则表达式规则集合的规模成线性关系,可扩展性强;本发明构造速度快,预处理时间接近甚至优于不拆分规则时的NFA构造速度,能够满足实际处理中在规则更新时间上的需求。
附图说明
图1为本发明实施方式中所述正则表达式匹配系统的原理图;
图2为本发明实施方式中所述进行正则表达式匹配的方法流程图;
图3为本发明实施方式中所述正则表达式匹配引擎在多核处理器平台上运行时的原理图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
如图1所示,本发明所述的正则表达式匹配系统,包括:预处理单元、匹配单元和转发单元,所述预处理单元对正则表达式规则集合中的规则进行拆分,根据拆分结果构造正则表达式匹配引擎并发送给所述匹配单元,所述匹配单元通过正则表达式匹配引擎对输入网包进行正则表达式匹配处理,输出匹配结果给转发单元,由转发单元实现网包的存储转发。
所述预处理单元包括第一预处理模块,用于对正则表达式规则进行拆分。所述第一预处理模块包括:用于对输入的正则表达式规则集合进行规范化处理的规范化处理模块,用于对规范化的正则表达式规则集合进行规则标记的规则标记模块,以及用于对标记好的正则表达式规则集合进行规则拆分的规则拆分模块。
所述预处理单元包括第二预处理模块,用于构造正则表达式匹配引擎并发送给所述匹配单元。所述第二预处理模块包括:用于为拆分生成的正则表达式子规则集合构造数据结构的子规则数据结构模块,用于为拆分生成的正则表达式子规则索引文件构造数据结构的索引文件数据结构模块,以及用于根据所述两数据结构模块构造正则表达式匹配引擎的匹配引擎构造模块。
所述匹配单元包括向匹配单元输入网包的输入模块,通过正则表达式匹配引擎对输入网包数据按字符进行匹配的正则表达式匹配模块,以及输出正则表达式匹配结果给转发单元的输出模块。
如图2所示,本发明所述的利用前述系统进行正则表达式匹配的方法,包括以下步骤:
A:预处理单元对正则表达式规则集合中的规则进行拆分生成正则表达式子规则集合,以及对应的正则表达式子规则索引文件;
本步骤可通过以下步骤实现:
A1:对输入的正则表达式规则集合进行规范化处理得到规范化正则表达式规则集合;
该步骤是针对输入的正则表达式规则集合中,规则的编写方式不适合直接进行后续的规则标记和拆分、或者规则的编写方式可以进一步优化以提高最终的正则表达式匹配性能的情况。
该步骤按照以下规范来对输入的正则表达式规则集合进行规范化处理(以下双引号之间的“□”表示内容,其他部分表示符号本身):
规范1:一律用符号“.”表示包含了所有ASCII字符的字符集;
规范2:一律用符号“[^□]”表示只排除了少数几个ASCII字符的字符集,或者至少包含了所有大小写字母的字符集;
规范3:一律不用符号“[^□]”表示除规范1和规范2以外的字符集;
规范4:一律用符号“*”表示任意次数的连续重复;
规范5:一律用符号“+”表示至少一次的连续重复;
规范6:一律用符号“?”表示至多一次的连续重复;
规范7:一律用符号“{□}”表示大于一次的限定次数的连续重复,或者除规范5以外的限定次数上限的有限连续重复;
规范8:一律用规范6和规范3的符号组合(规范6的符号在前)来表示除规范3和规范4以外的限定次数下限的无限连续重复;
定义1:在规范1~8的基础上,定义符号组合“.*”“[^□]*”“.+”“[^□]+”“.{□}”“[^□]{□}”为混沌因子,其中符号组合“.*”“.+”为隐性混沌因子,符号组合“[^□]*”“[^□]+”为中性混沌因子,符号组合“.{□}”“[^□]{□}”为显性混沌因子;
规范9:一律使规则中的混沌因子不在任何一对提高优先级的括号“(□)”内;
规范10:一律去掉规则中不在任何一对提高优先级的括号“(□)”内的并规则符号“|”,转换成规则号相同的多条独立规则;
规范11:一律以符号“^”开头表示锚定规则,未以符号“^”开头表示非锚定规则;
定义2:定义在正则表达式语法规范的基础上能够表示出的对应语法组合中最短的字符序列为语法单位;
定义3:定义规则中被混沌因子隔开的至少为一个语法单位的规则片段为近似串;
规范12(优化规范):在满足规范1~10的正则表达式规则集合中,对于每个位于中性和显性混沌因子前面的近似串,优化挑选其后缀连续的一部分,使得这部分近似串后缀片段满足下面的原则。挑选出的近似串后缀片段将用括号“(□)”括起来。
1)近似串存在;
2)不包括本身是锚定规则前缀的近似串;
3)挑选的近似串后缀片段不会因为加上括号“(□)”而造成近似串本来的语法被破坏;
4)对于本身是非锚定规则前缀的近似串、或者前面是隐性混沌因子的近似串,挑选的近似串后缀片段不能完全等于近似串本身而且要尽量短,默认是近似串后缀的一个语法单位;
5)对于前面是中性或显性混沌因子的近似串,挑选的近似串后缀片段不能完全等于近似串本身而且要尽量长,默认是去掉前缀一个语法单位的近似串;
6)对于字符集不完全相同的混沌因子,对应挑选的近似串后缀片段尽可能地相斥,即如果对应的所有片段被锚定后两两之间编译成DFA,两片段的匹配状态是不相同的两个;
7)对于字符集完全相同的混沌因子,对应挑选的近似串后缀片段尽可能地相同,即如果对应的所有片段被锚定后两两之间编译成DFA,两片段的匹配状态是相同的一个;
经过上述的规范化处理,可以得到一个规范统一且优化的正则表达式规则集合。正则表达式规则编写者以后可以参考上述规范来编写正则表达式规则,以实现高效且高性能的基于规则拆分的正则表达式匹配。
A2:对规范化正则表达式规则集合中每条规则的拆分依据进行标记;
该步骤旨在查找和标记正则表达式规则集合中每条规则的拆分点,以指示后续的规则拆分应该在哪拆、如何拆。
该步骤按照以下方法来对规范化的正则表达式规则集合中的规则进行逐条标记:
1)对于规则中没有混沌因子的情况
1.1)非锚定规则
在规则之前插入标记α,完成规则标记;
1.2)锚定规则
在规则之前插入标记β,完成规则标记。
2)对于规则中只有一个混沌因子的情况
2.1)非锚定规则
在规则之前插入标记α;
对于混沌因子:
2.1.1)如果是隐性混沌因子
在混沌因子之前插入标记α,完成规则标记;
2.1.2)如果是非隐性混沌因子
如果混沌因子前面近似串长度仅为一个语法单位:
2.1.2.1)如果是显性混沌因子
在混沌因子前面插入标记γ,完成规则标记;
2.1.2.2)如果是中性混沌因子
在混沌因子前面插入标记δ,完成规则标记;
否则,在混沌因子前面近似串后缀的一个语法单位之前插入标记β,完成规则标记。
2.2)锚定规则
对于混沌因子:
2.2.1)如果是隐性混沌因子
在规则之前插入标记β;
在混沌因子之前插入标记α,完成规则标记;
2.2.2)如果是非隐性混沌因子
如果混沌因子前面没有近似串:
2.2.2.1)如果是显性混沌因子
在混沌因子前面插入标记γ,完成规则标记;
2.2.2.2)如果是中性混沌因子
在混沌因子前面插入标记δ,完成规则标记;
否则,在规则之前插入标记β,完成规则标记。
3)对于规则中至少有两个混沌因子的情况
从规则开头到第一个混沌因子的处理等同情况2,但要继续处理后续的混沌因子;
从上一个混沌因子到下一个混沌因子之间的处理如下,直到下一个混沌因子不存在时完成规则标记:
3.1)如果上一个是隐性混沌因子,下一个是隐性混沌因子
在下一个混沌因子前面插入标记α,继续后面的处理;
3.2)如果上一个是隐性混沌因子,下一个是非隐性混沌因子
如果混沌因子前面近似串长度仅为一个语法单位:
3.2.1)如果下一个混沌因子是显性混沌因子
在下一个混沌因子前面插入标记γ,继续后面的处理;
3.2.2)如果下一个混沌因子是中性混沌因子
在下一个混沌因子前面插入标记δ,继续后面的处理;
否则,在下一个混沌因子前面近似串后缀的一个语法单位之前插入标记β,继续后面的处理;
3.3)如果上一个是非隐性混沌因子,下一个是隐性混沌因子
在下一个混沌因子前面插入标记α,继续后面的处理;
3.4)如果上一个是非隐性混沌因子,下一个是非隐性混沌因子
在下一个混沌因子前面近似串后缀的一个语法单位之前插入标记β,继续后面的处理。
经过上述的规则标记,可以得到一个标记好的正则表达式规则集合,以实现有效的规则拆分。
补充说明:在高级正则表达式语法中,对于表示懒惰匹配的高级语法符号“*?”“+?”“??”“{□}?”,在规则标记中可以等价于“*”“+”“?”“{□}”来处理;对于表示修改匹配模式的高级语法符号“\Q□\E”“(?i)”“(?-i)”“(?s)”“(?-s)”“(?m)”“(?-m)”“(?x)”“(?-m)”,在规则标记中可以基于添加语法来处理。
A3:根据所述标记对规范化正则表达式规则集合中的规则逐条进行拆分。
该步骤旨在将正则表达式规则集合中的每条规则拆分成多条只含有原规则语法片段的子规则,并记录子规则之间的对应信息,以有效地构造后续的正则表达式匹配引擎。
该步骤按照以下方法来对作标记的正则表达式规则集合中的规则进行逐条拆分:
1)对于规则中只有一个标记的情况
不用拆分,将标记后面的整个原规则作为一个子规则,该标记就是该子规则的标记,根据当前的子规则数目设定其子规则号,并按照标记将该子规则和其对应的子规则号存入到相应的子规则集合;同时在索引文件中记录下在原规则中该子规则前一个子规则的子规则号(没有时默认为空),后一个子规则的标记(没有时默认为空),该子规则是原规则的第几部分,以及原规则的规则号;
2)对于规则中至少有两个标记的情况
2.1)从上一个标记到下一个标记之间的处理如下,直到下一个标记不存在时转到情况2.2处理
将上一个标记到下一个标记之间的子规则从原规则中拆分出来,在开头添加锚定符号“^”并去掉子规则中的冗余语法,在所有子规则集合中逐条查找与该子规则等价的子规则:
2.1.1)如果能查找到
将等价子规则的子规则号作为该子规则的子规则号,继续后面的处理;
2.1.2)如果不能查找到
根据当前的子规则数目设定该子规则的子规则号,并按照上一个标记将该子规则和其对应的子规则号存入到相应的子规则集合,该上一个标记就是该子规则的标记;同时在索引文件中记录下在原规则中该子规则前一个子规则的子规则号,后一个子规则的标记(没有时默认为空),该子规则是原规则的第几部分;继续后面的处理;
2.2)对于最后一个标记到规则结尾的处理
将标记后面的子规则从原规则中拆分出来,该标记就是该子规则的标记,在开头添加锚定符号“^”并去掉子规则中的冗余语法,根据当前的子规则数目设定其子规则号,并按照标记将该子规则和其对应的子规则号存入到相应的子规则集合;同时在索引文件中记录下在原规则中该子规则前一个子规则的子规则号,后一个子规则的标记(没有时默认为空),该子规则是原规则的第几部分,以及原规则的规则号。
经过上述的规则拆分,可以生成K(K可能是1,2,3或4,由标记的种数决定)个拆分后的正则表达式子规则集合,以及一个对应的正则表达式子规则索引文件。实际上,K个正则表达式子规则集合可以通过不考虑标记的差异而能够弹性地合并为指定个数的子规则集合。
B:预处理单元根据所述正则表达式子规则集合和正则表达式子规则索引文件构造正则表达式匹配引擎并发送给所述匹配单元;
本步骤可通过以下步骤实现:
B1:为拆分生成的正则表达式子规则集合构造数据结构;
该步骤按照以下流程来为拆分的正则表达式子规则集合进行数据结构的构造:
1)将K个正则表达式子规则集分别构造为K个DFA,每个DFA中对应于某条子规则的匹配状态记录了输出对应子规则的子规则号;
2)可选择利用和本发明正交的DFA优化方法(背景技术中提到的方法)来进一步优化K个DFA。
经过上述的构造,可以实现能够处理每个正则表达式子规则的数据结构。
B2:为拆分生成的正则表达式子规则索引文件构造数据结构;
该步骤旨在将正则表达式子规则索引文件构造成计算机能够处理的数据结构。
该步骤按照以下流程来为拆分的正则表达式子规则索引文件进行数据结构的构造:
1)将正则表达式子规则索引文件中的信息按照表1所示的关联索引信息表示来构造成矩阵数据结构;
表1
其中,每一行的行号对应着每条子规则的子规则号,前导子规则编号对应填写该子规则在原规则中的前一个子规则的子规则号,如果没有则可填为0,后续子规则集合对应填写该子规则在原规则中的后一个子规则属于K个子规则集合中的第几个集合,如果没有则可填为0,阶段一到阶段N对应着该子规则是原规则的第几部分,如果是原规则的最后一部分,所在阶段的数值应填写原规则的规则号,如果不是,所在阶段可填为-1,其他未在的阶段均可填为0;
2)可选择利用稀疏矩阵压缩的方法来进一步压缩生成的关联索引矩阵。
B3:根据所述两数据结构构造正则表达式匹配引擎。
C:匹配单元通过正则表达式匹配引擎对输入网包进行正则表达式匹配;
本步骤可通过以下步骤实现:
C1:向匹配单元输入网包数据;
转发单元从网口接收新的网包,或者从内存提取缓存的网包,按照以下情况来输入内容给正则表达式匹配单元:
如果该网包属于一个旧的网流,且对于该网流是顺序的包,则将该网包的载荷取出作为输入内容传给匹配单元,并附加传送一个旧流标记;
如果该网包属于一个旧的网流,且对于该网流是乱序的包,则将该网包缓存到内存中,继续从网口接收新的网包,直到缓存的网包成为该网流的顺序的包才会重新被转发单元从内存中提取出来;
如果该网包属于一个新的网流,且对于该网流是顺序的包,则将该网包的载荷取出作为输入内容传给匹配单元,并附加传送一个新流标记;
如果该网包属于一个新的网流,且对于该网流是乱序的包,则将该网包缓存到内存中,继续从网口接收新的网包,直到缓存的网包成为该网流的顺序的包才会重新被转发单元从内存中提取出来。
C2:通过正则表达式匹配引擎对输入网包数据按字符进行匹配;
如果流标记说明输入内容是一个新网流的网包载荷,那么将当前激活状态集合S(假设有的话)缓存到相应的内存中,并新生成一个对应该新网流的当前激活状态集合S,其包括对应于K个DFA的K个初始激活状态,且状态值为0,前导子规则编号为0,所在阶段为1。
如果流标记说明输入内容是一个旧网流的网包载荷,且不是当前处理的流,那么将当前激活状态集合S(假设有的话)缓存到相应的内存中,并将对应该旧网流的当前激活状态集合从内存中取出来作为当前激活状态集合S。
如果流标记说明输入内容是一个旧网流的网包载荷,且是当前处理的流,那么继续当前的正则表达式匹配处理。
该步骤按照以下流程对输入内容进行逐个字符的正则表达式匹配处理:
1)对当前激活状态集合S中每个激活状态进行如下处理:
设该激活状态所对应的DFA中对应状态值的状态为s,根据状态s中对应于当前输入字符的状态转移,该激活状态将从状态s跳转到状态t,即该激活状态的状态值变成状态t的状态值;对转移之后的该激活状态进行如下处理:
1.1)如果对应状态值的状态t是匹配状态
表示有正则表达式子规则被匹配;根据匹配状态对应的每个子规则的子规则号,在索引矩阵中查找对应子规则的信息,并对每个匹配子规则进行如下处理:
1.1.1)如果激活状态的前导子规则编号和索引矩阵中对应的前导子规则编号一致,则进行以下处理:
1.1.1.1)如果索引矩阵中对应所在阶段的标号大于0
表示有正则表达式原规则被匹配;执行步骤D,并继续后面的流程;
1.1.1.2)如果索引矩阵中对应阶段的数值等于-1
根据索引矩阵中对应的后续子规则集合确定对应的DFA;当临时激活状态集合T中没有对应该DFA的激活状态时,新生成一个初始激活状态并加入到临时激活状态集合T中,且该初始激活状态的状态值为0,前导子规则编号为索引矩阵中对应的前导子规则编号,所在阶段等于当前激活状态的所在阶段加1,DFA为该DFA;当临时激活状态集合T中已经有对应该DFA的激活状态时,在该激活状态的前导子规则编号中加入当前匹配子规则在索引矩阵中对应的前导子规则编号,在该激活状态的所在阶段中加入当前激活状态的所在阶段加1的阶段。
1.2)如果对应状态值的状态t是死循环状态(对于任何输入字符均是从自身状态跳转到自身状态)
从当前激活状态集合S中去除掉该状态;
2)将临时激活状态集合T中的所有激活状态归并到当前激活状态集合S中,并清空临时激活状态集合T;
3)对当前激活状态集合S进行优化处理
3.1)其中所有的对应于同一个DFA中同一个状态值的激活状态都被认为是等价状态,应该合并为同一个激活状态,且该激活状态的前导子规则编号为所有对应的激活状态的前导子规则编号的无重集合,该激活状态的所在阶段为所有对应的激活状态的所在阶段的无重集合;
3.2)对于对应标记α的DFA,所有的对应此DFA的激活状态如果其前导子规则编号和所在阶段都相同,那么需要且仅需要保留其中一个,去除掉所有其他冗余的状态值为0的激活状态。
D:匹配单元输出匹配结果并发送给转发单元。
在多核处理器平台上,本发明中的正则表达式匹配引擎可以被放入多个虚拟机当中,如图3所示。开始只运行K个虚拟机以处理初始的K个激活状态,每当运行中的虚拟机产生一个新的激活状态,就为该新激活的状态开启一个装载有匹配引擎的虚拟机,以专门处理该激活状态,每当出现有激活状态被关闭的时候,相应的虚拟机也被关闭。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。

Claims (10)

1.一种正则表达式匹配系统,其特征在于,包括:预处理单元、匹配单元和转发单元,所述预处理单元对正则表达式规则集合中的规则进行拆分,根据拆分结果构造正则表达式匹配引擎并发送给所述匹配单元,所述匹配单元通过正则表达式匹配引擎对输入网包进行正则表达式匹配处理,输出匹配结果给转发单元,由转发单元实现网包的存储转发。
2.如权利要求1所述的正则表达式匹配系统,其特征在于,所述预处理单元包括第一预处理模块,用于对正则表达式规则进行拆分。
3.如权利要求1所述的正则表达式匹配系统,其特征在于,所述预处理单元包括第二预处理模块,用于构造正则表达式匹配引擎并发送给所述匹配单元。
4.如权利要求2所述的正则表达式匹配系统,其特征在于,所述第一预处理模块包括:用于对输入的正则表达式规则集合进行规范化处理的规范化处理模块,用于对规范化的正则表达式规则集合进行规则标记的规则标记模块,以及用于对标记好的正则表达式规则集合进行规则拆分的规则拆分模块。
5.如权利要求3所述的正则表达式匹配系统,其特征在于,所述第二预处理模块包括:用于为拆分生成的正则表达式子规则集合构造数据结构的子规则数据结构模块,用于为拆分生成的正则表达式子规则索引文件构造数据结构的索引文件数据结构模块,以及用于根据所述两数据结构模块构造正则表达式匹配引擎的匹配引擎构造模块。
6.如权利要求1所述的正则表达式匹配系统,其特征在于,所述匹配单元包括向匹配单元输入网包的输入模块,通过正则表达式匹配引擎对输入网包数据按字符进行匹配的正则表达式匹配模块,以及输出正则表达式匹配结果给转发单元的输出模块。
7.一种利用权利要求1-6中任一项所述系统进行正则表达式匹配的方法,其特征在于,包括以下步骤:
A:预处理单元对正则表达式规则集合中的规则进行拆分生成正则表达式子规则集合,以及对应的正则表达式子规则索引文件;
B:预处理单元根据所述正则表达式子规则集合和正则表达式子规则索引文件构造正则表达式匹配引擎并发送给所述匹配单元;
C:匹配单元通过正则表达式匹配引擎对输入网包进行正则表达式匹配;
D:匹配单元输出匹配结果并发送给转发单元。
8.如权利要求7所述的进行正则表达式匹配的方法,其特征在于,所述步骤A,进一步包括:
A1:对输入的正则表达式规则集合进行规范化处理得到规范化正则表达式规则集合;
A2:对规范化正则表达式规则集合中每条规则的拆分依据进行标记;
A3:根据所述标记对规范化正则表达式规则集合中的规则逐条进行拆分。
9.如权利要求7所述的进行正则表达式匹配的方法,其特征在于,所述步骤B,进一步包括:
B1:为拆分生成的正则表达式子规则集合构造数据结构;
B2:为拆分生成的正则表达式子规则索引文件构造数据结构;
B3:根据所述两数据结构构造正则表达式匹配引擎。
10.如权利要求7所述的进行正则表达式匹配的方法,其特征在于,所述步骤C,进一步包括:
C1:向匹配单元输入网包数据;
C2:通过正则表达式匹配引擎对输入网包数据按字符进行匹配。
CN201110424853.4A 2011-12-16 2011-12-16 正则表达式匹配系统及匹配方法 Active CN102523219B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110424853.4A CN102523219B (zh) 2011-12-16 2011-12-16 正则表达式匹配系统及匹配方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110424853.4A CN102523219B (zh) 2011-12-16 2011-12-16 正则表达式匹配系统及匹配方法

Publications (2)

Publication Number Publication Date
CN102523219A true CN102523219A (zh) 2012-06-27
CN102523219B CN102523219B (zh) 2015-01-14

Family

ID=46294011

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110424853.4A Active CN102523219B (zh) 2011-12-16 2011-12-16 正则表达式匹配系统及匹配方法

Country Status (1)

Country Link
CN (1) CN102523219B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103259793A (zh) * 2013-05-02 2013-08-21 东北大学 基于后缀自动机正则引擎构造的深度包检测方法
CN103312627A (zh) * 2013-05-30 2013-09-18 中国人民解放军国防科学技术大学 基于两级存储的正则表达式匹配方法
CN104899264A (zh) * 2015-05-21 2015-09-09 东软集团股份有限公司 一种多模式正则表达式匹配方法及装置
CN105791045A (zh) * 2014-12-26 2016-07-20 中国科学院声学研究所 一种面向并行数据流的深度包检测方法及系统
CN106445626A (zh) * 2016-09-30 2017-02-22 北京奇虎科技有限公司 数据分析方法及装置
CN106487803A (zh) * 2016-11-10 2017-03-08 深圳市任子行科技开发有限公司 用于大流量网络入侵检测系统的模式匹配算法和系统
CN107016091A (zh) * 2017-04-06 2017-08-04 北京邮电大学 一种软件定义网络中正则表达式更新方法及装置
CN107608981A (zh) * 2016-07-11 2018-01-19 顺丰科技有限公司 基于正则表达式的字符匹配方法及系统
CN107729001A (zh) * 2017-09-08 2018-02-23 北京京东尚科信息技术有限公司 一种表达式处理方法和装置
CN110928793A (zh) * 2019-11-28 2020-03-27 Oppo广东移动通信有限公司 一种正则表达式检测方法、装置及计算机可读存储介质
CN114186559A (zh) * 2021-12-09 2022-03-15 北京深维智信科技有限公司 一种从销售会话中确定会话主体角色标签的方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101202736A (zh) * 2006-12-13 2008-06-18 西安大唐电信有限公司 一种在通讯网络中实现编解码的方法
US20100153420A1 (en) * 2008-12-15 2010-06-17 National Taiwan University Dual-stage regular expression pattern matching method and system
CN101520770B (zh) * 2008-02-29 2011-05-04 国际商业机器公司 分析、转换和拆分结构化数据的方法和装置
CN102184197A (zh) * 2011-04-22 2011-09-14 湖南亿谷信息科技发展有限公司 基于智能有限自动机的正则表达式匹配方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101202736A (zh) * 2006-12-13 2008-06-18 西安大唐电信有限公司 一种在通讯网络中实现编解码的方法
CN101520770B (zh) * 2008-02-29 2011-05-04 国际商业机器公司 分析、转换和拆分结构化数据的方法和装置
US20100153420A1 (en) * 2008-12-15 2010-06-17 National Taiwan University Dual-stage regular expression pattern matching method and system
CN102184197A (zh) * 2011-04-22 2011-09-14 湖南亿谷信息科技发展有限公司 基于智能有限自动机的正则表达式匹配方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
张伟等: "支持多正则表达式匹配的硬件结构", 《清华大学学报》, vol. 49, no. 10, 31 October 2009 (2009-10-31) *
张树壮等: "一种面向网络安全检测的高性能正则表达式匹配算法", 《计算机学报》, vol. 33, no. 10, 31 October 2010 (2010-10-31) *

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103259793B (zh) * 2013-05-02 2015-10-21 东北大学 基于后缀自动机正则引擎构造的深度包检测方法
CN103259793A (zh) * 2013-05-02 2013-08-21 东北大学 基于后缀自动机正则引擎构造的深度包检测方法
CN103312627A (zh) * 2013-05-30 2013-09-18 中国人民解放军国防科学技术大学 基于两级存储的正则表达式匹配方法
CN103312627B (zh) * 2013-05-30 2015-06-10 中国人民解放军国防科学技术大学 基于两级存储的正则表达式匹配方法
CN105791045B (zh) * 2014-12-26 2019-04-02 中国科学院声学研究所 一种面向并行数据流的深度包检测方法及系统
CN105791045A (zh) * 2014-12-26 2016-07-20 中国科学院声学研究所 一种面向并行数据流的深度包检测方法及系统
CN104899264A (zh) * 2015-05-21 2015-09-09 东软集团股份有限公司 一种多模式正则表达式匹配方法及装置
CN107608981A (zh) * 2016-07-11 2018-01-19 顺丰科技有限公司 基于正则表达式的字符匹配方法及系统
CN106445626A (zh) * 2016-09-30 2017-02-22 北京奇虎科技有限公司 数据分析方法及装置
CN106445626B (zh) * 2016-09-30 2020-03-06 北京奇虎科技有限公司 数据分析方法及装置
CN106487803A (zh) * 2016-11-10 2017-03-08 深圳市任子行科技开发有限公司 用于大流量网络入侵检测系统的模式匹配算法和系统
CN107016091A (zh) * 2017-04-06 2017-08-04 北京邮电大学 一种软件定义网络中正则表达式更新方法及装置
CN107016091B (zh) * 2017-04-06 2019-10-15 北京邮电大学 一种软件定义网络中正则表达式更新方法及装置
CN107729001A (zh) * 2017-09-08 2018-02-23 北京京东尚科信息技术有限公司 一种表达式处理方法和装置
CN110928793A (zh) * 2019-11-28 2020-03-27 Oppo广东移动通信有限公司 一种正则表达式检测方法、装置及计算机可读存储介质
CN114186559A (zh) * 2021-12-09 2022-03-15 北京深维智信科技有限公司 一种从销售会话中确定会话主体角色标签的方法及系统

Also Published As

Publication number Publication date
CN102523219B (zh) 2015-01-14

Similar Documents

Publication Publication Date Title
CN102523219B (zh) 正则表达式匹配系统及匹配方法
CN101095310B (zh) 分组解析处理器及在处理器中解析分组的方法
CN106411820B (zh) 一种基于sdn架构的工业通信流传输安全控制方法
CN104426909B (zh) 用于将图样编译成非确定有限自动机(nfa)图形的方法和计算机系统
CN100472480C (zh) 分组处理方法和装置
CN103733590B (zh) 用于正则表达式的编译器
CN105095075B (zh) 基于有限状态机网络协议半合法化模糊测试用例生成方法
Lu et al. A memory-efficient parallel string matching architecture for high-speed intrusion detection
CN104899264B (zh) 一种多模式正则表达式匹配方法及装置
CN104579974B (zh) 面向ndn中名字查找的哈希布鲁姆过滤器及数据转发方法
Qi et al. Feacan: Front-end acceleration for content-aware network processing
CN104426911A (zh) 用于编译有限自动机的方法和装置
CN103139072A (zh) 用于在交换机asic中集成线速应用识别的系统和方法
CN110177046A (zh) 基于拟态思想的安全交换芯片、实现方法及网络交换设备
CN103812860B (zh) 一种基于fpga的高速网络策略匹配方法
CN106453091B (zh) 路由器转发平面的等价路由管理方法和装置
CN104025520A (zh) 查找表的创建方法、查询方法、控制器、转发设备和系统
CN105207950A (zh) 一种基于sdn技术的通信数据保护方法
CN106850547A (zh) 一种基于http协议的数据还原方法及系统
CN108123962A (zh) 一种利用Spark实现BFS算法生成攻击图的方法
CN103685041B (zh) 一种基于比特粒度可编程的路由器及路由方法
CN108337176B (zh) 一种报文处理方法和装置
Bando et al. Range hash for regular expression pre-filtering
CN103414603B (zh) 基于Hash折叠方法的Ipv6深度包检测方法
CN101794295B (zh) 面向正则表达式的多模式匹配硬件引擎及生成方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20171227

Address after: 210042 Xuanwu District, Xuanwu District, Jiangsu, Nanjing, No. 699-22, building 18

Patentee after: CERTUSNET CORP.

Address before: 100084 Beijing Haidian District Tsinghua Yuan 100084-82 mailbox

Patentee before: Tsinghua University

TR01 Transfer of patent right
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20120627

Assignee: BEIJING CERTUSNET INFORMATION TECHNOLOGY CO., LTD.

Assignor: CERTUSNET CORP.

Contract record no.: 2018320000092

Denomination of invention: Regular expression matching system and regular expression matching method

Granted publication date: 20150114

License type: Common License

Record date: 20180427

EE01 Entry into force of recordation of patent licensing contract