CN104796354A - 一种乱序数据包字符串匹配方法及系统 - Google Patents

一种乱序数据包字符串匹配方法及系统 Download PDF

Info

Publication number
CN104796354A
CN104796354A CN201510121507.7A CN201510121507A CN104796354A CN 104796354 A CN104796354 A CN 104796354A CN 201510121507 A CN201510121507 A CN 201510121507A CN 104796354 A CN104796354 A CN 104796354A
Authority
CN
China
Prior art keywords
character string
suffix
module
current
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
Application number
CN201510121507.7A
Other languages
English (en)
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.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
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 Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN201510121507.7A priority Critical patent/CN104796354A/zh
Publication of CN104796354A publication Critical patent/CN104796354A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9057Arrangements for supporting packet reassembly or resequencing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/02Indexing scheme relating to groups G06F7/02 - G06F7/026
    • G06F2207/025String search, i.e. pattern matching, e.g. find identical word or best match in a string

Abstract

本发明涉及一种乱序数据包字符串匹配方法及系统,包括以下步骤:初始化确定有限状态自动机DFA和模式后缀树PST;初始化缓冲区,逐个接收在网络中传输的、由数据流分割得到的字符串,每个所述数据流由至少两个字符串有序排列组成;逐个获取属于同一个数据流的字符串;如果当前的字符串存在前缀,设置确定有限状态自动机的当前状态;如果当前的字符串存在后缀,将查找状态追加到当前的字符串的末尾,得到合并片段;将合并片段输入到确定有限状态自动机中;存储当前的字符串信息,并让当前的字符串通过。本发明提出的乱序数据包字符串匹配方法,该模型不需要缓存数据包,而只缓存状态,实现了乱序数据包重排的字符串匹配。

Description

