CN103685222A - 基于确定性有穷状态自动机的数据匹配检测方法 - Google Patents
基于确定性有穷状态自动机的数据匹配检测方法 Download PDFInfo
- Publication number
- CN103685222A CN103685222A CN201310398923.2A CN201310398923A CN103685222A CN 103685222 A CN103685222 A CN 103685222A CN 201310398923 A CN201310398923 A CN 201310398923A CN 103685222 A CN103685222 A CN 103685222A
- Authority
- CN
- China
- Prior art keywords
- data
- packet
- matching
- type
- state
- 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.)
- Pending
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提出了一种基于确定性有穷状态自动机的数据匹配检测方法,包括以下步骤:A)捕获网络中的数据包;B)对所捕获的数据包进行全协议栈解析;C)将待匹配数据报文输入至确定性有限自动机DFA状态表中进行匹配;D)输出匹配成功结果。本发明通过对数据包进行全协议栈解析,大大提高了解码速度,满足实时解码要求,并减少了对服务器内存的需求;此外,本发明通过基于正则表达式的匹配方法,可以极大地减小状态迁移表所占用的储存空间,并提高匹配速度与匹配效率,通过上述高级隐遁技术实现了对高级逃逸入侵的有效防护。
Description
技术领域
本发明涉及网络安全技术领域,尤其涉及一种基于确定性有穷状态自动机的数据匹配检测方法。
背景技术
网络入侵检测作为目前最主要的主动网络安全措施之一,它通过对计算机和网络资源上的恶意网络连接进行识别和响应,有效地补充和完善了诸如访问控制、数据加密、防火墙、病毒防范等安全措施,提高了信息安全基础结构的完整性,已成为信息系统安全解决方案中不可或缺的环节。
高级隐遁技术(AET,Advanced Evasion Technique)、隐遁攻击的叠加网络力量(cyber‐force)渗透到各国政治斗争的计算机攻击的案例略见不鲜,最近发生的韩国银行计算机网络故障、美国的纽约时报和华尔街日报受到的攻击足以说明这种情况。显然黑客的攻击手段和能力已经发生了质的变化,根据Garter的报告,从2011年来,网络防御的能力已经远远滞后于攻击的手段。而高级隐遁技术(AET)毫无疑问对IDS/IPS厂商来说是尤为头疼的技术难题,从NSS Lab公布的最新的IPS测试标准《NSS_Labs_ips group test methodology v6.2》中单独增加了AET的测试(4.15章节部分)可以看出对AET的重视程度。
防火墙和IPS是网络中核心的安全保障设备,防火墙通常根据数据流端口、地址、协议等进行数据的过滤,而IPS则进一步进行数据包的深度检测。为了真正的理解和检测网络数据包,IPS则需要深度理解数据流所采用的协议。表面上如果彻底分析透数据流的协议格式就足够了,但事实证明并非如此。早在1998年,来自Secure Network公司的Tim Newsham和Thomas Ptacek发表了有关如何穿透IDS/IPS的技术文章《插入、隐遁和拒绝服务攻击:避开网络入侵检测》。近两年,国内相关的研究,总参某研究所的徐金伟研究员曾就AET发表过多篇文章。常用的AET手段有:字符串混淆、加密和隧道技术、碎片技术和协议的违规四种。
针对高级隐遁攻击应当考虑新的拦截模式,单纯的特征库匹配模式不再能够完全达到拦截目的,因此,本发明将提出一种全新的数据匹配检测,该方法将大大提高网络的安全系数。
发明内容
为了克服现有技术的缺陷,本发明提出了一种基于确定性有穷状态自动机的数据匹配检测方法,以获得更快的匹配速度,并降低DFA表项所占用的存储空间。
为实现上述目的,本发明所述的基于确定性有穷状态自动机的数据匹配检测方法,其包含如下具体步骤:
A)捕获网络中的数据包;
B)对所捕获的数据包进行全协议栈解析;
C)将待匹配数据报文输入至确定性有限自动机DFA状态表中进行匹配,所述DFA状态表包括状态迁移表,所述状态迁移表中包括正则表达式匹配过程中的所有状态地址和各个状态之间的迁移关系,所述迁移关系包括匹配条件及符合匹配条件的下一状态:
判断当前状态对应的数据类型,所述数据类型包括单个字符Char型和多个字符Str型,所述Str型对应的数据为连续的多个字符;
如果当前状态对应的数据类型是Str型,则将待匹配报文中当前状态的多个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态;
如果当前状态对应的数据类型是Char型,则将待匹配报文中当前状态的单个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态;
当所述下一状态为接受态时,结束匹配过程;
D)输出匹配成功结果。
进一步地,所述步骤B的具体方法包括:
B1)协议解析器进行初始化,并加载编译后的正则规则表达集;
B2)读取数据包,并对其进行分组处理;
B3)识别分组后所述数据包的协议类型,并判断所述数据包是否需要解析,如不需要,则直接丢弃该数据包;否则,将协议类型相同的数据包进行归类;
B4)根据正则表达式规则集查找到与数据协议类型对应的协议解码规则,再对包含该数据的数据包进行扫描,根据所述协议解析规则从数据包中提取所述数据的解析信息。
进一步地,所述对数据包进行分组的具体步骤包括:
首先设置输出端口分组规则和数据分组规则,输出端口分组规则的配置是首先将各输出端口按照对应的后端应用系统的业务处理类型进行分组,然后再根据组内各端口对应的后端系统的处理能力决定每个端口在该组中数据包处理流量的分配比例,数据分组规则的配置是根据IP地址信息或特殊字段将数据包划分到各个分组当中;再进行数据 分组处理,先通过协议解析,从网络上接收到的原始数据包中提取出IP数据包,根据设置好的数据分组规则将与后续处理相关数据划分到各个输出端口分组中;然后将划分到每个组中的数据包的地址和端口信息进行Hash运算,Hash值再与该分组所包含的端口总数取模,得到的结果就是该数据包在所属的分组中对应的输出端口序号。
进一步地,所述的输出端口分组的配置遵循以下原则:
1)输出端口的分组首先依据后端处理系统的业务需求,按照业务处理类型进行分组,当一个系统与多个系统分别在数据分组规则属性中互相有重叠时,同一个输出端口会出现在两个以上的分组中;
2)在每个分组内部,为了保证数据处理任务实现均衡分配,同一个输出端口可多次出现在同一个组中,即在分组内按照每个端口对应的后端系统的数据处理能力决定每个端口在该组中数据包流量的分配比例;
3)组内各输出端口的分配在保证负载均衡的同时,保证同一条TCP连接双向的所有数据包必须转发到同一个输出端口上,便于后端对所接收到的数据的汇总和还原。
进一步地,所述的数据分组规则的设置包括两种方式:
一种是将数据包的IP地址和端口信息作为直接监控对象,基于这些IP地址信息将规则设置在基于地址信息的数据分组规则表中,该规则表的格式如下:
另一种是基于特殊字段信息的规则设置方式,该规则表的格式如下:
规则号 | 字段偏移量 | 字段长度 | 匹配内容 | 数据分组行为 |
其中:
规则号:是每个规则的唯一标识序号;
源、目的IP地址:数据包传输的源端和目的端的IP地址值;
源、目的IP掩码:数据包传输的源端和目的端IP字段的子网掩码;
源、目的端口:数据包传输的源端和目的端的端口号;
字段偏移量:从IP数据包内容开始计算的需要匹配的特殊字段的偏移量;
字段长度:需要匹配的特殊字段的长度;
匹配内容:特殊字段的匹配值,这些特殊字段包括如URL地址、Email信件中的收信人和发信人地址字段;
数据分组行为:“0”表示将该数据包丢弃,“1”表示将该数据包转发到组1,“2”表示将该数据包转发到组2,……“N”表示将该数据报转发到组N,“-1”表示暂停使用该条规则,如果数据分组规则表中除数据分组行为字段外的所有字段都为0,则表示该条规则适用于所有数据包。
数据分组规则的设定将作为此后的过滤分流处理的依据,当从网络上接收到的数据包和一条基于数据包的IP地址和端口信息的过滤分流规则匹配时,数据包将根据该规则设定的过滤分流行为转发到相应的分组;如果从网络上接收到的数据包中包含与预先设置的特殊字段值相同的数据时,将提取出该数据包的IP地址信息,连同预先设置的相应的过滤分流行为,形成一条基于IP地址和端口信息的动态过滤分组规则,写入基于数据包的IP地址和端口信息的数据分组规则表中,该数据包以及该数据包所属的TCP/UDP连接的所有后续包都将根据此规则设定的过滤分组行为转发到相应的分组,基于特征字段匹配形成的数据分组规则具有时效特性,当这条连接结束后,基于数据包的IP地址和端口信息的数据分组规则表中对应的这条规则也将被删除,对于新接收到的数据包,同样要按照上述特殊字段匹配的过程重新生成新的基于IP地址和端口信息的动态数据分组规则。
所述的数据过滤分流处理,包括以下几个环节:
(1)初始化:将过滤分流规则导入内存,如果采用CAM技术实现,则将规则设置到CAM系统中,系统会根据用户在“基于数据包的IP地址和端口信息的数据分组规则表”和“基于特殊字段信息的数据分组规则表”中设定的内容,生成基于数据包的IP地址和端口信息的数据分组规则表和基于特殊字段信息的数据分组规则表两张表,其中,基于数据包的IP地址和端口信息的过滤分流规则表包含静态设置的规则和动态设定的规则两部分,静态设置的规则是用户设定的内容,动态设定的规则是系统在进行基于特殊字段信息的过滤分流规则匹配时动态生成的规则内容;由于动态设定的规则具有时效性,因此导入到内存的基于数据包的IP地址和端口信息的数据分组规则表增加“动态/静态”和“超时计数”两个字段,格式为:
(2)截取原始数据包:截取网络上的数据包,进行协议分析,根据网络协议数据包格式提取出IP数据包;
(3)过滤处理:
首先,系统将获取的IP数据包按照预先设置的基于数据包的IP地址和端口信息的过滤分流规则表进行匹配,如果匹配成功,则按照规则表中设置的“过滤分流行为”,将数据包划分到各输出端口分组中,如果匹配到的规则属于动态设定规则,并且数据包属于连接结束包,则清除该条动态设定规则,否则,将该条规则的超时计数清0,对于超过计数值还在处理的情况,该条动态设定的规则也将被删除;
对于与基于数据包的IP地址和端口信息的过滤分流规则表中规则匹配失败的数据包,再与基于特殊字段信息的过滤分流规则表中设置的规则进行匹配,如果匹配成功,根据该条特殊字段信息的过滤分流规则中设定的过滤分流行为将数据包划分到相应的输出端口分组中,并根据该数据包的源IP、目的IP地址和此规则的过滤分流行为生成一条基于数据包的IP地址和端口信息的动态过滤分流规则加入到基于数据包的IP地址和端口信息的过滤分流规则表中,通过与这条新形成的动态规则进行匹配,将会提取出该数据包所属连接的后续数据包,如果数据包与基于特殊字段信息的过滤分流规则匹配失败,则丢弃该数据包;
(4)分流处理:采用分流算法将划分到每个分组中的每个数据包的源IP地址和目的IP地址进行高低位按位异或运算,如果是TCP/UDP数据包,则再将TCP/UDP端口号与运算结果再次进行异或,最终得到一个运算结果HASH值,再将此运算结果HASH值与该分组中所包含的输出端口总数取模,得到的结果就是该数据包在所属分组中对应的输出端口序号。
进一步地,所述步骤B3中,将协议类型相同的数据包进行归类的具体步骤包括:
1)在接收到新数据包时建立新的数据表;
2)当接收到数据报文时,先在所述数据表中查找与其对应的包号,若能找到,再判断所述数据报文是否为最后一个包,若不是,则将所述数据报文归入对应的数据包中;否则,删除该数据包;
3)当所述数据包出现乱序或重发且所述数据包没有被正常删除时,启动定时器在定时时间内将所述数据包删除。
进一步地,在步骤C中,所述DFA状态表还包括字符映射表,所述字符映射表中包括字符值与映射值之间的映射关系;
所述将待匹配报文中当前状态的单个字符值与匹配条件进行匹配处理,包括将待匹配报文中当前状态的单个字符值的映射值与匹配条件进行匹配处理。
进一步地,所述数据类型进一步包括:重复字符Rep型,所述Rep型对应的数据为 连续出现多次的属于一定范围内的多个字符;所述方法还包括:
判断当前状态对应的数据类型时,如果当前状态对应的数据类型是Rep型,则将待匹配报文中当前状态的映射值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态。
进一步地,所述匹配条件包括预先配置的Char型数据的映射值,所述符合匹配条件的下一状态是对应于所述预先配置的Char型数据的映射值和当前状态的状态号的下一状态的地址;
所述将待匹配报文中当前状态的单个字符值的映射值与匹配条件进行匹配处理包括:将待匹配报文中当前状态的单个字符值对应的映射值与预先配置的Char型数据的映射值进行比较,如一致,则根据当前状态的状态号和当前状态的映射值,查询所述状态迁移表以获得下一状态的地址,并迁移到下一状态。
进一步地,所述匹配条件及符合匹配条件的下一状态包括:Str型数据匹配条件以及符合Str型数据匹配条件的下一状态;其中,所述Str型数据匹配条件包括:存储于StrLen字段中的预设字符个数n1,其中,n1为正整数;以及存储于String字段中的预设的n1个字符各自的字符值;所述符合匹配条件的下一状态包括:存储于StrExitSt字段中的Str型数据匹配成后迁移至下一状态的地址;
所述将待匹配报文中当前状态的多个字符值与匹配条件进行匹配处理,当匹配时,迁移所述符合匹配条件的下一状态包括:
将待匹配报文中当前状态的n1个字符值,与String字段存储的n1个字符值依次进行比较,当全部相等时,根据StrExitSt字段指示的下一状态的地址迁移到下一状态。
进一步地,所述匹配条件及符合匹配条件的下一状态包括:Rep型数据匹配条件以及符合Rep型数据匹配条件的下一状态;其中,所述Rep型数据匹配条件包括:存储于Count字段中的重复次数n2,其中,n2为正整数;以及存储于Mask字段中的掩码;所述符合Rep型数据匹配条件的下一状态:存储于RepExitSt字段中的指示Rep型数据匹配成功后迁移至下一状态的地址;
所述将待匹配报文中当前状态的映射值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态包括:
将待匹配报文中n2个字符分别对应的映射值与Mask字段中的掩码进行比较,当n2个字符各自对应的映射值全部在所述掩码范围内时,根据所述RepExitSt字段指示的下一状态的地址迁移到下一状态。
与现有技术相比,本发明的有益效果在于:
本发明通过对数据包进行全协议栈解析,具体方法是通过协议解析和正则表达式规则库相接合,并采用多线程技术对复杂的用户业务数据进行硬件解码,大大提高了解码速度,满足实时解码要求,并减少了对服务器内存的需求,降低了成本;本发明还通过DFA状态转移表实现高速报文匹配,能够对存在的威胁进行准确检测和防御,准确识别并清除高级逃逸技术,这样将大大提高网络的安全系数。
本发明实施例提供的正则表达式的匹配方法,通过将待匹配数据的数据类型分为Char型和Str型,并根据不同的数据类型分别执行不同的匹配处理过程。对于Str型数据,是当该Str型所包含的多个字符全部匹配成功后才迁移到下一状态,从而节省了迁移边,使状态迁移表需要记录的状态减少,可以极大地减小状态迁移表所占用的储存空间,并提高匹配速度与匹配效率。
附图说明
图1是本发明中协议解析系统的结构示意图;
图2是本发明中正则表达式匹配方法的整体流程图;
图3是本发明中作为一个举例的编译成DFA表后各个状态间的关系示意图;
图4是本发明中的作为一个举例的字符映射表的数据结构示意图;
图5是本发明中一种状态属性表的结构示意图;
图6是本发明中状态迁移表的结构示意图;
图7是图6的状态迁移表中Str型属性数据结构的示意图;
图8是图6的状态迁移表中Rep型属性数据结构的示意图;
图9是本发明作为又一个举例的字符映射表的结构示意图;
图10是本发明作为举例的一个状态属性表的示意图;
图11是本发明作为一个举例的状态迁移表的示意图。
具体实施方式
下面结合附图对本发明的方法做进一步详细的说明。
本发明所述的基于确定性有穷状态自动机的数据匹配检测方法,包括以下步骤:
第一步,捕获网络中的数据包;
第二步,对所捕获的数据包进行全协议栈解析;
第三步,将待匹配数据报文输入至确定性有限自动机DFA状态表中进行匹配;
第四步,输出匹配成功结果。
图1是本例中基于流的协议解析系统的结构示意图,该系统包括路由器和协议解析设备。其中,路由器用于在通信网络中转发业务数据,并将所转发的数据复制一份发给协议解析器(即DPI协议解析设备);协议解析器并联于所述路由器上,用于接收路由器发送的数据,对接收的数据进行分组并对分组后的数据进行协议类型判断,根据协议类型对数据进行归类,再对每一个协议中数据进行流管理,以确保同一个数据流发送给同一个处理模块中进行解码,最后通过处理模块对数据进行协议解析。这种并联接入的方式由于是独立进行数据协议解析,所以对移动系统进行数据通信的影响较小。
第二步的具体实现过程如下:
步骤100:协议解析器进行初始化,并加载编译后的正则表达式规则集。其中,协议解析器中的DPI芯片经过初始化后才能正常工作,该步骤在协议解析器进行初始化之前还可包括:对正则表达式规则集进行编译,将其转换成DPI芯片能够识别格式的数据,这样协议解析器才能对数据包进行DPI协议解码;
步骤101:读取数据包,并对其进行分组处理。本步骤还包括所述路由器在对数据包进行分组时并将所分发的数据包进行存储;所述分组处理的具体步骤为:
(1)设置输出端口分组配置规则:假设高速网过滤分流接入平台具有8个输出端口,端口标识号分别为:0、1、2、3、4、5、6、7,这些端口分别对应后端的各个安全监测设备。根据每个安全监测设备的业务类型处理需求和各自的数据处理能力,将各个端口划分成四个分组:
分组号 | 输出端口标识号 |
1 | 3;2;0;2 |
2 | 1;4 |
3 | 5;7;5;6;7 |
4 | 0;4 |
划分到同一个分组中的端口说明它们将处理相同类型的数据包,其中端口2在分组1中出现两次,说明端口2对应的后端处理设备将接收并处理该输出端口中二四分之一的数据量;端口4被划分到2和4两个分组当中,说明端口4将负责转发来自这两个分组的数据。
(2)设置过滤分组规则:过滤分流规则的设置是为了实现粗粒度的数据过滤分流,将对后端处理无用的数据滤除掉,将后端每个处理设备所需的数据划分到指定的端口分组中。数据分组规则设置的示例如下所示:
基于数据包的IP地址和端口信息的数据分组规则表:
基于特殊字段信息的数据分组规则表:
规则号 | 字段偏移量 | 字段长度 | 匹配内容 | 过滤分流行为 |
301 | 42 | 15 | xyyahoo.com.cn | 3 |
根据(3)中假定的情况对数据包b的处理过程:将数据包b中的地址信息与基于数据包的IP地址和端口信息的数据分组规则表中设置的规则逐一进行匹配,匹配结果发现没有与任何一条规则匹配成功,再将该数据包中字段偏移量为0X42字节之后的15个字节的值“xyyahoo.com.cn”提取出来与基于特殊字段信息的过滤分流规则表中的规则进行逐一匹配,匹配结果满足规则301。按照规则301中设置的过滤分流行为,将数据包b划分到分组3,并提取出该数据包中的IP地址信息,连同规则301中设置的过滤分流行为,生成一条新的动态数据过滤分组规则加入到基于数据包的IP地址和端口信息的数据分组规则表中,即:
(5)对划分到每个分组的数据,按照本发明中提出的分流算法进行分组处理。数据包a的源IP地址61.125.3.8和目的IP地址10.10.25.30高低位按位异或,得到的结果值再与源端口号90和目的端口号1290的异或结果进行按位异或,最终得到的结果与分组4中的端口总数取模,即:
{(0X3D7D_0X0A0A)_(0X0308_0X191E)_(0X005A_0X050A)}mod2={0X3777_0X1A16_0X0550}mod2=1
运算结果为1,表明该数据包a应从分组4中的第2个端口输出,即端口4输出。
数据包b的源IP地址10.10.19.131和目的IP地址216.136.173.18高低字节按位异或,得到的结果值再与源端口号1664和目的端口号25的异或结果进行按位异或,最终得到的结果与分组3中的端口总数取模,即:
{(0X0A0A_0XD888)_(0X1383_0XAD12)_(0X0680_0X0019)}mod5={0XD282_0XBE91_0X0699}=4
运算结果为4,表明该数据包b应从分组3中的第5个端口输出,即端口7输出。
(6)假定收到数据包a、b所属连接的后续包,由于所属同一连接数据包的IP地址和端口相同,因此经上述运算过程得到的结果也相同,所以保证了相同连接的所有后续包仍然从相同的端口输出。
(7)收到数据包b所属连接的结束包,则清除动态设置的规则7。
本发明提出的不依赖连接表的高速过滤分流方法如果采用CAM技术实现,对于12路2.5G POS接入,具备30G的数据接入能力,满足高速骨干网络的线速数据接入需求。
步骤102:对经过分组的数据的协议类型进行识别,获取所述数据的协议类型;判断所述数据是否需要进行解码,若不需要,则直接丢弃所述数据,否则进行步骤103。其中,判断的方法是根据实际要求判断某种协议类型的数据是否需要进行解码;
步骤103:将同一数据流分发归类到相同协议解析器中的检测处理模块进行处理,并对对协议类型识别后的数据进行流管理;所述流管理包括对数据流的建立、维护、删除、老化进行管理;
将同一数据流分发到相同协议解析器中的检测处理模块进行处理的具体步骤包括:
1)在接收到新数据包时建立新的数据表;
2)当接收到数据报文时,先在所述数据表中查找与其对应的包号,若能找到,再判断所述数据报文是否为最后一个包,若不是,则将所述数据报文归入对应的数据包中;否则,删除该数据包;
3)当所述数据包出现乱序或重发且所述数据包没有被正常删除时,启动定时器在定时时间内将所述数据包删除。
步骤104:所述DPI协议解析器根据正则表达式规则库对经过流管理模块的数据进行DPI协议解析。所述DPI协议解析器获取了所述数据的协议类型后,根据正则表达式规则库查找到与所述数据协议类型对应的协议解码规则;再对包含所述数据的数据包进行扫描,根据所述协议解码规则从所述数据包中提取所述数据的输出信息。
需要说明的是,所述DPI协议解析器支持跨包扫描。对于跨包数据报文,则在下一个数据报文中输出结果,即若所述输出信息中包含跨包字段,则需要在前一包和当前包中取出对应字段结果,即可获得所述跨包的输出信息。另外,由于本实施例中采用的是正则表达式规则库匹配解码的方法,所述输出信息是匹配位置相对所述数据包的偏移量,所以步骤104还包括根据所述输出信息从所述数据包提取解码信息。
相比于现有技术,本发明通过DPI协议解析和正则表达式规则库相接合,并采用多线程技术对复杂的用户业务数据进行硬件解码。由于在相同条件下,DPI硬件解码速度是软件解码速度的10倍以上,所以本发明大大提高了解码速度,满足实时解码要求,而且由于DPI硬件支持跨包扫描,只需保存一个数据流中的前一包及当前包的信息,所以这就大大减少了对服务器内存的需求,降低了成本。
第三步的具体实现过程如下:
本发明实施例使用的DFA表是一种由正则表达式编译出来的二进制数据,所以可以查找的数据包括所有可以用二进制表示的内容,例如纯粹的二进制数据,美国信息交换标准代码(American Standard Code for Information Interchange,ASCII),统一码(UNICODE)等等。而这些格式的数据都可能出现在现有的报文里面,为了简化起见,以下将待查找或匹配的数据简称为报文。而一个字节的二进制数据总能用一个等效的字符表示(不管是否可打印字符),所以本发明实施例中把待查找数据中的单字节数据简称为字符,多个单字节数据组合在一起称为字符串。
图2为本例的正则表达式匹配方法的整体流程图。如图2所示,该方法的执行主体是本发明实施例提供的一种正则表达式匹配装置,该方法包括如下步骤:
步骤100、载入待匹配报文及确定性有限自动机DFA状态表,该DFA状态表包括状态迁移表,该状态迁移表中包括正则表达式匹配过程中的所有状态地址和各个状态之间的迁移关系,上述迁移关系包括匹配条件及符合匹配条件的下一状态。上述的地址是指某个状态所对应的数据在存储介质,例如缓存,中储存的起始位置。
步骤102、判断当前状态对应的数据类型,数据类型包括单个字符型(character型,简称为Char型)和多个字符型(string型,简称为Str型),Str型对应的数据为连续的多个字符。如果为Str型,执行步骤104,如果为Char型,执行步骤106。
具体地,以下举例说明Char型和Str型。例如,对于正则表达式:/test\s*abc/(两个“/”之间的部分表示正则表达式,以下同),第一个字符t总是分类为Char型,est为连续出现的多个字符,分类为Str型,通配符“\s*”表示“空格”、“回车”、“下一 行”出现一次、一次以上的任意次数或者不出现,即出现的次数不确定,则将位于报文中间的出现次数不确定的单个字符分类为Char型,abc为连续出现且不重复的多个字符,分类为Str型。
步骤104、如果当前状态对应的数据类型是Str型,则将待匹配报文中当前状态的多个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态。
步骤106、如果当前状态对应的数据类型是Char型,则将待匹配报文中当前状态的单个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态。
步骤108、当所述下一状态为接受态时,结束匹配过程并输出匹配成功结果。
以下对本发明实施例中的“当前状态”和“下一状态”进一步进行详细说明。为了便于理解,直接使用字符作为迁移条件,此外,以下将本发明实施例的正则表达式匹配装置简称为引擎。
例如正则表达式/^AB/,表示的匹配条件是:待匹配数据的第一个字节必须是大写字母A,第二个字节是大写字母B,才能匹配成功;否则匹配失败。
编译成DFA表后各个状态间的关系如图3所示。其中圆圈表示状态号,箭头表示状态迁移,箭头边的字符表示迁移条件。
图3中,一共有0~3四个状态,其中状态3是接受态,状态0是失败态。状态1和状态2是中间态。
引擎开始工作时,状态号初始化为1。初始状态(状态1)对应的迁移关系数据必须储存在确定的空间,为了方便,一般储存在起始地址为1的储存空间。这时,则称状态1为“当前状态”,引擎从待匹配数据里面取第一个字节,根据状态1所在的起始地址从状态迁移表取出状态1的迁移关系数据,然后引擎比较并判断待匹配数据的第一个字节是“A”还是“非A”。如果是“A”,则得知将迁移到状态2(实际得到的是状态2的迁移关系数据所在的起始地址),这时状态2称为“下一状态”;如果是“非A”,则得知将迁移到状态0(实际得到的也是状态0的迁移关系数据所在的起始地址,由于是失败态,引擎不需要实际迁移到这个状态),这时状态0称为“下一状态”。
接着引擎“迁移到”状态2,状态2称为“当前状态”。这时候再取待匹配数据的第二个字节,并根据状态2所在的起始地址从状态迁移表取出状态2的迁移关系数据,然后引擎比较并判断待匹配数据的第一个字节是“B”还是“非B”。如果是“B”,则得知将迁移到状态3(实际得到的是状态3的迁移关系数据所在的起始地址,由于是个接受态, 引擎不需要实际迁移到这个状态),这时状态3称为“下一状态”;如果是“非A”,则得知将迁移到状态0(实际得到的也是状态0的迁移关系数据所在的起始地址,由于是失败态,引擎不需要实际迁移到这个状态),这时状态0称为“下一状态”。
总之:根据“某个状态”对应的迁移关系数据来对“待匹配数据”进行比较并确定将迁移到“另一个状态”,则“某个状态”称为“当前状态”,得出的“另一个状态”称为“下一状态”。值得指出的是,如果是“当前状态”刚好是一个循环的状态,则“下一状态”会等于“当前状态”。
本例图2所示方法,通过将待匹配数据的数据类型分为Char型和Str型,并根据不同的数据类型分别执行不同的匹配处理过程。对于Str型数据,是当该Str型所包含的多个字符全部匹配成功后才迁移到下一状态,从而节省了迁移边,使状态迁移表需要记录的状态减少,可以极大地减小状态迁移表所占用的储存空间,并提高匹配速度与匹配效率。
进一步地,在本发明实施例的一较佳实施方式中,DFA状态表中还包括字符映射表,该字符映射表中包括字符值与映射值之间的映射关系。在该映射关系中,可以将一个或多个字符值与一个映射值建立映射关系,或者,将一类相同类型的字符映射成一个映射值。
图4为本发明实施例的作为一个举例的字符映射表的数据结构示意图。如图4所示,字符映射表保存报文字符与字符映射值之间的映射关系。图2示例性给出的字符值与映射之间的映射关系包括:将ASCII码值为0-96、100、102-255的多个字符值映射成映射值0,将ASCII码值为97-98的多个字符值映射成映射值1,将ASCII码值为99的字符值映射成映射值2,将ASCII码值为101的字符值映射为3。当然,对应于不同的DFA表,可以采用不同的字符映射表。图1中步骤106的处理过程具体可以包括如下步骤:将待匹配报文中当前状态的单个字符值的映射值与匹配条件进行匹配处理。
此外,字符映射表还可以把一类相同类型的字符映射为一个映射值。举例如下:规则/a\s?[a-z]+/表示的是字母a后面跟着0个或多个空格,其后再跟着一个或多个小写字母。
生成字符映射表时,会把字符a映射成一个值(例如1);空格对应的字符映射成另一个值(例如2);字母a至z之间的字母映射成又一个值(例如3);不属于前面三种情况的字符都映射成另一个值(例如0)。
DFA状态表在从一个状态迁移到另一个状态时,可能会有多个不同的迁移边(即迁移 所对应的字符)。如果把每个迁移边都分别记录,则表项数据会很大,不方便硬件实现。所以本发明实施例较佳地采用了字符映射的方法,利用字符映射表将字符做一次映射,并把这些有相同迁移方向的迁移边(字符)映射到同一个映射值上去。然后用映射值代替字符作为迁移边,并记录在状态迁移表中,同时记录字符映射表。这样可以极大地减小状态迁移表所占用的储存空间。例如/[a-z]/,如果在迁移表中直接用字符作为迁移边,则要记录a~z共26种迁移情况;而使用字符映射表之后,把a~z都映射成同一个映射值,并用这个映射值作为迁移边,则只需要记录一个迁移边,有利于缩小DFA状态表项。需要说明的是,术语“字符”不仅限于ASCII码字符,ASCII码外的格式也支持,例如中文字符,日文,TLV(Tag Length Value,标签,长度,数值)等格式。
进一步地,在本发明实施例的另一较佳实施方式中,对数据类型进一步进行了细分,增加了一种数据类型:重复字符Rep型,该Rep型对应的数据为连续出现多次的属于一定范围内的多个字符。以下举例详细说明Rep型数据。
例如:在正则表达式/test\s*[0-9]{5}/中,第一个字符t总是分类为单个字符Char型,\s*表示任意个数的空格,也分类为单个字符型,est分类为多个字符Str型,[0-9]{5}表示0至9之间的数字连续出现5次,则分类为重复字符Rep型。又例如:
/tel:[0-9]{3}-?0-9]{8}[a-z]{100}/,第一个字符t和-都编译成单个字符Char型,通配符“-?”,表示?出现的次数为0次或者1次,el:这三个字符则编译成多个字符Str型,[0-9]{3}、[0-9]{8}和[a-z]{100}则编译成重复字符Rep型。
进一步地,在本发明实施例的又一较佳实施方式中,在DFA状态表中增加了状态属性表,根据该状态属性表可以更好地区分上述三种数据类型,特别是在正则表达式较为复杂的情况下。图5为本发明实施例的状态属性表的结构示意图。如图5所示,各个数据域的定义分别为:第一地址阈值Str_min:当状态地址大于或等于Str_min时,表示该状态属于Str型数据;第二地址阈值Rep_min:当状态地址大于或者等于Rep_min且小于Str_min时,表示该状态属于Rep型数据;另外,如果状态地址小于Rep_min,则表示当前状态对应的数据类型是Char型;Lower:输入字符大小写转换标记,举例来说,为1表示不区分大小写,在做数据比较时,可以统一转为小写值进行比较。需要说明的是,各字段长度(比特数)可根据正则表达式的规则复杂度进行灵活设置。状态属性表包含了DFA状态表相关的参数信息,可以用于确定状态迁移表中的数据处理类型及大小写是否敏感。
需要说明的是,在图4和图5给出的较佳实施例中,DFA状态表是由正则表达式DFA 表编译器生成,该编译器会对正则表达式分析编译出来的原始DFA状态表做进一步分析,生成三个子表:状态属性表、字符映射表和状态迁移表。本发明实施例中的正则表达式匹配装置从正则表达式DFA表编译器中获得上述三个子表。具体地,为了简化正则表达式匹配装置的处理流程,进一步压缩状态迁移表所占用的储存空间,上述编译器将状态迁移表数据分成上述三种类型:Char型、Str型、Rep型(只区分数据类型,不拆分表项)。
以下对本发明的一较佳实施例中DFA表包含的状态迁移表进行更为详细的说明。
图6为本例的状态迁移表的结构示意图。虽然图6仅示出了一行地址,但实际情况下图6中的地址也可以分成多行。如图6所示,状态迁移表保存的是DFA的每个状态在输入某个/某些字符时可以迁移到的下一个状态的地址,以及该状态的Rep/Str属性数据。如果该状态无Rep/Str属性,则该迁移数据不含Rep/Str属性数据域,只有Nextst_0~Nextst_n。其中,NextSt_0,…,NextSt_n表示状态机接收字符映射值为0,…,n的字符对应的下一个迁移状态地址,映射值较佳地为连续的数字,有利于节省存储DFA表的空间。例如,假设映射值设置为0、1、2,上述映射值在存储空间中连续依次存储,只需要三个存储位置;而如果映射值取不连续的1、3、5,则上述映射值在存储空间中相应的是间隔存储,中间会额外多占用2个空余的存储位置,一共占用5个存储位置,这样就会浪费存储空间,而且采用不连续的映射值还可能需要增加相应的解析算法,导致处理复杂度增加,而采用连续的映射值既可以节省存储空间还可使处理算法的复杂度降低。
以下配合图7和图8对Str型的数据和Rep型的数据分别进行详细说明。
图7为本例的Str型属性数据结构的示意图。如图7所示,Str型的数据表示该状态是多个字符型状态,需要匹配字符串后进行状态迁移。若匹配过程中失败,则从失败处取该字符的映射值按照状态迁移表进行迁移。数据说明如下:StrExitSt字段:字符串匹配完毕后的迁移至下一状态的地址;StrLen:字符串占用字符个数n1,其中,n1为正整数;String:字符串的字符值。需要说明的是,各字段长度(比特数)可根据正则表达式的规则复杂度进行灵活设置。
图8为本例的Rep型属性数据结构的示意图。如图8所示,对于Rep型的数据,在匹配时判断一类字符的重复次数,计数达到预定次数次后迁移到指定状态,中途若失败则按照状态迁移表进行状态迁移。数据说明:RepExitSt字段:该Rep型数据匹配成功后迁移至下一状态的地址;Count字段:相同类型字符的重复次数n2,其中,n2为正整数。Mask字段:Rep型数据的字符集合映射值的掩码,用来表示当前字符的映射值是否 在预定范围之内,若是,则进行计数器,直到达到预定计数值。上述掩码值由本发明实施例的正则表达式匹配装置从正则表达式DFA表编译器处获得。以下通过举例来说明MASK值的生成方法或规则。假设Rep型数据[A-C]{5},其表示A-C范围内的字符重复出现5次,再假设字符映射表中将A、B、C分别一一映射为映射值0、1、2,当然根据字符映射表的设置,可以将多个字符映射成一个映射值,然后,根据映射值将Mask字段中与映射值对应的比特位置1,即将mask值的bit0、bit1、bit2均置为1,这样就得到了mask值为0x07。在上述处理过程可以看出,本发明实施例是用一个bit位来代替一个映射值,mask值是由上述映射值所构成,这种处理方法进一步地降低了映射值所占的存储空间。
以下举例说明如何根据mask值来确定映射值是否为有效范围内的映射值的处理过程:例如,mask值为0x09,即二进制的1001,bit3和bit0有效(为1),则表示映射值为0和3的字符为预定范围内的字符,而bit1和bit2所对应的映射值1、2不是有效的映射值,其所对应的字符并非预定范围内的字符。又例如mask值为0x7,即二进制的111,bit2、bit1和bit0都有效(为1),则表示映射值为0、1和2的字符为预定范围内的字符。
在匹配处理的过程中,对于不同的数据类型,分别按照以下方式进行匹配处理。
一种情况,如果状态迁移表中保存的匹配条件及符合匹配条件的下一状态包括:Char型数据匹配条件以及符合Char型数据匹配条件的下一状态;其中,Char型数据匹配条件包括预先配置的Char型数据的映射值,符合匹配条件的下一状态是对应于预先配置的Char型数据的映射值和当前状态的状态号的下一状态的地址。这种情况下的处理过程是:如果当前状态对应的数据类型是Char型,则将待匹配报文中当前状态的单个字符值对应的映射值与预先配置的Char型数据的映射值进行比较,如一致,则根据当前状态的状态号和当前状态的映射值,查询所述状态迁移表以获得下一状态的地址,并迁移到下一状态。
另一种情况,如果状态迁移表中保存的匹配条件及符合匹配条件的迁移地址还进一步包括Str型数据匹配条件以及符合Str型数据匹配条件的下一状态;其中,Str型数据匹配条件包括:存储于StrLen字段中的预设字符个数n1,其中,n1为正整数;以及存储于String字段中的预设的n1个字符各自的字符值;所述符合匹配条件的下一状态包括:存储于StrExitSt字段中的Str型数据匹配成后迁移至下一状态的地址。在这种情况下,对于Str型数据的处理过程包括:将待匹配报文中当前状态的n1个字符值, 与String字段存储的n1个字符值依次进行比较,当全部相等时,根据StrExitSt字段指示的下一状态的地址迁移到下一状态。
还一种情况,如果状态迁移表中保存的匹配条件及符合匹配条件的迁移地址还进一步包括Rep型数据匹配条件以及符合Rep型数据匹配条件的下一状态;其中,所述Rep型数据匹配条件包括:存储于Count字段中的重复次数n2,其中,n2为正整数;以及存储于Mask字段中的掩码;所述符合Rep型数据匹配条件的下一状态:存储于RepExitSt字段中的指示Rep型数据匹配成功后迁移至下一状态的地址。在这种情况下,对于Rep型数据的处理过程包括:如果当前状态对应的数据类型是Rep型,将待匹配报文中n2个字符分别对应的映射值与Mask字段中的掩码进行比较,当n2个字符各自对应的映射值全部在所述掩码范围内时,根据所述RepExitSt字段指示的下一状态的地址迁移到下一状态。
又一种情况,如果状态迁移表中保存的匹配条件及符合匹配条件的迁移地址包括上述三种类型时,其处理过程可将上述三种处理方法结合。
可选地,图2所示方法还可以进一步包括步骤:如果在Str型数据或者Rep型数据的匹配过程中发生不匹配的情形,则获取该不匹配的字符对应的映射值,根据映射值和当前状态的状态号,查询状态迁移表得出下一状态地址,并迁移到下一状态。可选地,图1所示方法还可以进一步包括如下步骤:当下一状态为失败态时,结束匹配过程并输出匹配失败结果;或者,当下一状态既不是接受态也不是失败态,并且当前匹配的字符是待匹配报文的最后一个字符时,结束匹配过程并输出匹配失败结果。具体地,判断下一状态是何种状态可依据下列处理步骤:当下一状态的地址大于或等于预设的接受态地址阈值时,确定下一状态为接受态;当下一状态的地址大于预设的失败态地址阈值且小于预设的接受态地址阈值时,确定下一状态为中间态;当下一状态的地址等于预设的失败态地址阈值时,确定下一状态为失败态。此外,可选的,在采用地址阈值区分中间态和接受态,并且也采用地址阈值区分Str型、Char型和Rep型数据时,可以将中间态的地址阈值再分为Str型、Char型和Rep型数据三段地址阈值,失败态和接受态可以不区分数据类型,当下一状态为接受态但还有字符需要匹配时,可以跳转到相应的中间态继续进行匹配过程。本领域普通技术人员可以理解,采用地址阈值区分数据类型和状态类型仅仅是本发明的一种具体实现方式,此外也可以直接将数据类型和状态类型写在DFA状态表中,或者另外单独维护数据类型和状态类型,对于数据类型还可以直接采取默示的方式,即当DFA状态表的相应表项中有Char型或Rep型数据时优先尝试匹配Char型 或Rep型数据。
可选地,在图2所示方法中,可以将待匹配报文的第一个字符处理为Char型数据。
以下对本发明实施例的方法达到的提高匹配速度的优点进行详细说明。
本发明实施例采用了字符映射的方法,把在某个当前状态下,迁移到某个下一状态的多个作为迁移条件的字符映射为一个单一的映射值,而且不同状态之间的迁移条件相同时,可以共用一个映射值。通过减少迁移边,在正则表达式比较复杂的情况下可以减少了状态迁移表所占的储存空间。例如,在状态迁移表的空间远远大于字符映射表的情况下,所增加的字符是映射表的空间较小,其所增加的存储空间相比于其所能节省的存储空间小得多,这样就达到了减少状态迁移表所占储存空间的目的。
另外,本发明实施例还将状态迁移表数据分为Char型、Str型和Rep型数据。Char型数据用映射值确定作为迁移条件,可以节省储存空间。Str型数据把通常技术中的DFA表中一长串字符合成一个迁移条件,原始DFA表中这一长串字符对应的多个状态也就合成一个状态,这样可以明显减少迁移关系数据所占的储存空间。另外正如前面对图3中所述,状态发生迁移时,需要重新计算状态迁移表的访问地址,并根据这个新的地址从状态迁移表取出新的匹配条件才能进行比较和判断,所以减少状态的数量也就是减少了引擎做状态迁移所需的的时间,提高了匹配的速度。Rep数据把多个相同的迁移条件的状态合并成一个状态,减少了状态迁移所需的时间,提高了匹配速度;本发明实施例还使用了映射值构成的掩码(mask),使用映射值以及采用掩码来表示映射值的方法可以减少迁移条件所占的储存空间。
DFA表所占的储存空间小,则引擎可以用更小的数据位宽。而在其他条件相同的情况下,数据位宽小的装置能比数据位宽大的装置运行速度更快,效率更高。
进一步地,以下以正则表达式/^test[0-9]{5}/si为例,进一步详细说明本发明实施例1的正则表达式匹配方法。需要注意的是,实际情况下DFA编译器可能同时编译多个正则表达式,以下是为了描述方便仅说明了其中一条正则表达式。
图9为本发明实施例1的作为又一个举例的字符映射表的结构示意图。编译时,依据图9所示的字符映射表,把[0-9]对应的ASCII码值映射为1,t(ASCII值为116)和T(ASCII值为84)映射为2,其余字符映射为0。图10为本例作为举例的一个状态属性表的示意图,其中Rep_min为0x2,Str_min为0x5,Lower为0x1。根据图10可知,状态所在的地址大于或者等于0x5则属于Str类型的数据,状态所在的地址在大于等于0x2且小于0x5则属于Rep类型的数据,状态所在的地址小于0x2则为Char类型的 数据。
图11为本发明实施例1的状态迁移表的一个示例图,如图11所示,该状态迁移表中一共含有3个状态。第一行的0,1,2表示映射值,state x表示状态号,state1表示状态1,state2表示状态2,state3表示状态3。其中状态1是Char型的数据;状态2有Mask域,是Rep型数据,且状态2中Mask值为0x2,即二进制的10,bit1有效,bit0无效,表示当待匹配字符的映射值为1时在该Mask值的范围之内,Count字段取值为5,表示重复次数为5次,且RepExitSt字段的指示的地址是预先配置的0x01F8;状态3有string域,是Str型数据,字符长度为3个,String字段中存储了用于匹配的0x65、0x73、0x74,分别对应于e、s、t,且StrExitSt字段的指示的地址是0x0002。
假设输入的待查找匹配的报文为Test123456789。正则表达式匹配装置开始查找时,将当前状态(初始状态)置为1,state1的存储地址是0x0001。然后,读入字符T对应的映射值,根据图9示出的映射表可知映射值为2。然后,根据映射值2查询当前状态(state1)对应的状态迁移表,如图11所示,state1下映射值为2时对应的下一状态地址是0x0005,而0x0005为state3的存储地址,于是从state1迁移到state3。然后,判断state3所对应的数据类型,由于state3的地址0x0005等于Str_min,所以可知是Str类型的数据。接着,依次读取待查找报文中的e,s,t,并跟状态迁移表中地址0x0005对应的string字段存储的0x65:e,0x73:s,0x74:t进行比较,比较后发现三个字符都相等,于是迁移到StrExitSt字段指示的迁移地址0x0002,即从state3迁移到state2。接着,判断state2的数据类型,由于state2的地址0x0002处于Rep_min(0x0002)和Str_min(0x0005)之间,则确定状态2属于Rep类型的数据,于是依次读入字符1,2,3,4,5的映射值,根据图9可知,字符1-5的映射值都为1,而掩码Mask值为0x02,即bit1为1,bit1为有效位,所以1-5的映射值在掩码Mask值的范围之内,满足循环5次的条件,得到Exit_st字段指示的地址0x1F8作为下一个状态所在的地址,发现是一个接受态(大于或等于接受态阈值),于是整个正则表达式匹配成功。
假设输入的待查找匹配的报文为West123456789。正则表达式匹配装置开始查找时,将当前状态(初始状态)置为1,state1的存储地址是0x0001。然后,读入字符W对应的映射值,根据图9示出的映射表可知映射值为0。然后,根据映射值0查询当前状态(state1)对应的状态迁移表,得到下一状态的地址为0x0,于是迁移到下一状态,然后,判断该下一状态为失败态,因此整个正则表达式匹配失败,输出匹配失败的结果。
假设输入的待查找匹配的报文为Tbst12345。正则表达式匹配装置开始查找时,将 当前状态(初始状态)置为1,state1的存储地址是0x0001。然后,读入字符T对应的映射值,根据图9示出的映射表可知映射值为2。然后,根据映射值2查询当前状态(state1)对应的状态迁移表,如图11所示,state1下映射值为2时对应的下一状态地址是0x0005,而0x0005为state3的存储地址,于是从state1迁移到state3。然后,判断state3所对应的数据类型,由于state3的地址0x0005等于Str_min,所以可知是Str类型的数据。接着,依次读取待查找报文中的b,s,t,并跟状态迁移表中地址0x0005对应的string字段存储的0x65:e,0x73:s,0x74:t进行比较,发现待查找报文中的b与string字段存储的0x65:e不相等,则不再比较后续字符,获取字符b的映射值,根据图9可知,字符b的映射值为0,查询图11所示的状态迁移表可知,state3时映射值0对应的下一状态的地址为0x0,该地址为失败态地址,于是整个正则表达式匹配失败,输出匹配失败的结果。
假设输入的待查找匹配的报文为Test1234。对于Char型数据T和Str型数据est的匹配过程与前面相同,以下只描述对Rep型数据1234的匹配过程。判断state2的数据类型,由于state2的地址0x0002处于Rep_min(0x0002)和Str_min(0x0005)之间,则确定状态2属于Rep类型的数据,于是依次读入字符1,2,3,4的映射值,并逐个判断每一个映射值是否在掩码Mask值的范围之内。根据图5可知,字符1-4的映射值都为1,而掩码Mask值为0x02,即bit1为有效位,所以1-4的映射值在掩码Mask值的范围之内。但是,上述匹配过程只循环了4次,不满足循环5次的条件且已经到达待查找报文的结尾,于是整个正则表达式匹配失败,输出匹配失败结果。
本例提供的正则表达式的匹配方法,通过用字符映射值来代替同一类字符,有利于可以极大地减小状态迁移表所占用的储存空间。通过将待匹配报文分成单个字符型、多个字符型重复字符型,并根据状态的存储地址来判断数据类型,以便采用不同的处理类型或方式,以及根据状态的储存地址来判断当前的状态是接受态还是失败态,可以加快匹配速度、提高运行效率,不需要回溯。
上述实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
Claims (12)
1.一种基于确定性有穷状态自动机的数据匹配检测方法,其特征在于,包括以下步骤:
A)捕获网络中的数据包;
B)对所捕获的数据包进行全协议栈解析;
C)将待匹配数据报文输入至确定性有限自动机DFA状态表中进行匹配,所述DFA状态表包括状态迁移表,所述状态迁移表中包括正则表达式匹配过程中的所有状态地址和各个状态之间的迁移关系,所述迁移关系包括匹配条件及符合匹配条件的下一状态:
判断当前状态对应的数据类型,所述数据类型包括单个字符Char型和多个字符Str型,所述Str型对应的数据为连续的多个字符;
如果当前状态对应的数据类型是Str型,则将待匹配报文中当前状态的多个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态;
如果当前状态对应的数据类型是Char型,则将待匹配报文中当前状态的单个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态;
当所述下一状态为接受态时,结束匹配过程;
D)输出匹配成功结果。
2.如权利要求1所述的方法,其特征在于,所述步骤B的具体方法包括:
B1)协议解析器进行初始化,并加载编译后的正则规则表达集;
B2)读取数据包,并对其进行分组处理;
B3)识别分组后所述数据包的协议类型,并判断所述数据包是否需要解析,如不需要,则直接丢弃该数据包;否则,将协议类型相同的数据包进行归类;
B4)根据正则表达式规则集查找到与数据协议类型对应的协议解码规则,再对包含该数据的数据包进行扫描,根据所述协议解析规则从数据包中提取所述数据的解析信息。
3.根据权利要求2所述的方法,其特征在于,所述对数据包进行分组的具体步骤包括:
首先设置输出端口分组规则和数据分组规则,输出端口分组规则的配置是首先将各输出端口按照对应的后端应用系统的业务处理类型进行分组,然后再根据组内各端口对应的后端系统的处理能力决定每个端口在该组中数据包处理流量的分配比例,数据分组规则的配置是根据IP地址信息或特殊字段将数据包划分到各个分组当中;再进行数据分组处理,先通过协议解析,从网络上接收到的原始数据包中提取出IP数据包,根据设置好的数据分组规则将与后续处理相关数据划分到各个输出端口分组中;然后将划分到每个组中的数据包的地址和端口信息进行Hash运算,Hash值再与该分组所包含的端口总数取模,得到的结果就是该数据包在所属的分组中对应的输出端口序号。
4.根据权利要求3所述的方法,其特征是,所述的输出端口分组的配置遵循以下原则:
1)输出端口的分组首先依据后端处理系统的业务需求,按照业务处理类型进行分组,当一个系统与多个系统分别在数据分组规则属性中互相有重叠时,同一个输出端口会出现在两个以上的分组中;
2)在每个分组内部,为了保证数据处理任务实现均衡分配,同一个输出端口可多次出现在同一个组中,即在分组内按照每个端口对应的后端系统的数据处理能力决定每个端口在该组中数据包流量的分配比例;
3)组内各输出端口的分配在保证负载均衡的同时,保证同一条TCP连接双向的所有数据包必须转发到同一个输出端口上,便于后端对所接收到的数据的汇总和还原。
5.根据权利要求3所述的方法,其特征在于,所述的数据分组规则的设置包括两种方式:
一种是将数据包的IP地址和端口信息作为直接监控对象,基于这些IP地址信息将规则设置在基于地址信息的数据分组规则表中,该规则表的格式如下:
另一种是基于特殊字段信息的规则设置方式,该规则表的格式如下:
其中:
规则号:是每个规则的唯一标识序号;
源、目的IP地址:数据包传输的源端和目的端的IP地址值;
源、目的IP掩码:数据包传输的源端和目的端IP字段的子网掩码;
源、目的端口:数据包传输的源端和目的端的端口号;
字段偏移量:从IP数据包内容开始计算的需要匹配的特殊字段的偏移量;
字段长度:需要匹配的特殊字段的长度;
匹配内容:特殊字段的匹配值,这些特殊字段包括如URL地址、Email信件中的收信人和发信人地址字段;
数据分组行为:“0”表示将该数据包丢弃,“1”表示将该数据包转发到组1,“2”表示将该数据包转发到组2,……“N”表示将该数据报转发到组N,“-1”表示暂停使用该条规则,如果数据分组规则表中除数据分组行为字段外的所有字段都为0,则表示该条规则适用于所有数据包。
6.根据权利要求5所述的方法,其特征在于,由于动态设定的规则具有时效性,因此导入到内存的基于数据包的IP地址和端口信息的数据分组规则表增加″动态/静态″和″超时计数″两个字段,格式为:
7.根据权利要求2所述的方法,其特征在于,所述步骤B3中,将协议类型相同的数据包进行归类的具体步骤包括:
1)在接收到新数据包时建立新的数据表;
2)当接收到数据报文时,先在所述数据表中查找与其对应的包号,若能找到,再判断所述数据报文是否为最后一个包,若不是,则将所述数据报文归入对应的数据包中;否则,删除该数据包;
3)当所述数据包出现乱序或重发且所述数据包没有被正常删除时,启动定时器在定时时间内将所述数据包删除。
8.如权利要求1所述的方法,其特征在于,在步骤C中,所述DFA状态表还包括字符映射表,所述字符映射表中包括字符值与映射值之间的映射关系;
所述将待匹配报文中当前状态的单个字符值与匹配条件进行匹配处理,包括将待匹配报文中当前状态的单个字符值的映射值与匹配条件进行匹配处理。
9.如权利要求8所述的方法,其特征在于,所述数据类型进一步包括:重复字符Rep型,所述Rep型对应的数据为连续出现多次的属于一定范围内的多个字符;所述方法还包括:
判断当前状态对应的数据类型时,如果当前状态对应的数据类型是Rep型,则将待匹配报文中当前状态的映射值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态。
10.如权利要求8所述的方法,其特征在于,所述匹配条件包括预先配置的Char型数据的映射值,所述符合匹配条件的下一状态是对应于所述预先配置的Char型数据的映射值和当前状态的状态号的下一状态的地址;
所述将待匹配报文中当前状态的单个字符值的映射值与匹配条件进行匹配处理包括:
将待匹配报文中当前状态的单个字符值对应的映射值与预先配置的Char型数据的映射值进行比较,如一致,则根据当前状态的状态号和当前状态的映射值,查询所述状态迁移表以获得下一状态的地址,并迁移到下一状态。
11.如权利要求1所述的方法,其特征在于,所述匹配条件及符合匹配条件的下一状态包括:Str型数据匹配条件以及符合Str型数据匹配条件的下一状态;其中,所述Str型数据匹配条件包括:存储于StrLen字段中的预设字符个数n1,其中,n1为正整数;以及存储于String字段中的预设的n1个字符各自的字符值;所述符合匹配条件的下一状态包括:存储于StrExitSt字段中的Str型数据匹配成后迁移至下一状态的地址;
所述将待匹配报文中当前状态的多个字符值与匹配条件进行匹配处理,当匹配时,迁移所述符合匹配条件的下一状态包括:
将待匹配报文中当前状态的n1个字符值,与String字段存储的n1个字符值依次进行比较,当全部相等时,根据StrExitSt字段指示的下一状态的地址迁移到下一状态。
12.如权利要求9所述的方法,其特征在于,所述匹配条件及符合匹配条件的下一状态包括:Rep型数据匹配条件以及符合Rep型数据匹配条件的下一状态;其中,所述Rep型数据匹配条件包括:存储于Count字段中的重复次数n2,其中,n2为正整数;以及存储于Mask字段中的掩码;所述符合Rep型数据匹配条件的下一状态:存储于RepExitSt字段中的指示Rep型数据匹配成功后迁移至下一状态的地址;
所述将待匹配报文中当前状态的映射值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态包括:
将待匹配报文中n2个字符分别对应的映射值与Mask字段中的掩码进行比较,当n2个字符各自对应的映射值全部在所述掩码范围内时,根据所述RepExitSt字段指示的下一状态的地址迁移到下一状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310398923.2A CN103685222A (zh) | 2013-09-05 | 2013-09-05 | 基于确定性有穷状态自动机的数据匹配检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310398923.2A CN103685222A (zh) | 2013-09-05 | 2013-09-05 | 基于确定性有穷状态自动机的数据匹配检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103685222A true CN103685222A (zh) | 2014-03-26 |
Family
ID=50321541
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310398923.2A Pending CN103685222A (zh) | 2013-09-05 | 2013-09-05 | 基于确定性有穷状态自动机的数据匹配检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103685222A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105656944A (zh) * | 2016-03-19 | 2016-06-08 | 浙江大学 | 一种基于网络数据流的木马探测方法 |
CN108628966A (zh) * | 2018-04-20 | 2018-10-09 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
CN108737333A (zh) * | 2017-04-17 | 2018-11-02 | 腾讯科技(深圳)有限公司 | 一种数据检测方法以及装置 |
CN110943873A (zh) * | 2018-09-21 | 2020-03-31 | 中移(杭州)信息技术有限公司 | 一种报文流的处理方法、装置和可读介质 |
CN111556067A (zh) * | 2020-05-09 | 2020-08-18 | 中国航空无线电电子研究所 | 基于有穷状态机的网络数据协议描述结构及解析方法 |
CN113905106A (zh) * | 2021-09-30 | 2022-01-07 | 上海浦东发展银行股份有限公司 | 一种报文解析方法、装置、设备及存储介质 |
CN117690153A (zh) * | 2024-02-04 | 2024-03-12 | 中国电子信息产业集团有限公司第六研究所 | 一种基于确定型有限自动机的文本检测方法、装置及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1564547A (zh) * | 2004-03-25 | 2005-01-12 | 上海复旦光华信息科技股份有限公司 | 保持连接特性的高速过滤分流方法 |
CN101605018A (zh) * | 2009-06-17 | 2009-12-16 | 中兴通讯股份有限公司 | 一种基于流的深度报文检测协议解码方法、设备及系统 |
CN102142009A (zh) * | 2010-12-09 | 2011-08-03 | 华为技术有限公司 | 一种正则表达式匹配的方法及装置 |
-
2013
- 2013-09-05 CN CN201310398923.2A patent/CN103685222A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1564547A (zh) * | 2004-03-25 | 2005-01-12 | 上海复旦光华信息科技股份有限公司 | 保持连接特性的高速过滤分流方法 |
CN101605018A (zh) * | 2009-06-17 | 2009-12-16 | 中兴通讯股份有限公司 | 一种基于流的深度报文检测协议解码方法、设备及系统 |
CN102142009A (zh) * | 2010-12-09 | 2011-08-03 | 华为技术有限公司 | 一种正则表达式匹配的方法及装置 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105656944A (zh) * | 2016-03-19 | 2016-06-08 | 浙江大学 | 一种基于网络数据流的木马探测方法 |
CN108737333A (zh) * | 2017-04-17 | 2018-11-02 | 腾讯科技(深圳)有限公司 | 一种数据检测方法以及装置 |
CN108628966A (zh) * | 2018-04-20 | 2018-10-09 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
CN110943873A (zh) * | 2018-09-21 | 2020-03-31 | 中移(杭州)信息技术有限公司 | 一种报文流的处理方法、装置和可读介质 |
CN110943873B (zh) * | 2018-09-21 | 2021-08-17 | 中移(杭州)信息技术有限公司 | 一种报文流的处理方法、装置和可读介质 |
CN111556067A (zh) * | 2020-05-09 | 2020-08-18 | 中国航空无线电电子研究所 | 基于有穷状态机的网络数据协议描述结构及解析方法 |
CN111556067B (zh) * | 2020-05-09 | 2022-05-20 | 中国航空无线电电子研究所 | 基于有穷状态机的网络数据协议描述结构及解析方法 |
CN113905106A (zh) * | 2021-09-30 | 2022-01-07 | 上海浦东发展银行股份有限公司 | 一种报文解析方法、装置、设备及存储介质 |
CN113905106B (zh) * | 2021-09-30 | 2024-04-30 | 上海浦东发展银行股份有限公司 | 一种报文解析方法、装置、设备及存储介质 |
CN117690153A (zh) * | 2024-02-04 | 2024-03-12 | 中国电子信息产业集团有限公司第六研究所 | 一种基于确定型有限自动机的文本检测方法、装置及设备 |
CN117690153B (zh) * | 2024-02-04 | 2024-04-05 | 中国电子信息产业集团有限公司第六研究所 | 一种基于确定型有限自动机的文本检测方法、装置及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103685222A (zh) | 基于确定性有穷状态自动机的数据匹配检测方法 | |
CN100574321C (zh) | 使用状态表的系统安全实施方法以及相关的系统 | |
CN103491069A (zh) | 网络数据包的过滤方法 | |
CN105429963B (zh) | 基于Modbus/Tcp的入侵检测分析方法 | |
CN101267313B (zh) | 泛洪攻击检测方法及检测装置 | |
US7685637B2 (en) | System security approaches using sub-expression automata | |
CN103685224A (zh) | 网络入侵检测方法 | |
CN103581363B (zh) | 对恶意域名和非法访问的控制方法及装置 | |
US8010689B2 (en) | Locational tagging in a capture system | |
US7958227B2 (en) | Attributes of captured objects in a capture system | |
KR101868720B1 (ko) | 정규 표현식들에 대한 컴파일러 | |
CN101018121B (zh) | 日志的聚合处理方法及聚合处理装置 | |
CN103841096A (zh) | 自动调整匹配算法的入侵检测方法 | |
CN103685221A (zh) | 网络入侵检测方法 | |
CN104579974B (zh) | 面向ndn中名字查找的哈希布鲁姆过滤器及数据转发方法 | |
US8272056B2 (en) | Efficient intrusion detection | |
CN104468107A (zh) | 校验数据处理方法及装置 | |
CN104168288A (zh) | 一种基于协议逆向解析的自动化漏洞挖掘系统及方法 | |
KR20140061359A (ko) | 앵커링된 패턴들 | |
CN105491018B (zh) | 一种基于dpi技术的网络数据安全性分析方法 | |
Meiners et al. | Hardware based packet classification for high speed internet routers | |
CN101414914A (zh) | 数据内容过滤方法与装置、有限状态自动机及其构造装置 | |
CN103475653A (zh) | 网络数据包的检测方法 | |
CN101030897B (zh) | 一种入侵检测中模式匹配的方法 | |
CN106033438A (zh) | 舆情数据存储方法和服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140326 |
|
RJ01 | Rejection of invention patent application after publication |