一种乱序数据包字符串匹配方法及系统
技术领域
本发明涉及一种网络数据包检测方法,特别涉及一种乱序数据包字符串匹配方法及系统。
背景技术
网络安全设备,例如入侵检测/防御系统IDS/IPS已经被广泛的部署。简要的说,入侵检测系统监听链路层的数据包,对可能的入侵发出警告。入侵防御系统跟入侵检测系统很接近,但它是内联的,只是丢弃恶意的数据包,而不是生成警告。大多数的入侵检测/防御系统是基于字符串或者正则表达式的,它们有自己的字符串或者正则表达式集合,根据这些集合去匹配数据包的负载。当匹配成功时,数据包被认定为恶意的。
网络中的一个流是一个有限的数据包序列,它们有相同的五元组(源IP,目的IP,源端口,目的端口,协议类型)。如果一个传输的字符串超过了一个数据包所能承载的大小,那么它将会被分成多个分片,再分别封装成数据包。这些数据包由于多重路由,包重发等原因可能以乱序到达网络设备,这种现象称为数据包重排。
为了检测分散在不同数据包中的目标字符串,IDS/IPS不得不缓存并且重排乱序的数据包。在2005年,Dharmapurikar发现在整个网络流中,重排的TCP数据包流量仅占了2-3%。而在1997年10月到1998年1月的90%的TCP数据包被重排,但是Dharmapurikar认为这是因为老一代的路由器架构所导致的。不管怎样,如果数据包重排在正常的网络环境中不是很多,重组所有的流在IDS/IPS中仍然是一个通用的解决方案。另一个方案是流量规范 器,它在网络中移出二义性的流量而不传给IDS/IPS。流量规范器需要维护每一个连接的状态以及缓存乱序的数据包。数据包重排和流量规范器都需要大量的资源,因此给高速的网络流环境带来了潜在的瓶颈,使得IDS/IPS对于耗尽内存的网络攻击很脆弱。
目前,有人提出了一些不使用重组或者规范器进行攻击检测的尝试。George Varghese等人提出了分片检测(Split-Detect)的方法。它将字符串或者正则表达式划分成一片一片的。对每一片的检测都会使TCP流从IDS的快速路径移到慢速路径。分片检测处理和存储开销大约是传统IDS的10%。分片检测与本发明解决相同的问题,但是它不能完全的避免重组。它仅仅是通过从快速路径转移到慢速路径减少了重组,以至于不是所有的流都需要重组。慢速路径的流仍然需要重组数据包。此外,分片检测还需要三个假设:每个TCP接收器都做些小改动,字符串或者正则表达式检测需要改动,还有一个限制,固定长度的字符串或者正则表达式的约束。所有的这些假设都很难满足。
另一个方法叫On-Line Reassembly(OLR)。它利用DAWG去存储模式并且记录自动机的状态以避免重组。这个方法与本发明很像,但是DAWG未考虑输入的数据包正好填补空洞的情况,因此这个方法逻辑上是不完备的。本发明提出了一个基于后缀树的字符串匹配模型。该模型不需要缓存数据包,而只缓存状态,实现了乱序数据包重排的字符串匹配。
发明内容
本发明所要解决的技术问题是提供一种不需要缓存数据包、只缓存状态的乱序数据包字符串匹配方法及系统。
本发明解决上述技术问题的技术方案如下:一种乱序数据包字符串匹配方法,包括以下步骤:
步骤1:初始化确定有限状态自动机DFA和模式后缀树PST,所述确定有限状态自动机的返回值为匹配状态和匹配列表,所述模式后缀树的返回值为查找状态和查找标记,将匹配状态和查找状态设置为零,将查找标记设置为假;
步骤2:初始化缓冲区,逐个接收在网络中传输的、由数据流分割得到的字符串,每个所述数据流由至少两个字符串有序排列组成;
步骤3:分别为每个字符串查找其所属的数据流,并为每个字符串根据其所属的数据流分别设置序列号、前缀和后缀,逐个获取属于同一个数据流的字符串;
步骤4:如果当前的字符串存在前缀,将确定有限状态自动机的当前状态初始化为前缀在确定有限状态自动机中对应的匹配状态,执行步骤5;否则,直接执行步骤5;
步骤5:如果当前的字符串存在后缀,将所述后缀输入到模式后缀树中,得到查找状态,将查找状态追加到当前的字符串的末尾,得到合并片段,执行步骤6;否则,直接执行步骤6;
步骤6:将合并片段输入到确定有限状态自动机中,如果匹配成功,则丢弃当前的合并片段,并清除缓冲区中与当前的合并片段对应的数据流的记录,执行步骤2,如果未匹配成功,将合并片段作为当前的字符串,执行步骤7;
步骤7:存储当前的字符串的字符串信息,并让当前的字符串通过,执行步骤2,直至网络中没有传输的、由数据流分割得到的字符串。
本发明的有益效果是:本发明不需要缓存数据包,而只缓存状态,实现了乱序数据包重排的字符串匹配。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述步骤6与步骤7之间还包括: 
步骤6.1:如果当前的字符串存在前缀,执行步骤6.2;否则,执行步骤6.5;
步骤6.2:当前缀的查找标记为真,将当前的字符串和前缀在模式后缀树中对应的状态输入模式后缀树,得到查找状态和查找标记,执行步骤6.4;当前缀的查找标记为假,执行步骤6.3;
步骤6.3:将模式后缀树的当前状态设置为前缀在模式后缀树中对应的查找状态,执行步骤6.4;
步骤6.4:存储当前的字符串的序列号和长度,并从缓冲区中删除当前的字符串的前缀的信息,执行步骤6.6;
步骤6.5:如果当前的字符串不存在前缀,将模式后缀树的当前状态设置为零,然后将当前的字符串输入模式后缀树,返回查找状态和查找标记,执行步骤6.6;
步骤6.6:如果当前的字符串存在后缀,执行步骤6.7,否则,执行步骤6.9;
步骤6.7:如果后缀的查找标记为假,将确定有限状态自动机的当前状态设置为后缀在确定有限状态自动机中对应的匹配状态,将后缀在模式后缀树中对应的查找标记设置为假,执行步骤6.8;如果后缀的查找标记为真,执行步骤6.8;
步骤6.8:存储当前的字符串的长度,并从缓冲区中删除当前的字符串的后缀的信息,执行步骤6.9;
步骤6.9:如果当前的字符串不存在后缀,将当前的字符串存入缓冲区,让当前的字符串通过,重新接受下一个字符串,直至网络中没有传输的、由数据流分割得到的字符串。
进一步,所述步骤7中的字符串信息包括字符串所属的数据流、字符串在数据流中的序列号、字符串的长度、字符串在确定有限状态自动机中对应 的匹配状态、字符串在模式后缀树中对应的查找状态和查找标记。
进一步,所述确定有限状态自动机进行字符串匹配的流程具体包括以下步骤:
步骤a:根据接收到的网络中传输的、由数据流分割得到的所有字符串构建确定有限状态自动机;
步骤b:将确定有限状态自动机的匹配列表初始化为空;
步骤c:逐个获取待匹配的字符串的每个字符,当所有字符全部获取完毕,执行步骤d;
步骤d:如果当前字符存在于确定有限状态自动机中,设置匹配状态为真,并将当前字符存储于匹配列表中;如果当前字符不存在于确定有限状态自动机中,返回匹配状态为假,并输出显示,重新执行步骤b;
步骤e:返回匹配状态和匹配列表。
进一步,所述模式后缀树查找字符串具体包括以下步骤:
步骤A:根据接收到的网络中传输的、由数据流分割得到的所有字符串构建模式后缀树;
步骤B:逐个获取待搜索的字符串的每个字符,当所有字符全部获取完毕,执行步骤D;
步骤C:如果当前字符存在于模式后缀树中,设置查找状态;如果当前字符不存在于模式后缀树中,返回查找状态和查找标记,重新执行步骤B;
步骤D:返回查找状态和查找标记。
进一步,一种乱序数据包字符串匹配系统,包括第一初始化模块、接收模块、设置获取模块、前缀处理模块、后缀处理模块、匹配模块和存储循环模块;
所述第一初始化模块,用于初始化确定有限状态自动机DFA和模式后缀树PST,所述确定有限状态自动机的返回值为匹配状态和匹配列表,所述模 式后缀树的返回值为查找状态和查找标记,将匹配状态和查找状态设置为零,将查找标记设置为假;
所述接收模块,用于初始化缓冲区,逐个接收在网络中传输的、由数据流分割得到的字符串,每个所述数据流由至少两个字符串有序排列组成;
所述设置获取模块,用于分别为每个字符串查找其所属的数据流,并为每个字符串根据其所属的数据流分别设置序列号、前缀和后缀,逐个获取属于同一个数据流的字符串;
所述前缀处理模块,用于如果当前的字符串存在前缀,将确定有限状态自动机的当前状态初始化为前缀在确定有限状态自动机中对应的匹配状态,执行后缀处理模块;否则,直接执行后缀处理模块;
所述后缀处理模块,用于如果当前的字符串存在后缀,将所述后缀输入到模式后缀树中,得到查找状态,将查找状态追加到当前的字符串的末尾,得到合并片段,执行匹配模块;否则,直接执行匹配模块;
所述匹配模块,用于将合并片段输入到确定有限状态自动机中,如果匹配成功,则丢弃当前的合并片段,并清除缓冲区中与当前的合并片段对应的数据流的记录,执行接收模块,如果未匹配成功,将合并片段作为当前的字符串,执行存储循环模块;
所述存储循环模块,用于存储当前的字符串的字符串信息,并让当前的字符串通过,执行接收模块,直至网络中没有传输的、由数据流分割得到的字符串。
进一步,所述匹配模块与存储循环模块之间还包括前缀判断模块、前缀输入模块、前缀设置模块、存储删除模块、清零返回模块、后缀判断模块、后缀设置模块、后缀跳转模块、第二存储删除模块和存入接收模块;
所述前缀判断模块,用于如果当前的字符串存在前缀,执行前缀输入模块;否则,执行清零返回模块;
所述前缀输入模块,用于当前缀的查找标记为真,将当前的字符串和前缀在模式后缀树中对应的状态输入模式后缀树,得到查找状态和查找标记,执行第一存储删除模块;当前缀的查找标记为假,执行前缀设置模块;
所述前缀设置模块,用于将模式后缀树的当前状态设置为前缀在模式后缀树中对应的查找状态,执行第一存储删除模块;
所述第一存储删除模块,用于存储当前的字符串的序列号和长度,并从缓冲区中删除当前的字符串的前缀的信息,执行后缀判断模块;
所述清零返回模块,用于如果当前的字符串不存在前缀,将模式后缀树的当前状态设置为零,然后将当前的字符串输入模式后缀树,返回查找状态和查找标记,执行后缀判断模块;
所述后缀判断模块,用于如果当前的字符串存在后缀,执行后缀设置模块,否则,执行存入接收模块;
所述后缀设置模块,用于如果后缀的查找标记为假,将确定有限状态自动机的当前状态设置为后缀在确定有限状态自动机中对应的匹配状态,将后缀在模式后缀树中对应的查找标记设置为假,执行第二存储删除模块;如果后缀的查找标记为真,执行第二存储删除模块;
所述第二存储删除模块,用于存储当前的字符串的长度,并从缓冲区中删除当前的字符串的后缀的信息,执行存入接收模块;
所述存入接收模块,用于如果当前的字符串不存在后缀,将当前的字符串存入缓冲区,让当前的字符串通过,重新接受下一个字符串,直至网络中没有传输的、由数据流分割得到的字符串。
进一步,所述存储循环模块中的字符串信息包括字符串所属的数据流、字符串在数据流中的序列号、字符串的长度、字符串在确定有限状态自动机中对应的匹配状态、字符串在模式后缀树中对应的查找状态和查找标记。
进一步,所述前缀处理模块具体包括构建子模块、初始化子模块,第一 获取子模块、第一设置子模块和返回子模块;
所述第一构建子模块,用于根据接收到的网络中传输的、由数据流分割得到的所有字符串构建确定有限状态自动机;
所述初始化子模块,用于将确定有限状态自动机的匹配列表初始化为空;
所述第一获取子模块,用于逐个获取待匹配的字符串的每个字符,当所有字符全部获取完毕,执行设置子模块;
所述第一设置子模块,用于如果当前字符存在于确定有限状态自动机中,设置匹配状态为真,并将当前字符存储于匹配列表中;如果当前字符不存在于确定有限状态自动机中,返回匹配状态为假,并输出显示,重新执行初始化子模块;
所述返回子模块,用于返回匹配状态和匹配列表。
进一步,所述后缀处理模块具体包括第二构建子模块、第二构建子模块、第二设置子模块和第二返回子模块;
所述第二构建子模块,用于根据接收到的网络中传输的、由数据流分割得到的所有字符串构建模式后缀树;
所述第二构建子模块,用于逐个获取待搜索的字符串的每个字符,当所有字符全部获取完毕,执行第二返回子模块;
所述第二设置子模块,用于如果当前字符存在于模式后缀树中,设置查找状态;如果当前字符不存在于模式后缀树中,返回查找状态和查找标记,重新执行第二构建子模块;
所述第二返回子模块,用于返回查找状态和查找标记。。
附图说明
图1为本发明方法步骤流程图;
图2为本发明系统结构图;
图3为本发明洞和连续块传输状态示意图;
图4为本发明模式集合为X={abaaba,ababab}的有限状态机结构图;
图5为本发明模式集合为X={abaaba,ababab}的模式后缀树结构图;
图6为本发明两个数据片段重排示意图。
附图中,各标号所代表的部件列表如下:
1、第一初始化模块,2、接收模块,3、设置获取模块,4、前缀处理模块,5、后缀处理模块,6、匹配模块,6-1、前缀判断模块,6-2、前缀输入模块,6-3、前缀设置模块,6-4、存储删除模块,6-5、清零返回模块,6-6、后缀判断模块,6-7、后缀设置模块,6-8、第二存储删除模块,6-9、存入接收模块,7、存储循环模块。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
实施例1
一种乱序数据包字符串匹配方法,其特征在于,包括以下步骤:
步骤1:初始化确定有限状态自动机DFA和模式后缀树PST,所述确定有限状态自动机的返回值为匹配状态和匹配列表,所述模式后缀树的返回值为查找状态和查找标记,将匹配状态和查找状态设置为零,将查找标记设置为假;
步骤2:初始化缓冲区,逐个接收在网络中传输的、由数据流分割得到的字符串,每个所述数据流由至少两个字符串有序排列组成;
步骤3:分别为每个字符串查找其所属的数据流,并为每个字符串根据其所属的数据流分别设置序列号、前缀和后缀,逐个获取属于同一个数据流 的字符串;
步骤4:如果当前的字符串存在前缀,将确定有限状态自动机的当前状态初始化为前缀在确定有限状态自动机中对应的匹配状态,执行步骤5;否则,直接执行步骤5;
步骤5:如果当前的字符串存在后缀,将所述后缀输入到模式后缀树中,得到查找状态,将查找状态追加到当前的字符串的末尾,得到合并片段,执行步骤6;否则,直接执行步骤6;
步骤6:将合并片段输入到确定有限状态自动机中,如果匹配成功,则丢弃当前的合并片段,并清除缓冲区中与当前的合并片段对应的数据流的记录,执行步骤2,如果未匹配成功,将合并片段作为当前的字符串,执行步骤7;
步骤7:存储当前的字符串的字符串信息,并让当前的字符串通过,执行步骤2,直至网络中没有传输的、由数据流分割得到的字符串。
所述步骤6与步骤7之间还包括: 
步骤6.1:如果当前的字符串存在前缀,执行步骤6.2;否则,执行步骤6.5;
步骤6.2:当前缀的查找标记为真,将当前的字符串和前缀在模式后缀树中对应的状态输入模式后缀树,得到查找状态和查找标记,执行步骤6.4;当前缀的查找标记为假,执行步骤6.3;
步骤6.3:将模式后缀树的当前状态设置为前缀在模式后缀树中对应的查找状态,执行步骤6.4;
步骤6.4:存储当前的字符串的序列号和长度,并从缓冲区中删除当前的字符串的前缀的信息,执行步骤6.6;
步骤6.5:如果当前的字符串不存在前缀,将模式后缀树的当前状态设置为零,然后将当前的字符串输入模式后缀树,返回查找状态和查找标记, 执行步骤6.6;
步骤6.6:如果当前的字符串存在后缀,执行步骤6.7,否则,执行步骤6.9;
步骤6.7:如果后缀的查找标记为假,将确定有限状态自动机的当前状态设置为后缀在确定有限状态自动机中对应的匹配状态,将后缀在模式后缀树中对应的查找标记设置为假,执行步骤6.8;如果后缀的查找标记为真,执行步骤6.8;
步骤6.8:存储当前的字符串的长度,并从缓冲区中删除当前的字符串的后缀的信息,执行步骤6.9;
步骤6.9:如果当前的字符串不存在后缀,将当前的字符串存入缓冲区,让当前的字符串通过,重新接受下一个字符串,直至网络中没有传输的、由数据流分割得到的字符串。
所述步骤7中的字符串信息包括字符串所属的数据流、字符串在数据流中的序列号、字符串的长度、字符串在确定有限状态自动机中对应的匹配状态、字符串在模式后缀树中对应的查找状态和查找标记。
所述确定有限状态自动机进行字符串匹配的流程具体包括以下步骤:
步骤a:根据接收到的网络中传输的、由数据流分割得到的所有字符串构建确定有限状态自动机;
步骤b:将确定有限状态自动机的匹配列表初始化为空;
步骤c:逐个获取待匹配的字符串的每个字符,当所有字符全部获取完毕,执行步骤d;
步骤d:如果当前字符存在于确定有限状态自动机中,设置匹配状态为真,并将当前字符存储于匹配列表中;如果当前字符不存在于确定有限状态自动机中,返回匹配状态为假,并输出显示,重新执行步骤b;
步骤e:返回匹配状态和匹配列表。
所述模式后缀树查找字符串具体包括以下步骤:
步骤A:根据接收到的网络中传输的、由数据流分割得到的所有字符串构建模式后缀树;
步骤B:逐个获取待搜索的字符串的每个字符,当所有字符全部获取完毕,执行步骤D;
步骤C:如果当前字符存在于模式后缀树中,设置查找状态;如果当前字符不存在于模式后缀树中,返回查找状态和查找标记,重新执行步骤B;
步骤D:返回查找状态和查找标记。
一种乱序数据包字符串匹配系统,包括第一初始化模块1、接收模块2、设置获取模块3、前缀处理模块4、后缀处理模块5、匹配模块6和存储循环模块7;
所述第一初始化模块1,用于初始化确定有限状态自动机DFA和模式后缀树PST,所述确定有限状态自动机的返回值为匹配状态和匹配列表,所述模式后缀树的返回值为查找状态和查找标记,将匹配状态和查找状态设置为零,将查找标记设置为假;
所述接收模块2,用于初始化缓冲区,逐个接收在网络中传输的、由数据流分割得到的字符串,每个所述数据流由至少两个字符串有序排列组成;
所述设置获取模块3,用于分别为每个字符串查找其所属的数据流,并为每个字符串根据其所属的数据流分别设置序列号、前缀和后缀,逐个获取属于同一个数据流的字符串;
所述前缀处理模块4,用于如果当前的字符串存在前缀,将确定有限状态自动机的当前状态初始化为前缀在确定有限状态自动机中对应的匹配状态,执行后缀处理模块5;否则,直接执行后缀处理模块5;
所述后缀处理模块5,用于如果当前的字符串存在后缀,将所述后缀输入到模式后缀树中,得到查找状态,将查找状态追加到当前的字符串的末尾, 得到合并片段,执行匹配模块6;否则,直接执行匹配模块6;
所述匹配模块6,用于将合并片段输入到确定有限状态自动机中,如果匹配成功,则丢弃当前的合并片段,并清除缓冲区中与当前的合并片段对应的数据流的记录,执行接收模块2,如果未匹配成功,将合并片段作为当前的字符串,执行存储循环模块7;
所述存储循环模块7,用于存储当前的字符串的字符串信息,并让当前的字符串通过,执行接收模块2,直至网络中没有传输的、由数据流分割得到的字符串。
所述匹配模块6与存储循环模块7之间还包括前缀判断模块6-1、前缀输入模块6-2、前缀设置模块6-3、存储删除模块6-4、清零返回模块6-5、后缀判断模块6-6、后缀设置模块6-7、后缀跳转模块6-8、第二存储删除模块6-9和存入接收模块6-10;
所述前缀判断模块6-1,用于如果当前的字符串存在前缀,执行前缀输入模块6-2;否则,执行清零返回模块6-5;
所述前缀输入模块6-2,用于当前缀的查找标记为真,将当前的字符串和前缀在模式后缀树中对应的状态输入模式后缀树,得到查找状态和查找标记,执行第一存储删除模块6-4;当前缀的查找标记为假,执行前缀设置模块6-3;
所述前缀设置模块6-3,用于将模式后缀树的当前状态设置为前缀在模式后缀树中对应的查找状态,执行第一存储删除模块6-4;
所述第一存储删除模块6-4,用于存储当前的字符串的序列号和长度,并从缓冲区中删除当前的字符串的前缀的信息,执行后缀判断模块6-6;
所述清零返回模块6-5,用于如果当前的字符串不存在前缀,将模式后缀树的当前状态设置为零,然后将当前的字符串输入模式后缀树,返回查找状态和查找标记,执行后缀判断模块6-6;
所述后缀判断模块6-6,用于如果当前的字符串存在后缀,执行后缀设置模块6-7,否则,执行存入接收模块6-9;
所述后缀设置模块6-7,用于如果后缀的查找标记为假,将确定有限状态自动机的当前状态设置为后缀在确定有限状态自动机中对应的匹配状态,将后缀在模式后缀树中对应的查找标记设置为假,执行第二存储删除模块6-8;如果后缀的查找标记为真,执行第二存储删除模块6-8;
所述第二存储删除模块6-8,用于存储当前的字符串的长度,并从缓冲区中删除当前的字符串的后缀的信息,执行存入接收模块6-9;
所述存入接收模块6-9,用于如果当前的字符串不存在后缀,将当前的字符串存入缓冲区,让当前的字符串通过,重新接受下一个字符串,直至网络中没有传输的、由数据流分割得到的字符串。
所述存储循环模块7中的字符串信息包括字符串所属的数据流、字符串在数据流中的序列号、字符串的长度、字符串在确定有限状态自动机中对应的匹配状态、字符串在模式后缀树中对应的查找状态和查找标记。
所述前缀处理模块4具体包括构建子模块、初始化子模块,第一获取子模块、第一设置子模块和返回子模块;
所述第一构建子模块,用于根据接收到的网络中传输的、由数据流分割得到的所有字符串构建确定有限状态自动机;
所述初始化子模块,用于将确定有限状态自动机的匹配列表初始化为空;
所述第一获取子模块,用于逐个获取待匹配的字符串的每个字符,当所有字符全部获取完毕,执行设置子模块;
所述第一设置子模块,用于如果当前字符存在于确定有限状态自动机中,设置匹配状态为真,并将当前字符存储于匹配列表中;如果当前字符不存在于确定有限状态自动机中,返回匹配状态为假,并输出显示,重新执行 初始化子模块;
所述返回子模块,用于返回匹配状态和匹配列表。
所述后缀处理模块5具体包括第二构建子模块、第二构建子模块、第二设置子模块和第二返回子模块;
所述第二构建子模块,用于根据接收到的网络中传输的、由数据流分割得到的所有字符串构建模式后缀树;
所述第二构建子模块,用于逐个获取待搜索的字符串的每个字符,当所有字符全部获取完毕,执行第二返回子模块;
所述第二设置子模块,用于如果当前字符存在于模式后缀树中,设置查找状态;如果当前字符不存在于模式后缀树中,返回查找状态和查找标记,重新执行第二构建子模块;
所述第二返回子模块,用于返回查找状态和查找标记。
在本发明中,一个流是一个完整的字符串,流中的一个数据包看成流中的一个片段。
一个洞定义为流中实际到达的数据包的序列号比需要的数据包的序列号大时所产生的序列缝隙,如图3所示。
一个字符串是字母表A中元素的有限序列,是一个有限的非空集合,其中的元素叫做字母。0个字母组成序列被叫做空字符串,它被定义为ε。所有字符串的字母表集合被定义为A*。字符串的长度x被定义为|x|,x中下表为i(开始于0)的字母被定义为x[i],i∈{0,1…,|x|-1}。两个字符串x、y组成一个新的字符串,并且y在x后,被定义为xy。
如果存在两个字符串u和v,使得y=uxv,那么字符串x是字符串y的因子。当u=ε,x是y的前缀,当v=ε,x是y的后缀。如果x不等于y,那么字符串y的因子x是合适的。即1、当x不等于y的时候,x即是y的一个因子。2、合适是指y=uxv中u和v不同时为空,x不等于y,即是合适 的。3、默认情况下,u和v不为空。当u=ε时,指明u为空。当x是一个因子,一个合适的因子,一个前缀,一个合适的前缀,一个后缀,一个合适的后缀时,它们分别定义为x≤facty,x<facty,x≤prefy,x<prefy,x≤suffy和x<suffy。
一个片段组成的字符串(定义为Y),它由y1y2…yn构成。n≥2,yi≠ε,i=1,2,…,n。一个模式集合(定义为X)是由一组需要匹配的字符串组成的集合。
y1y2…yn是Y的片段,它们的到达时间可能是乱序的。对于每一个片断yn,它能够在网络链接中通过或者丢失。通过的片断能够组合成Y的一些连续块。如果在这些连续块中没有发现模式x∈X,那么可以判定这个流是无威胁的。
模式集合首先编译到有限自动机中(DFA)中。在模式集合中,每一个状态表示一个字母,一个状态可能属于多种模式。顺序读取输入的字符串,然后沿着DFA进行搜索。这个过程的时间复杂度和输入字符串的长度呈线性关系,而与搜索的字符串的长度和个数无关。
整个匹配过程可以分为预处理阶段和搜索阶段。在预处理阶段,根据模式集合建立DFA,DFA包含一些goto函数,它会根据现在的输入字母决定下一个状态;一些failure函数,它会显示当输入字母没有goto函数时的下一个状态;一些output函数,它会在当前状态下显示成功匹配。
图4是模式集合X={abaaba,ababab}的DFA的一个例子,它的输出函数如表1所示。
搜索阶段的步骤如下所示,它的返回值包含最终状态和匹配的模式列表。
步骤1:初始化模式列表match为空。
步骤2:获得str的第i个字符。
步骤2.1:如果DFA中存在一条边arc(state,t)标记str[i]
那么state←t,match←match∪output(state)
步骤2.2:否则state←failstate(state)。
即1、ACA为AC自动机
按序ACA匹配时,如果str[i]存在于ACA中,设置状态state,合并每次模式列表match。
按序ACA匹配时,ACA中不存在str[i],那么返回错误状态state和输出。
如果ACA匹配时,str[i]全部存在于ACA中,那么返回状态state和模式列表match。
2、图4为根据DFA有限自动机原理生成的字符串abaaba和ababab的状态转化关系。根据字符串顺序查找状态,返回对应状态。
步骤3:返回最终状态state和模式匹配列表match。
模式集合X的模式后缀树(PST)是一个单词查找树trie,它由X的合适后缀集合所组成。例如,X={abaaba,ababab},X的合适后缀集合为{a,ba,aaba,baaba,b,ab,bab,abab,babab},图5为PST的例子。
一个PST是一个状态转换函数如下的自动机,构造后缀树的过程类似DFA构造过程,不同的是failure函数和output函数不需要,返回值包含stop状态和一个fact标记,其中的状态转换步骤如下所示:
步骤1:获得str的第i个字符。
步骤1.1:如果PST中存在一条边arc(state,t)标记str[i]
那么state←t
步骤1.2:否则返回(state,false)。
步骤2:返回状态(state,true)。
即在PST匹配时,如果在PST中存在str[i],则设置状态state。
在PST匹配时,如果在PST中不存在str[i],则返回状态state和结果false。
在PST匹配时,如果str[i]全部存在PST中,那么返回状态state和结果true。
一旦输入的字符串没有结束,并且没有下一个状态,那么fact是false。一旦输入的字符串结束了,但是PST没有结束,fact是true。所以fact=true意味着str是X中一些模式的合适因子。
本发明需要从当前的状态回溯到根节点,获取这个路径的字符串。因此函数path(state)返回路径的字符串,即从根的字母到当前的状态。例如,在图5中可看出path(11)为baab。
图6展示了一个两个包重排的情况。
当数据包y2到来时,仅当y2的前缀是所要查找的模式的后缀,一个模式可能存在于两个包中间。所以PST能够用于决定是否某个模式的一个后缀存在于y2的开始部分。如果PST返回成功,记录PST的状态。当y1到来时,从PST状态记录中得到path,把path加到y1的末尾,然后模式可以被匹配。
下面详细介绍本发明的处理步骤,其中用到了状态缓存的数据结构,如图6所示。fid是流标识符,seq是数据包的序列号,也是下标,len是数据包的长度,s1是数据包在DFA匹配的状态,s2是数据包在PST匹配的状态。
模式x出现在Y的片段中,Y=y1y2…yn,Y可以被分成两个问题。一个是x仅存在于一个片段中,
∃ i ∈ { 1,2 , . . . , n } , x ≤ fact y i
另一个是x跨越的存在于几个片段中,
第一种情况,通过将yi传递给模式为x的DFA可以找出x是否出现。请注意,无论DFA初始状态是什么,它都能在yi中找到所有出现的x,只要yi被接收都可以完成这个处理步骤。
第二种情况是本发明重点关注的,i<j那么x≤factyiyi+1...yj
但是
为了处理这种没有缓存输入字符y1,y2,...,yn的问题,还需做更多的工作:
首先,举个简单的例子:假设仅有两个片段,yi和yj,j=i+1。在这个问题中,那么x=uv,u≤suffyi,v≤prefyj
如果yi第一个到达,把它传给模式为x的DFA,保存最终状态为s1。当yj到达时,把它传给状态为s1的DFA,模式x的出现可以被发现。例如,假设X={abaaba,ababab},yi=aaba,yj=abaa,abaaba出现在yi yj中。当yi到达时,它被传入模式为X的DFA(如图4),DFA最终状态为3。保存s1=3,让yi通过。当yj到达时,从状态3开始继续搜索,当abaaba出现时将被找到。因此yj被标记,整个输入字符串被匹配上。
如果yj先到,它首先被传入x的PST中,并且状态保存为s2。当yi到的时候,PST中s2状态的path会追加到yi的字符串后,然后进入DFA匹配,这样x可以被成功匹配。例如,假设X={abaaba,ababab},yi=aaba,yj=abaa,yi yj中存在abaaba。当yj到达时,它传入到模式为X的PST中(如图5),然后停止在PST的状态6上,保存s2=6,让yj通过。当yi到达时,它会将path(6)=aba追加到yi的字符串后,然后传入到模式为X的ACA中。那么,DFA发现了abaaba的出现。所以,yi被丢弃,输入字符串被匹配上。
考虑到数据包重传的可能,例如,如果模式被分成3个数据包,数据包2,3先到,传给了系统。当数据包1到达时,它将被丢弃。模式的状态 将被清空。发送者然后重传数据包1。它将通过IDS,3个数据包将全部到达目的地。为了避免这种情况,一个解决方法是,在连接中一旦模式匹配,就向连接的两边发RST数据包,那么,接收端将终止这个连接,不再接收重传的数据包。总之,模式为x的DFA能用于保存一个片段的后缀信息,与此同时模式为x的PST也可用于保存片段的前缀信息。
要是模式x跨越不止两个片段怎么办?信息融合机制用于合并连续块中的PST状态记录。假设yiyi+1...yj,j>i+1。那么x=uyi+1yi+2...yj-1v,u≤suffyi,v≤prefyj。这种情况,PST的返回值fact用于识别x的合适因子。fact=true意为着整个片段是x合适因子,因此需要和前驱片段合并PST的状态。假设模式X={abaaba,ababab},片段Y=y1y2y3y4,其中y1=bbaa,y2=baba,y3=baab,y4=aabb。数据包到的顺序为y3,y1,y4,y2,流的fid为1。
第一步,根据X生成DFA和PST(如图4和图5)。初始化集合然后根据输入片断进行下面步骤。
1.假设第一个输入片段为y3=baab。
由于y3是流1的第一个到达的片段,在Buffer中没有流1的记录。将y3传入初始状态都为0的DFA和PST,返回的值为s1=2,s2=11,fact=true。
经过这步处理,Buffer包含一个状态记录:(1,8,4,2,11,true)。
2.第二个输入片段为y1=bbaa。
由于在Buffer中既没有y1的前驱也没有后继,那么y1的处理与y3相同。将y1传入初始状态为0的DFA和PST。返回值为s1=1,s2=8,fact=false。
经过这步处理,Buffer包含两个状态记录:(1,0,4,1,8,false)和(1,8,4,2,11,true)。
3.第三个输入片段为y4=aabb。
因为Buffer包含y4的前驱(1,8,4,2,11,true),y4传入初始状态为2的DFA。返回值为s1=0,因为fact标记了y4的前驱为true,y4被传入初始状态为11的PST中,返回值为s2=12,fact=false。
经过信息融合,Buffer包含两个状态记录:(1,0,4,1,8,false)和(1,8,8,0,12,false)。
4.最后输入片段为y2=baba。
由于Buffer包含y2的前驱和后继分片—(1,0,4,1,8,false)和(1,8,8,0,12,false),path(12)=baaba将追加在y2的尾部,那么str=bababaaba将被传入初始状态为1的DFA。返回值为s1=6,match={abaaba,ababab}。然后y2被丢弃,所有的流1的记录将从Buffer中清除。
注意,即使y1,y3,y4已经通过,他们不包含完整的字符串,因此将不会造成破坏。
综上所述,乱序数据包字符串匹配方法的处理步骤如下:
步骤1:Buffer初始化为
步骤2:当数据包到来时,根据五元组查找流fid,并设置数据包序号seq,数据包长度len,数据包负载str,str为要匹配的字符串,在Buffer中根据fid查找数据包的前驱和后继,所述Buffer用于存储以fid(流ID)为唯一标识的相关数据。并设置pre和suc,pre为前驱,suc为后继。如果没查到前驱和后继则为空。
步骤3:初始化DFA和PST的状态为0,fact为false。如果存在前驱,就将s1初始化为前驱的s1状态,所述s1为DFA的状态,如果存在后继,就将后继的path(s2)字符串追加到当前str字符串之后,所述s2为PST的状态,并设置str为合并后的字符串。
步骤4:模式匹配,如果DFA匹配到了str,str为步骤3中的str。 在当前的DFA中匹配到了str,跟当前数据包没关系,只是单纯的用DFA匹配str。那么丢弃当前包,向连接的两端发送RST数据包,连接的两端为TCP连接建立的客户端和服务器端,从Buffer中清除属于fid流中的所有记录。
步骤5:信息融合,如果存在前驱,并且前驱的fact是true,那么将str和前驱的状态s2传入PST,返回(s2,fact)即重置s2和fact的值,这些值是根据str和前驱状态s2在PST匹配中得来的。如果前驱的fact是false,那么前驱的状态s2作为当前的s2。然后,seq←pre.seq,len←len+pre.len即将前驱的序列号和合并后的长度计入seq和len,然后从Buffer中清除前驱记录。如果不存在前驱,那么将str和状态0传入PST,返回(s2,fact)。如果存在后继,并且后继的fact是false,那么,s1←suc.s1
fact←false。len←len+suc.len,从Buffer中删除后继。
步骤6:Buffer存储当前的数据包信息,Buffer=Buffer∪{(fid,seq,len,s1,s2,fact)}即Buffer与当前的数据包状态信息合并,让当前数据包通过。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种乱序数据包字符串匹配方法,其特征在于,包括以下步骤:
步骤1:初始化确定有限状态自动机和模式后缀树,所述确定有限状态自动机的返回值为匹配状态和匹配列表,所述模式后缀树的返回值为查找状态和查找标记,将匹配状态和查找状态设置为零,将查找标记设置为假;
步骤2:初始化缓冲区,逐个接收在网络中传输的、由数据流分割得到的字符串,每个所述数据流由至少两个字符串有序排列组成;
步骤3:分别为每个字符串查找其所属的数据流,并为每个字符串根据其所属的数据流分别设置序列号、前缀和后缀,逐个获取属于同一个数据流的字符串;
步骤4:如果当前的字符串存在前缀,将确定有限状态自动机的当前状态初始化为前缀在确定有限状态自动机中对应的匹配状态,执行步骤5;否则,直接执行步骤5;
步骤5:如果当前的字符串存在后缀,将所述后缀输入到模式后缀树中,得到查找状态,将查找状态追加到当前的字符串的末尾,得到合并片段,执行步骤6;否则,直接执行步骤6;
步骤6:将合并片段输入到确定有限状态自动机中,如果匹配成功,则丢弃当前的合并片段,并清除缓冲区中与当前的合并片段对应的数据流的记录,执行步骤2,如果未匹配成功,将合并片段作为当前的字符串,执行步骤7;
步骤7:存储当前的字符串的字符串信息,并让当前的字符串通过,执行步骤2,直至网络中没有传输的、由数据流分割得到的字符串。
2.根据权利要求1所述的乱序数据包字符串匹配方法,其特征在于,所述步骤6与步骤7之间还包括:
步骤6.1:如果当前的字符串存在前缀,执行步骤6.2;否则,执行步骤6.5;
步骤6.2:当前缀的查找标记为真,将当前的字符串和前缀在模式后缀树中对应的状态输入模式后缀树,得到查找状态和查找标记,执行步骤6.4;当前缀的查找标记为假,执行步骤6.3;
步骤6.3:将模式后缀树的当前状态设置为前缀在模式后缀树中对应的查找状态,执行步骤6.4;
步骤6.4:存储当前的字符串的序列号和长度,并从缓冲区中删除当前的字符串的前缀的信息,执行步骤6.6;
步骤6.5:如果当前的字符串不存在前缀,将模式后缀树的当前状态设置为零,然后将当前的字符串输入模式后缀树,返回查找状态和查找标记,执行步骤6.6;
步骤6.6:如果当前的字符串存在后缀,执行步骤6.7,否则,执行步骤6.9;
步骤6.7:如果后缀的查找标记为假,将确定有限状态自动机的当前状态设置为后缀在确定有限状态自动机中对应的匹配状态,将后缀在模式后缀树中对应的查找标记设置为假,执行步骤6.8;如果后缀的查找标记为真,执行步骤6.8;
步骤6.8:存储当前的字符串的长度,并从缓冲区中删除当前的字符串的后缀的信息,执行步骤6.9;
步骤6.9:如果当前的字符串不存在后缀,将当前的字符串存入缓冲区,让当前的字符串通过,重新接受下一个字符串,直至网络中没有传输的、由数据流分割得到的字符串。
3.根据权利要求2所述的乱序数据包字符串匹配方法,其特征在于,所述步骤7中的字符串信息包括字符串所属的数据流、字符串在数据流中的序列号、字符串的长度、字符串在确定有限状态自动机中对应的匹配状态、字符串在模式后缀树中对应的查找状态和查找标记。
4.根据权利要求1至3任一所述的乱序数据包字符串匹配方法,其特征在于:所述步骤4中确定有限状态自动机进行字符串匹配的流程具体包括以下步骤:
步骤a:根据接收到的网络中传输的、由数据流分割得到的所有字符串构建确定有限状态自动机;
步骤b:将确定有限状态自动机的匹配列表初始化为空;
步骤c:逐个获取待匹配的字符串的每个字符,当所有字符全部获取完毕,执行步骤d;
步骤d:如果当前字符存在于确定有限状态自动机中,设置匹配状态为真,并将当前字符存储于匹配列表中,执行步骤e;如果当前字符不存在于确定有限状态自动机中,返回匹配状态为假,并输出显示,重新执行步骤b;
步骤e:返回匹配状态和匹配列表。
5.根据权利要求1至3任一所述的乱序数据包字符串匹配方法,其特征在于:所述步骤5中模式后缀树查找字符串具体包括以下步骤:
步骤A:根据接收到的网络中传输的、由数据流分割得到的所有字符串构建模式后缀树;
步骤B:逐个获取待搜索的字符串的每个字符,当所有字符全部获取完毕,执行步骤D;
步骤C:如果当前字符存在于模式后缀树中,设置查找状态,执行步骤D;如果当前字符不存在于模式后缀树中,返回查找状态和查找标记,重新执行步骤B;
步骤D:返回查找状态和查找标记。
6.一种乱序数据包字符串匹配系统,其特征在于:包括第一初始化模块(1)、接收模块(2)、设置获取模块(3)、前缀处理模块(4)、后缀处理模块(5)、匹配模块(6)和存储循环模块(7);
所述第一初始化模块(1),用于初始化确定有限状态自动机和模式后缀树,所述确定有限状态自动机的返回值为匹配状态和匹配列表,所述模式后缀树的返回值为查找状态和查找标记,将匹配状态和查找状态设置为零,将查找标记设置为假;
所述接收模块(2),用于初始化缓冲区,逐个接收在网络中传输的、由数据流分割得到的字符串,每个所述数据流由至少两个字符串有序排列组成;
所述设置获取模块(3),用于分别为每个字符串查找其所属的数据流,并为每个字符串根据其所属的数据流分别设置序列号、前缀和后缀,逐个获取属于同一个数据流的字符串;
所述前缀处理模块(4),用于如果当前的字符串存在前缀,将确定有限状态自动机的当前状态初始化为前缀在确定有限状态自动机中对应的匹配状态,执行后缀处理模块(5);否则,直接执行后缀处理模块(5);
所述后缀处理模块(5),用于如果当前的字符串存在后缀,将所述后缀输入到模式后缀树中,得到查找状态,将查找状态追加到当前的字符串的末尾,得到合并片段,执行匹配模块(6);否则,直接执行匹配模块(6);
所述匹配模块(6),用于将合并片段输入到确定有限状态自动机中,如果匹配成功,则丢弃当前的合并片段,并清除缓冲区中与当前的合并片段对应的数据流的记录,执行接收模块(2),如果未匹配成功,将合并片段作为当前的字符串,执行存储循环模块(7);
所述存储循环模块(7),用于存储当前的字符串的字符串信息,并让当前的字符串通过,执行接收模块(2),直至网络中没有传输的、由数据流分割得到的字符串。
7.根据权利要求6所述的乱序数据包字符串匹配系统,其特征在于,所述匹配模块(6)与存储循环模块(7)之间还包括前缀判断模块(6-1)、前缀输入模块(6-2)、前缀设置模块(6-3)、存储删除模块(6-4)、清零返回模块(6-5)、后缀判断模块(6-6)、后缀设置模块(6-7)、后缀跳转模块(6-8)、第二存储删除模块(6-9)和存入接收模块(6-10);
所述前缀判断模块(6-1),用于如果当前的字符串存在前缀,执行前缀输入模块(6-2);否则,执行清零返回模块(6-5);
所述前缀输入模块(6-2),用于当前缀的查找标记为真,将当前的字符串和前缀在模式后缀树中对应的状态输入模式后缀树,得到查找状态和查找标记,执行第一存储删除模块(6-4);当前缀的查找标记为假,执行前缀设置模块(6-3);
所述前缀设置模块(6-3),用于将模式后缀树的当前状态设置为前缀在模式后缀树中对应的查找状态,执行第一存储删除模块(6-4);
所述第一存储删除模块(6-4),用于存储当前的字符串的序列号和长度,并从缓冲区中删除当前的字符串的前缀的信息,执行后缀判断模块(6-6);
所述清零返回模块(6-5),用于如果当前的字符串不存在前缀,将模式后缀树的当前状态设置为零,然后将当前的字符串输入模式后缀树,返回查找状态和查找标记,执行后缀判断模块(6-6);
所述后缀判断模块(6-6),用于如果当前的字符串存在后缀,执行后缀设置模块(6-7),否则,执行存入接收模块(6-9);
所述后缀设置模块(6-7),用于如果后缀的查找标记为假,将确定有限状态自动机的当前状态设置为后缀在确定有限状态自动机中对应的匹配状态,将后缀在模式后缀树中对应的查找标记设置为假,执行第二存储删除模块(6-8);如果后缀的查找标记为真,执行第二存储删除模块(6-8);
所述第二存储删除模块(6-8),用于存储当前的字符串的长度,并从缓冲区中删除当前的字符串的后缀的信息,执行存入接收模块(6-9);
所述存入接收模块(6-9),用于如果当前的字符串不存在后缀,将当前的字符串存入缓冲区,让当前的字符串通过,重新接受下一个字符串,直至网络中没有传输的、由数据流分割得到的字符串。
8.根据权利要求7所述的乱序数据包字符串匹配系统,其特征在于,所述存储循环模块(7)中的字符串信息包括字符串所属的数据流、字符串在数据流中的序列号、字符串的长度、字符串在确定有限状态自动机中对应的匹配状态、字符串在模式后缀树中对应的查找状态和查找标记。
9.根据权利要求6至8任一所述的乱序数据包字符串匹配系统,其特征在于:所述前缀处理模块(4)具体包括构建子模块、初始化子模块,第一获取子模块、第一设置子模块和返回子模块;
所述第一构建子模块,用于根据接收到的网络中传输的、由数据流分割得到的所有字符串构建确定有限状态自动机;
所述初始化子模块,用于将确定有限状态自动机的匹配列表初始化为空;
所述第一获取子模块,用于逐个获取待匹配的字符串的每个字符,当所有字符全部获取完毕,执行设置子模块;
所述第一设置子模块,用于如果当前字符存在于确定有限状态自动机中,设置匹配状态为真,并将当前字符存储于匹配列表中;如果当前字符不存在于确定有限状态自动机中,返回匹配状态为假,并输出显示,重新执行初始化子模块;
所述返回子模块,用于返回匹配状态和匹配列表。
10.根据权利要求6至8任一所述的乱序数据包字符串匹配系统,其特征在于:所述后缀处理模块(5)具体包括第二构建子模块、第二构建子模块、第二设置子模块和第二返回子模块;
所述第二构建子模块,用于根据接收到的网络中传输的、由数据流分割得到的所有字符串构建模式后缀树;
所述第二构建子模块,用于逐个获取待搜索的字符串的每个字符,当所有字符全部获取完毕,执行第二返回子模块;
所述第二设置子模块,用于如果当前字符存在于模式后缀树中,设置查找状态;如果当前字符不存在于模式后缀树中,返回查找状态和查找标记,重新执行第二构建子模块;
所述第二返回子模块,用于返回查找状态和查找标记。
CN201510121507.7A 2014-11-19 2015-03-19 一种乱序数据包字符串匹配方法及系统 Pending CN104796354A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510121507.7A CN104796354A (zh) 2014-11-19 2015-03-19 一种乱序数据包字符串匹配方法及系统

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201410663767 2014-11-19
CN2014106637672 2014-11-19
CN201510121507.7A CN104796354A (zh) 2014-11-19 2015-03-19 一种乱序数据包字符串匹配方法及系统

Publications (1)

Publication Number Publication Date
CN104796354A true CN104796354A (zh) 2015-07-22

Family

ID=53560873

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510121507.7A Pending CN104796354A (zh) 2014-11-19 2015-03-19 一种乱序数据包字符串匹配方法及系统

Country Status (1)

Country Link
CN (1) CN104796354A (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106934409A (zh) * 2015-12-29 2017-07-07 优信拍(北京)信息科技有限公司 一种数据匹配方法及装置
CN107153647A (zh) * 2016-03-02 2017-09-12 奇简软件(北京)有限公司 进行数据压缩的方法、装置、系统和计算机程序产品
CN108460280A (zh) * 2018-02-09 2018-08-28 北京交通大学 一种网络攻击字符匹配方法及装置
CN108471355A (zh) * 2018-02-28 2018-08-31 哈尔滨工程大学 一种基于海云计算架构的物联网信息互操作方法
CN111027290A (zh) * 2019-11-22 2020-04-17 贝壳技术有限公司 一种数据报告命名方法、装置、电子设备和存储介质
CN111428491A (zh) * 2019-01-09 2020-07-17 阿里巴巴集团控股有限公司 一种字符串流的归并方法、装置及电子设备
CN112506789A (zh) * 2020-12-17 2021-03-16 中国科学院计算技术研究所 一种用于数据包检测的并行模式匹配方法
CN113010882A (zh) * 2021-03-18 2021-06-22 哈尔滨工业大学 一种适用于缓存丢失攻击的自定义位置顺序模式匹配算法
CN113095042A (zh) * 2021-03-23 2021-07-09 广州零端科技有限公司 一种字符串加密方法、系统、装置及存储介质
CN113609344A (zh) * 2021-09-29 2021-11-05 北京泰迪熊移动科技有限公司 字节流状态机的构建方法及装置、电子设备、存储介质
CN116502611A (zh) * 2023-06-28 2023-07-28 深圳魔视智能科技有限公司 标注方法、标注装置、设备及可读存储介质
CN117709298A (zh) * 2024-02-05 2024-03-15 中国电子信息产业集团有限公司第六研究所 一种双字符流的扫描方法、电子设备、存储介质及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070006293A1 (en) * 2005-06-30 2007-01-04 Santosh Balakrishnan Multi-pattern packet content inspection mechanisms employing tagged values
CN103023883A (zh) * 2012-11-26 2013-04-03 清华大学 基于ac自动机和后缀树的字符串匹配方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070006293A1 (en) * 2005-06-30 2007-01-04 Santosh Balakrishnan Multi-pattern packet content inspection mechanisms employing tagged values
CN103023883A (zh) * 2012-11-26 2013-04-03 清华大学 基于ac自动机和后缀树的字符串匹配方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
XINMING CHEN等: "《AC-Suffix-Tree: Buffer Free String Matching on Out-of-Sequence Packets》", 《2011 SEVENTH ACM/IEEE SYMPOSIUM ON ARCHITECTURES FOR NETWORKING AND COMMUNICATIONS SYSTEMS》 *

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106934409A (zh) * 2015-12-29 2017-07-07 优信拍(北京)信息科技有限公司 一种数据匹配方法及装置
CN107153647B (zh) * 2016-03-02 2021-12-07 北京字节跳动网络技术有限公司 进行数据压缩的方法、装置、系统和计算机程序产品
CN107153647A (zh) * 2016-03-02 2017-09-12 奇简软件(北京)有限公司 进行数据压缩的方法、装置、系统和计算机程序产品
CN108460280A (zh) * 2018-02-09 2018-08-28 北京交通大学 一种网络攻击字符匹配方法及装置
CN108460280B (zh) * 2018-02-09 2022-02-01 北京交通大学 一种网络攻击字符匹配方法及装置
CN108471355A (zh) * 2018-02-28 2018-08-31 哈尔滨工程大学 一种基于海云计算架构的物联网信息互操作方法
CN111428491A (zh) * 2019-01-09 2020-07-17 阿里巴巴集团控股有限公司 一种字符串流的归并方法、装置及电子设备
CN111428491B (zh) * 2019-01-09 2024-03-22 阿里巴巴集团控股有限公司 一种字符串流的归并方法、装置及电子设备
CN111027290A (zh) * 2019-11-22 2020-04-17 贝壳技术有限公司 一种数据报告命名方法、装置、电子设备和存储介质
CN112506789A (zh) * 2020-12-17 2021-03-16 中国科学院计算技术研究所 一种用于数据包检测的并行模式匹配方法
CN113010882A (zh) * 2021-03-18 2021-06-22 哈尔滨工业大学 一种适用于缓存丢失攻击的自定义位置顺序模式匹配算法
CN113095042A (zh) * 2021-03-23 2021-07-09 广州零端科技有限公司 一种字符串加密方法、系统、装置及存储介质
CN113095042B (zh) * 2021-03-23 2023-12-19 广州零端科技有限公司 一种字符串加密方法、系统、装置及存储介质
CN113609344A (zh) * 2021-09-29 2021-11-05 北京泰迪熊移动科技有限公司 字节流状态机的构建方法及装置、电子设备、存储介质
CN113609344B (zh) * 2021-09-29 2022-01-14 北京泰迪熊移动科技有限公司 字节流状态机的构建方法及装置、电子设备、存储介质
CN116502611A (zh) * 2023-06-28 2023-07-28 深圳魔视智能科技有限公司 标注方法、标注装置、设备及可读存储介质
CN116502611B (zh) * 2023-06-28 2023-12-05 深圳魔视智能科技有限公司 标注方法、标注装置、设备及可读存储介质
CN117709298A (zh) * 2024-02-05 2024-03-15 中国电子信息产业集团有限公司第六研究所 一种双字符流的扫描方法、电子设备、存储介质及系统
CN117709298B (zh) * 2024-02-05 2024-05-07 中国电子信息产业集团有限公司第六研究所 一种双字符流的扫描方法、电子设备、存储介质及系统

Similar Documents

Publication Publication Date Title
CN104796354A (zh) 一种乱序数据包字符串匹配方法及系统
KR101536880B1 (ko) 앵커링된 패턴들
KR101868720B1 (ko) 정규 표현식들에 대한 컴파일러
US8363654B2 (en) Predictive packet forwarding for a network switch
Le et al. A memory-efficient and modular approach for large-scale string pattern matching
US20080034427A1 (en) Fast and scalable process for regular expression search
CN104754065B (zh) 基于内容中心网络的动态分布Web资源管理方法及系统
US20030110208A1 (en) Processing data across packet boundaries
DE69837272D1 (de) Mechanismus zum ersetzen eines paketfelds in einem mehrschicht-vermittlungsnetzelement
CN107508721B (zh) 一种基于元数据的数据采集方法
CN101296116A (zh) 使用非确定性有限自动机的并行模式匹配
WO2007109445A1 (en) Monitoring regular expressions on out-of-order streams
CN1972240A (zh) 快速包过滤处理方法及其装置
CN206498428U (zh) 基于tcp重组的审计系统
CN103457700A (zh) Ndn/ccn网络中的数据包内容名称编码压缩方法
CN101321162B (zh) 基于tcam序偶的tcp序列号检查硬件实现方法
Chen et al. Ac-suffix-tree: Buffer free string matching on out-of-sequence packets
US10581761B2 (en) Segmentation and reassembly of network packets for switched fabric networks
CN106850547A (zh) 一种基于http协议的数据还原方法及系统
CN101252444A (zh) 报文特征的检测方法及装置
CN110535697A (zh) 一种均衡区块链跨域广播网络负载的方法
US20230275979A1 (en) Packet filtering using binary search trees
Borokhovich et al. The show must go on: Fundamental data plane connectivity services for dependable SDNs
Yang et al. High performance dictionary-based string matching for deep packet inspection
Antichi et al. Counting bloom filters for pattern matching and anti-evasion at the wire speed

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
EXSB Decision made by sipo to initiate substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20150722