本发明涉及文本搜索技术领域,尤其涉及一种网络包检测方法及装置。
背景技术:
在网络包检测技术领域中,需要对网络包中的字符进行搜索匹配,以达到对网络包的安全判断。一般采用正则表达式匹配,先将正则表达式编译为nfa(非确定有穷自动机)。然后,如果内存空间和执行时间允许,再将nfa转换为dfa(确定有穷自动机)。最后,根据匹配模式(“子串搜索”和“全文匹配”),执行匹配任务。但目前进行字符串匹配处理时,匹配速度较慢,无法实现快速完成对网络包的安全检测。
技术实现要素:
针对现有技术存在的问题,本发明实施例提供一种网络包检测方法及装置。
第一方面,本发明实施例提供一种网络包检测方法,包括:
获取待检测网络包;
将所述待检测网络包输入预先构建的更新后nfa状态关系网进行检测获得检测结果,其中所述更新后nfa状态关系网为对原始nfa状态关系网进行跳转关系更新处理后得到的。
进一步地,所述更新后nfa状态关系网的获取步骤包括:
获取用于进行检测的多个正则表达式,将多个正则表达式进行编译获得对应的nfa状态关系式;
根据所述nfa状态关系式生成原始nfa状态关系网;
对所述原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网。
进一步地,对所述原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网,包括:
获取各个nfa状态关系式的头部状态信息和尾部状态信息,所述头部状态信息和尾部状态信息均包括输入边列表和输出边列表;
根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网。
进一步地,所述根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网,包括:
根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行连接构造更新,和/或,或构造更新,和/或,闭包构造更新,获得更新后的nfa状态关系网,其中所述连接构造更新为根据各个nfa状态关系式的头部状态信息和尾部状态信息对各个nfa状态关系式间的连接操作进行的优化;所述或构造更新为根据各个nfa状态关系式的头部状态信息和尾部状态信息对各个nfa状态关系式间的或操作进行的优化;所述闭包构造更新为根据各个nfa状态关系式的头部状态信息和尾部状态信息对各个nfa状态关系式间的闭包操作进行的优化。
进一步地,根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行连接构造更新,包括:
从各个nfa状态关系式确定相邻的两个nfa状态关系式,配置为当前nfa状态关系式和下一个nfa状态关系式;
确定当前nfa状态关系式为非空,若下一个nfa状态关系式的头部状态信息不存在输入边,则将当前nfa状态关系式的尾部状态信息与下一个nfa状态关系式的头部状态信息合并;
若当前nfa状态关系式的尾部状态信息不存在输出边,则将下一个nfa状态关系式的头部状态信息与当前nfa状态关系式的尾部状态信息合并;
若下一个nfa状态关系式的头部状态信息存在输入边,且当前nfa状态关系式的尾部状态信息存在输出边,则当前nfa状态关系式的尾部状态信息添加到下一个nfa状态关系式的头部状态信息的空跳转。
进一步地,根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行或构造更新,包括:
从各个nfa状态关系式确定相邻的两个nfa状态关系式,配置为当前nfa状态关系式和下一个nfa状态关系式;
若当前nfa状态关系式的头部状态信息不存在输入边,且下一个nfa状态关系式的头部状态信息不存在输入边,则将当前nfa状态关系式的头部状态信息与下一个nfa状态关系式的头部状态信息合并;
若当前nfa状态关系式的头部状态信息不存在输入边,且下一个nfa状态关系式的头部状态信息存在输入边,则当前nfa状态关系式的头部状态信息添加到下一个nfa状态关系式的头部状态信息的空跳转;
若当前nfa状态关系式的头部状态信息存在输入边,且下一个nfa状态关系式的头部状态信息不存在输入边,则下一个nfa状态关系式的头部状态信息添加到当前nfa状态关系式的头部状态信息的空跳转;
若当前nfa状态关系式的头部状态信息存在输入边,下一个nfa状态关系式的头部状态信息存在输入边,且当前nfa状态关系式的头部状态信息能够与下一个nfa状态关系式的头部状态信息合并,则将当前nfa状态关系式的头部状态信息与下一个nfa状态关系式的头部状态信息合并;
若当前nfa状态关系式的头部状态信息存在输入边,下一个nfa状态关系式的头部状态信息存在输入边,且当前nfa状态关系式的头部状态信息不能与下一个nfa状态关系式的头部状态信息合并,则先为当前nfa状态关系式创建新的头部状态信息,然后为新的头部状态信息添加到前一个nfa状态关系式的头部状信息的空跳转,再为新的头部状态信息添加到下一个nfa状态关系式的头部状态信息的空跳转;
若当前nfa状态关系式的尾部状态信息不存在输出边,且下一个nfa状态关系式的尾部状态不存在输出边,则将当前nfa状态关系式的尾部状态信息和下一个nfa状态关系式的尾部状态信息合并;
若当前nfa状态关系式的尾部状态信息不存在输出边,且下一个nfa状态关系式的尾部状态存在输出边,则将下一个nfa状态关系式的尾部状态信息添加到当前nfa状态关系式的尾部状态信息的空跳转;
若当前nfa状态关系式的尾部状态信息存在输出边,且下一个nfa状态关系式的尾部状态不存在输出边,则将当前nfa状态关系式的尾部状态信息添加到下一个nfa状态关系式的尾部状态信息的空跳转;
若当前nfa状态关系式的尾部状态信息存在输出边,下一个nfa状态关系式的尾部状态不存在输出边,且当前nfa状态关系式的尾部状态信息能够与下一个nfa状态关系式的尾部状态信息合并,则将当前nfa状态关系式的尾部状态信息和下一个nfa状态关系式的尾部状态信息合并;
若当前nfa状态关系式的尾部状态信息存在输出边,下一个nfa状态关系式的尾部状态不存在输出边,且当前nfa状态关系式的尾部状态信息不能与下一个nfa状态关系式的尾部状态信息合并,则先为当前nfa状态关系式创建新的尾部状态信息,然后为当前nfa状态关系式的尾部状态信息添加到新的尾部状态信息的空跳转,再为下一个nfa状态关系式添加到新的尾部状态信息的空跳转。
进一步地,根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行闭包构造更新,包括:
从各个nfa状态关系式确定相邻的两个nfa状态关系式,配置为当前nfa状态关系式和下一个nfa状态关系式;
确定当前nfa状态关系式和下一个nfa状态关系式存在闭包状态,则将当前nfa状态关系式的头部状态信息和下一个nfa状态关系式的尾部状态信息合并。
进一步地,还包括:将更新后的nfa状态关系网编译成dfa状态关系网,使所述dfa状态关系网对所述待检测网络包进行检测获得检测结果。
第二方面,本发明实施例提供一种网络包检测装置,包括:
获取模块,用于获取待检测网络包;
检测模块,用于将所述待检测网络包输入预先构建的更新后nfa状态关系网进行检测获得检测结果,其中所述更新后nfa状态关系网为对原始nfa状态关系网进行跳转关系更新处理后得到的。
进一步地,还包括更新模块,用于:
获取用于进行检测的多个正则表达式,将多个正则表达式进行编译获得对应的nfa状态关系式;
根据所述nfa状态关系式生成原始nfa状态关系网;
对所述原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网。
进一步地,所述更新模块在对所述原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网的过程中,具体用于:
获取各个nfa状态关系式的头部状态信息和尾部状态信息,所述头部状态信息和尾部状态信息均包括输入边列表和输出边列表;
根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述网络包检测方法的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述网络包检测方法的步骤。
第五方面,本发明实施例提供一种计算机程序产品,所述计算机程序产品包括计算机可执行指令,所述指令在被执行时用于实现如上述网络包检测方法的步骤。
本发明实施例提供的一种网络包检测方法及装置,通过对nfa状态关系网进行跳转关系更新处理,从而减少nfa状态关系网内的跳转状态,提高内存空间利用率,使得输入的网络包的字符的有效跳转状态减少,加快对网络包的检测匹配速度,达到及时对网络包进行安全检测的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明网络包检测方法实施例流程图;
图2为本发明网络包检测方法另一实施例流程图;
图3为本发明网络包检测方法再一实施例流程图;
图4为本发明网络包检测方法又一实施例流程图;
图5为本发明连接构造更新之前的nfa状态关系的示意图;
图6为本发明连接构造更新之后的nfa状态关系的示意图;
图7为本发明或构造更新之前的nfa状态关系的示意图;
图8为本发明或构造更新之后的nfa状态关系的示意图;
图9为本发明闭包构造更新之前的nfa状态关系的示意图;
图10为本发明闭包构造更新之后的nfa状态关系的示意图;
图11为本发明网络包检测装置实施例结构图;
图12为本发明电子设备实施例结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1示出了本发明一实施例提供的一种网络包检测方法的流程示意图,参见图1,该方法包括:
s11、获取待检测网络包;
s12、将所述待检测网络包输入预先构建的更新后nfa状态关系网进行检测获得检测结果,其中所述更新后nfa状态关系网为对原始nfa状态关系网进行跳转关系更新处理后得到的。
针对步骤s11和步骤s12,需要说明的是,在本发明实施例中,待检测网络包为需要进行安全的检测的网络包。因此,需要选获取到该待检测网络包。
在正则表达式对网络包进行检测匹配过程中,需要将正则表达式编译为nfa(非确定有穷自动机)状态关系式和dfa(确定有穷自动机)状态关系式,nfa和dfa分别对网络包进行字符串匹配过程。
在对网络包进行检测匹配过程中,有时需要涉及多个正则表达式对网络包的匹配,为此,需要将多个正则表达式对应的nfa状态关系式建立nfa状态关系网。此时建立的nfa状态关系网为原始nfa状态关系网。
每个nfa状态关系式中存在多个状态,每个状态之间存在跳转或空跳转。因nfa状态关系式之间或自身存在空跳转的情况,使得输入的网络包的字符的有效跳转状态增多,减慢对网络包的检测匹配速度。
为此,需对原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网。
使更新后的nfa状态关系网对待检测网络包进行检测获得检测结果,根据检测结果确定所述待检测网络包的安全类型。
本发明实施例提供的网络包检测方法,通过对nfa状态关系网进行跳转关系更新处理,从而减少nfa状态关系网内的跳转状态,提高内存空间利用率,使得输入的网络包的字符的有效跳转状态减少,加快对网络包的检测匹配速度,达到及时对网络包进行安全检测的目的。
图2示出了本发明一实施例提供的一种网络包检测方法的流程示意图,参见图2,该方法包括:
s21、获取待检测网络包和用于进行检测的多个正则表达式;
s22、将多个正则表达式进行编译获得对应的nfa状态关系式,根据所述nfa状态关系式生成原始nfa状态关系网,对所述原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网;
s23、将所述待检测网络包输入预先构建的更新后nfa状态关系网进行检测获得检测结果。
针对步骤s21-步骤s23,需要说明的是,在本发明实施例中,在正则表达式对网络包进行检测匹配过程中,需要将正则表达式编译为nfa(非确定有穷自动机)状态关系式和dfa(确定有穷自动机)状态关系式,nfa和dfa分别对网络包进行字符串匹配过程。
在对网络包进行检测匹配过程中,有时需要涉及多个正则表达式对网络包的匹配,为此,需要将多个正则表达式对应的nfa状态关系式建立nfa状态关系网。此时建立的nfa状态关系网为原始nfa状态关系网。
每个nfa状态关系式中存在多个状态,每个状态之间存在跳转或空跳转。因nfa状态关系式之间或自身存在空跳转的情况,使得输入的网络包的字符的有效跳转状态增多,减慢对网络包的检测匹配速度。
为此,需对原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网。
使更新后的nfa状态关系网对待检测网络包进行检测获得检测结果,根据检测结果确定所述待检测网络包的安全类型。
本发明实施例提供的网络包检测方法,通过对nfa状态关系网进行跳转关系更新处理,从而减少nfa状态关系网内的跳转状态,提高内存空间利用率,使得输入的网络包的字符的有效跳转状态减少,加快对网络包的检测匹配速度,达到及时对网络包进行安全检测的目的。
图3示出了本发明一实施例提供的一种网络包检测方法的流程示意图,参见图3,该方法包括:
s31、获取待检测网络包和用于进行检测的多个正则表达式;
s32、将多个正则表达式进行编译获得对应的nfa状态关系式,根据所述nfa状态关系式生成原始nfa状态关系网;
s33、获取各个nfa状态关系式的头部状态信息和尾部状态信息,所述头部状态信息和尾部状态信息均包括输入边列表和输出边列表,根据各个nfa状态关系式的头部状态信息和尾部状态信息对原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网;
s34、将所述待检测网络包输入预先构建的更新后nfa状态关系网进行检测获得检测结果。
针对步骤s32-步骤s33,需要说明的是,在本发明实施例中,每个nfa状态关系式中存在多个状态,每个状态之间存在跳转或空跳转。跳转和空跳转均具有指向性,即一个状态到另一个状态的跳转。为此,每一个跳转在状态关系式中可代表输入边或输出边。因nfa状态关系式之间或自身存在空跳转的情况,使得输入的网络包的字符的有效跳转状态增多,减慢对网络包的检测匹配速度。
对nfa状态关系式之间或自身存在的空跳转进行更新,需要结合各个nfa状态关系式的头部状态信息和尾部状态信息。在这里,头部状态信息和尾部状态信息均包括输入边列表和输出边列表。
为此,根据各个nfa状态关系式的头部状态信息和尾部状态信息对原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网。
使更新后的nfa状态关系网对待检测网络包进行检测获得检测结果,根据检测结果确定所述待检测网络包的安全类型。
针对步骤s31和步骤s34,这些步骤与上述实施例步骤s21和s23在原理上相同,在此不再赘述。
本发明实施例提供的网络包检测方法,通过对nfa状态关系网进行跳转关系更新处理,从而减少nfa状态关系网内的跳转状态,提高内存空间利用率,使得输入的网络包的字符的有效跳转状态减少,加快对网络包的检测匹配速度,达到及时对网络包进行安全检测的目的。
图4示出了本发明一实施例提供的一种网络包检测方法的流程示意图,参见图4,该方法包括:
s41、获取待检测网络包和用于进行检测的多个正则表达式;
s42、将多个正则表达式进行编译获得对应的nfa状态关系式,根据所述nfa状态关系式生成原始nfa状态关系网;
s43、获取各个nfa状态关系式的头部状态信息和尾部状态信息,所述头部状态信息和尾部状态信息均包括输入边列表和输出边列表,根据各个nfa状态关系式的头部状态信息和尾部状态信息对原始nfa状态关系网进行连接构造更新、或构造更新和闭包构造更新获得更新后的nfa状态关系网;
s44、将所述待检测网络包输入预先构建的更新后nfa状态关系网进行检测获得检测结果。
针对步骤s42和步骤s43,每个nfa状态关系式中存在多个状态,每个状态之间存在跳转或空跳转。跳转和空跳转均具有指向性,即一个状态到另一个状态的跳转。为此,每一个跳转在状态关系式中可代表输入边或输出边。因nfa状态关系式之间或自身存在空跳转的情况,使得输入的网络包的字符的有效跳转状态增多,减慢对网络包的检测匹配速度。
对nfa状态关系式之间或自身存在的空跳转进行更新,需要结合各个nfa状态关系式的头部状态信息和尾部状态信息。在这里,头部状态信息和尾部状态信息均包括输入边列表和输出边列表。
在nfa状态关系网中存在三个基本构造关系-连接构造、或构造和闭包构造,其基于的是正则表达式中的三大基本算子-连接、或和闭包。
在本发明实施例中,需要根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行连接构造更新,和/或,或构造更新,和/或,闭包构造更新,获得更新后的nfa状态关系网,其中连接构造更新为根据各个nfa状态关系式的头部状态信息和尾部状态信息对各个nfa状态关系式间的连接操作进行的优化;所述或构造更新为根据各个nfa状态关系式的头部状态信息和尾部状态信息对各个nfa状态关系式间的或操作进行的优化;所述闭包构造更新为根据各个nfa状态关系式的头部状态信息和尾部状态信息对各个nfa状态关系式间的闭包操作进行的优化。
下面对进行连接构造更新、或构造更新和闭包构造更新进行解释说明:
a)连接构造更新,用于更新“当前自动机nfa”和“下一个自动机nfa”的连接操作。
如果“当前自动机nfa”为空,则用“下一个自动机nfa”替换“当前自动机nfa”。例如:a。
如果“当前自动机nfa”非空,并且“下一个自动机nfa的头部状态”不存在输入边,则将“当前自动机nfa的尾部状态”与“下一个自动机nfa的头部状态”合并。例如:a*b。
如果“当前自动机nfa”非空,并且“当前自动机nfa的尾部状态”不存在输出边,则将“下一个自动机nfa的头部状态”与“当前自动机nfa的尾部状态”合并。例如:ab*。
如果“当前自动机nfa”非空,并且“下一个自动机nfa的头部状态nfa”存在输入边,并且“当前自动机nfa的尾部状态”存在输出边,则“当前自动机nfa的尾部状态”添加到“下一个自动机nfa的头部状态”的空跳转。例如:a*b*。
连接构造更新效果参照附图5和附图6。附图5为连接构造更新之前的nfa状态关系网的示意图,附图6为连接构造更新之后的nfa状态关系网的示意图。
从图5可以看出,nfa状态关系网为“a.*b”,该状态关系网中包含三个状态关系式:a、.*和b。在图5中,0-4是nfa状态关系网中的各种状态,从图6可以看出,0-3是nfa状态关系网中的各种状态。圆圈中的数字是状态的编号,根据nfa状态关系网的不同确定状态的编号。箭头代表跳转,即跳转边。图5中的虚线箭头代表空跳转。0代表头部状态,图5中的3和图6中的2代表尾部状态,方框中[1]的代表正则表达式的编号。括号内的abcd代表正则表达式中的字符,abcd之前的数字对应于字符的编号。00-ff(-)代表区间跳转边,即前缀“.*”。
b)或构造更新,用于更新“当前自动机nfa”和“下一个自动机nfa”的或构造操作。
1、头部状态更新
如果“当前自动机nfa的头部状态”不存在输入边,并且“下一个自动机nfa的头部状态”不存在输入边,则将“当前自动机nfa的头部状态”与“下一个自动机nfa的头部状态”合并。例如:a|b。
如果“当前自动机nfa的头部状态”不存在输入边,并且“下一个自动机nfa的头部状态”存在输入边,则“当前自动机nfa的头部状态”添加到“下一个自动机nfa的头部状态”的空跳转。例如:a|b*。
如果“当前自动机nfa的头部状态”存在输入边,并且“下一个自动机nfa的头部状态”不存在输入边,则“下一个自动机nfa的头部状态”添加到“当前自动机nfa的头部状态”的空跳转。例如:a*|b。
如果“当前自动机nfa的头部状态”存在输入边,并且“下一个自动机nfa的头部状态”存在输入边,并且“当前自动机nfa的头部状态”能够与“下一个自动机nfa的头部状态”合并,则将“当前自动机nfa的头部状态”与“下一个自动机nfa的头部状态”合并。例如:.*a|.*b。
如果“当前自动机nfa的头部状态”存在输入边,并且“下一个自动机nfa的头部状态”存在输入边,并且“当前自动机nfa的头部状态”不能与“下一个自动机nfa的头部状态”合并,则先为“当前自动机nfa”创建“新的头部状态”,然后为“新的头部状态”添加到“前自动机nfa的头部状态”的空跳转,然后为“新的头部状态”添加到“下一个自动机nfa的头部状态”的空跳转。例如:a*|b*。
2、尾部状态更新
如果“当前自动机nfa的尾部状态”不存在输出边,并且“下一个自动机nfa的尾部状态”不存在输出边,则将“当前自动机nfa的尾部状态”与“下一个自动机nfa的尾部状态”合并。例如:a|b。
如果“当前自动机nfa的尾部状态”不存在输出边,并且“下一个自动机nfa的尾部状态”存在输出边,则“下一个自动机nfa的尾部状态”添加到“当前自动机nfa的尾部状态”的空跳转。例如:a|b*。
如果“当前自动机nfa的尾部状态”存在输出边,并且“下一个自动机nfa的尾部状态”不存在输出边,则“当前自动机nfa的尾部状态”添加到“下一个自动机nfa的尾部状态”的空跳转。例如:a*|b。
如果“当前自动机nfa的尾部状态”存在输出边,并且“下一个自动机nfa的尾部状态”存在输出边,并且“当前自动机nfa的尾部状态”能够与“下一个自动机nfa的尾部状态”合并,则将“当前自动机nfa的尾部状态”与“下一个自动机nfa的尾部状态”合并。例如:a.*|b.*。
如果“当前自动机nfa的尾部状态”存在输出边,并且“下一个自动机nfa的尾部状态”存在输出边,并且“当前自动机nfa的尾部状态”不能与“下一个自动机nfa的尾部状态”合并,则先为“当前自动机nfa”创建“新的尾部状态”,然后为“当前自动机nfa的尾部状态”添加到“新的头部状态”的空跳转,然后为“下一个自动机nfa的尾部状态”添加到“新的头部状态”的空跳转。例如:a*|b*。
或构造更新效果参照附图7和附图8。附图7为或构造更新之前的nfa状态关系网的示意图,附图8为或构造更新之后的nfa状态关系网的示意图。
c)闭包构造更新,用于更新“当前自动机nfa”的闭包操作。
将“当前自动机nfa的头部状态”与“当前自动机nfa的尾部状态”合并。例如:(ab)*。
闭包构造更新效果参照附图9和附图10。附图9为闭包构造更新之前的nfa状态关系网的示意图,附图10为闭包构造更新之后的nfa状态关系网的示意图。
针对步骤s41和步骤s44,这些步骤与上述实施例步骤s31和s34在原理上相同,在此不再赘述。
本发明实施例提供的网络包检测方法,通过对nfa状态关系网进行跳转关系更新处理,从而减少nfa状态关系网内的跳转状态,提高内存空间利用率,使得输入的网络包的字符的有效跳转状态减少,加快对网络包的检测匹配速度,达到及时对网络包进行安全检测的目的。
在上述实施例的进一步实施例中,将更新后的nfa状态关系网编译成dfa状态关系网,使所述dfa状态关系网对所述待检测网络包进行检测获得检测结果,根据所述检测结果确定所述待检测网络包的安全类型。减少nfa状态关系网内的跳转状态,使nfa编译到dfa的执行时间减少,增加了dfa的使用效率。
图11示出了本发明一实施例提供的一种网络包检测装置,包括获取模块111和检测模块112,其中:
获取模块111,用于获取待检测网络包;
检测模块112,用于将所述待检测网络包输入预先构建的更新后nfa状态关系网进行检测获得检测结果,其中所述更新后nfa状态关系网为对原始nfa状态关系网进行跳转关系更新处理后得到的。
在上述实施例更进一步的实施例中,还包括更新模块,用于:
获取用于进行检测的多个正则表达式,将多个正则表达式进行编译获得对应的nfa状态关系式;
根据所述nfa状态关系式生成原始nfa状态关系网;
对所述原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网。
在上述实施例更进一步的实施例中,所述更新模块在对所述原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网的过程中,具体用于:
获取各个nfa状态关系式的头部状态信息和尾部状态信息,所述头部状态信息和尾部状态信息均包括输入边列表和输出边列表;
根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网。
在上述实施例更进一步的实施例中,所述更新模块在根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网的过程中,具体用于:
根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行连接构造更新,和/或,或构造更新,和/或,闭包构造更新,获得更新后的nfa状态关系网。
在上述实施例更进一步的实施例中,所述更新模块在根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行连接构造更新的过程中,具体用于:
从各个nfa状态关系式确定相邻的两个nfa状态关系式,配置为当前nfa状态关系式和下一个nfa状态关系式;
确定当前nfa状态关系式为非空,若下一个nfa状态关系式的头部状态信息不存在输入边,则将当前nfa状态关系式的尾部状态信息与下一个nfa状态关系式的头部状态信息合并;
若当前nfa状态关系式的尾部状态信息不存在输出边,则将下一个nfa状态关系式的头部状态信息与当前nfa状态关系式的尾部状态信息合并;
若下一个nfa状态关系式的头部状态信息存在输入边,且当前nfa状态关系式的尾部状态信息存在输出边,则当前nfa状态关系式的尾部状态信息添加到下一个nfa状态关系式的头部状态信息的空跳转。
在上述实施例更进一步的实施例中,所述更新模块在根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行或构造更新的过程中,具体用于:
从各个nfa状态关系式确定相邻的两个nfa状态关系式,配置为当前nfa状态关系式和下一个nfa状态关系式;
若当前nfa状态关系式的头部状态信息不存在输入边,且下一个nfa状态关系式的头部状态信息不存在输入边,则将当前nfa状态关系式的头部状态信息与下一个nfa状态关系式的头部状态信息合并;
若当前nfa状态关系式的头部状态信息不存在输入边,且下一个nfa状态关系式的头部状态信息存在输入边,则当前nfa状态关系式的头部状态信息添加到下一个nfa状态关系式的头部状态信息的空跳转;
若当前nfa状态关系式的头部状态信息存在输入边,且下一个nfa状态关系式的头部状态信息不存在输入边,则下一个nfa状态关系式的头部状态信息添加到当前nfa状态关系式的头部状态信息的空跳转;
若当前nfa状态关系式的头部状态信息存在输入边,下一个nfa状态关系式的头部状态信息存在输入边,且当前nfa状态关系式的头部状态信息能够与下一个nfa状态关系式的头部状态信息合并,则将当前nfa状态关系式的头部状态信息与下一个nfa状态关系式的头部状态信息合并;
若当前nfa状态关系式的头部状态信息存在输入边,下一个nfa状态关系式的头部状态信息存在输入边,且当前nfa状态关系式的头部状态信息不能与下一个nfa状态关系式的头部状态信息合并,则先为当前nfa状态关系式创建新的头部状态信息,然后为新的头部状态信息添加到前一个nfa状态关系式的头部状信息的空跳转,再为新的头部状态信息添加到下一个nfa状态关系式的头部状态信息的空跳转;
若当前nfa状态关系式的尾部状态信息不存在输出边,且下一个nfa状态关系式的尾部状态不存在输出边,则将当前nfa状态关系式的尾部状态信息和下一个nfa状态关系式的尾部状态信息合并;
若当前nfa状态关系式的尾部状态信息不存在输出边,且下一个nfa状态关系式的尾部状态存在输出边,则将下一个nfa状态关系式的尾部状态信息添加到当前nfa状态关系式的尾部状态信息的空跳转;
若当前nfa状态关系式的尾部状态信息存在输出边,且下一个nfa状态关系式的尾部状态不存在输出边,则将当前nfa状态关系式的尾部状态信息添加到下一个nfa状态关系式的尾部状态信息的空跳转;
若当前nfa状态关系式的尾部状态信息存在输出边,下一个nfa状态关系式的尾部状态不存在输出边,且当前nfa状态关系式的尾部状态信息能够与下一个nfa状态关系式的尾部状态信息合并,则将当前nfa状态关系式的尾部状态信息和下一个nfa状态关系式的尾部状态信息合并;
若当前nfa状态关系式的尾部状态信息存在输出边,下一个nfa状态关系式的尾部状态不存在输出边,且当前nfa状态关系式的尾部状态信息不能与下一个nfa状态关系式的尾部状态信息合并,则先为当前nfa状态关系式创建新的尾部状态信息,然后为当前nfa状态关系式的尾部状态信息添加到新的尾部状态信息的空跳转,再为下一个nfa状态关系式添加到新的尾部状态信息的空跳转。
在上述实施例更进一步的实施例中,所述更新模块在根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行闭包构造更新的过程中,具体用于:
从各个nfa状态关系式确定相邻的两个nfa状态关系式,配置为当前nfa状态关系式和下一个nfa状态关系式;
确定当前nfa状态关系式和下一个nfa状态关系式存在闭包状态,则将当前nfa状态关系式的头部状态信息和下一个nfa状态关系式的尾部状态信息合并。
在上述实施例更进一步的实施例中,所述检测模块还用于:将更新后的nfa状态关系网编译成dfa状态关系网,使所述dfa状态关系网对所述待检测网络包进行检测获得检测结果。
由于本发明实施例所述装置与上述实施例所述方法的原理相同,对于更加详细的解释内容在此不再赘述。
需要说明的是,本发明实施例中可以通过硬件处理器(hardwareprocessor)来实现相关功能模块。
本发明实施例提供的网络包检测装置,通过对nfa状态关系网进行跳转关系更新处理,从而减少nfa状态关系网内的跳转状态,提高内存空间利用率,使得输入的网络包的字符的有效跳转状态减少,加快对网络包的检测匹配速度,达到及时对网络包进行安全检测的目的。
图12示例了一种电子设备的实体结构示意图,如图12所示,该电子设备可以包括:处理器(processor)121、通信接口(communicationsinterface)122、存储器(memory)123和通信总线124,其中,处理器121,通信接口122,存储器123通过通信总线124完成相互间的通信。处理器121可以调用存储器123中的逻辑指令,以执行如下方法:获取待检测网络包;将所述待检测网络包输入预先构建的更新后nfa状态关系网进行检测获得检测结果,其中所述更新后nfa状态关系网为对原始nfa状态关系网进行跳转关系更新处理后得到的。
此外,上述的存储器123中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的方法,例如包括:获取待检测网络包;将所述待检测网络包输入预先构建的更新后nfa状态关系网进行检测获得检测结果,其中所述更新后nfa状态关系网为对原始nfa状态关系网进行跳转关系更新处理后得到的。
本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机可执行指令,所述指令在被执行时实现以执行上述各实施例提供的方法,例如包括:获取待检测网络包;将所述待检测网络包输入预先构建的更新后nfa状态关系网进行检测获得检测结果,其中所述更新后nfa状态关系网为对原始nfa状态关系网进行跳转关系更新处理后得到的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
1.一种网络包检测方法,其特征在于,包括:
获取待检测网络包;
将所述待检测网络包输入预先构建的更新后nfa状态关系网进行检测获得检测结果,其中所述更新后nfa状态关系网为对原始nfa状态关系网进行跳转关系更新处理后得到的。
2.根据权利要求1所述的网络包检测方法,其特征在于,所述更新后nfa状态关系网的获取步骤包括:
获取用于进行检测的多个正则表达式,将多个正则表达式进行编译获得对应的nfa状态关系式;
根据所述nfa状态关系式生成原始nfa状态关系网;
对所述原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网。
3.根据权利要求1所述的网络包检测方法,其特征在于,对所述原始nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网,包括:
获取各个nfa状态关系式的头部状态信息和尾部状态信息,所述头部状态信息和尾部状态信息均包括输入边列表和输出边列表;
根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网。
4.根据权利要求3所述的网络包检测方法,其特征在于,所述根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行跳转关系更新处理,获得更新后的nfa状态关系网,包括:
根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行连接构造更新,和/或,或构造更新,和/或,闭包构造更新,获得更新后的nfa状态关系网,其中所述连接构造更新为根据各个nfa状态关系式的头部状态信息和尾部状态信息对各个nfa状态关系式间的连接操作进行的优化;所述或构造更新为根据各个nfa状态关系式的头部状态信息和尾部状态信息对各个nfa状态关系式间的或操作进行的优化;所述闭包构造更新为根据各个nfa状态关系式的头部状态信息和尾部状态信息对各个nfa状态关系式间的闭包操作进行的优化。
5.根据权利要求4所述的网络包检测方法,其特征在于,根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行连接构造更新,包括:
从各个nfa状态关系式确定相邻的两个nfa状态关系式,配置为当前nfa状态关系式和下一个nfa状态关系式;
确定当前nfa状态关系式为非空,若下一个nfa状态关系式的头部状态信息不存在输入边,则将当前nfa状态关系式的尾部状态信息与下一个nfa状态关系式的头部状态信息合并;
若当前nfa状态关系式的尾部状态信息不存在输出边,则将下一个nfa状态关系式的头部状态信息与当前nfa状态关系式的尾部状态信息合并;
若下一个nfa状态关系式的头部状态信息存在输入边,且当前nfa状态关系式的尾部状态信息存在输出边,则当前nfa状态关系式的尾部状态信息添加到下一个nfa状态关系式的头部状态信息的空跳转。
6.根据权利要求5所述的网络包检测方法,其特征在于,根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行或构造更新,包括:
从各个nfa状态关系式确定相邻的两个nfa状态关系式,配置为当前nfa状态关系式和下一个nfa状态关系式;
若当前nfa状态关系式的头部状态信息不存在输入边,且下一个nfa状态关系式的头部状态信息不存在输入边,则将当前nfa状态关系式的头部状态信息与下一个nfa状态关系式的头部状态信息合并;
若当前nfa状态关系式的头部状态信息不存在输入边,且下一个nfa状态关系式的头部状态信息存在输入边,则当前nfa状态关系式的头部状态信息添加到下一个nfa状态关系式的头部状态信息的空跳转;
若当前nfa状态关系式的头部状态信息存在输入边,且下一个nfa状态关系式的头部状态信息不存在输入边,则下一个nfa状态关系式的头部状态信息添加到当前nfa状态关系式的头部状态信息的空跳转;
若当前nfa状态关系式的头部状态信息存在输入边,下一个nfa状态关系式的头部状态信息存在输入边,且当前nfa状态关系式的头部状态信息能够与下一个nfa状态关系式的头部状态信息合并,则将当前nfa状态关系式的头部状态信息与下一个nfa状态关系式的头部状态信息合并;
若当前nfa状态关系式的头部状态信息存在输入边,下一个nfa状态关系式的头部状态信息存在输入边,且当前nfa状态关系式的头部状态信息不能与下一个nfa状态关系式的头部状态信息合并,则先为当前nfa状态关系式创建新的头部状态信息,然后为新的头部状态信息添加到前一个nfa状态关系式的头部状信息的空跳转,再为新的头部状态信息添加到下一个nfa状态关系式的头部状态信息的空跳转;
若当前nfa状态关系式的尾部状态信息不存在输出边,且下一个nfa状态关系式的尾部状态不存在输出边,则将当前nfa状态关系式的尾部状态信息和下一个nfa状态关系式的尾部状态信息合并;
若当前nfa状态关系式的尾部状态信息不存在输出边,且下一个nfa状态关系式的尾部状态存在输出边,则将下一个nfa状态关系式的尾部状态信息添加到当前nfa状态关系式的尾部状态信息的空跳转;
若当前nfa状态关系式的尾部状态信息存在输出边,且下一个nfa状态关系式的尾部状态不存在输出边,则将当前nfa状态关系式的尾部状态信息添加到下一个nfa状态关系式的尾部状态信息的空跳转;
若当前nfa状态关系式的尾部状态信息存在输出边,下一个nfa状态关系式的尾部状态不存在输出边,且当前nfa状态关系式的尾部状态信息能够与下一个nfa状态关系式的尾部状态信息合并,则将当前nfa状态关系式的尾部状态信息和下一个nfa状态关系式的尾部状态信息合并;
若当前nfa状态关系式的尾部状态信息存在输出边,下一个nfa状态关系式的尾部状态不存在输出边,且当前nfa状态关系式的尾部状态信息不能与下一个nfa状态关系式的尾部状态信息合并,则先为当前nfa状态关系式创建新的尾部状态信息,然后为当前nfa状态关系式的尾部状态信息添加到新的尾部状态信息的空跳转,再为下一个nfa状态关系式添加到新的尾部状态信息的空跳转。
7.根据权利要求6所述的网络包检测方法,其特征在于,根据各个nfa状态关系式的头部状态信息和尾部状态信息对nfa状态关系网进行闭包构造更新,包括:
从各个nfa状态关系式确定相邻的两个nfa状态关系式,配置为当前nfa状态关系式和下一个nfa状态关系式;
确定当前nfa状态关系式和下一个nfa状态关系式存在闭包状态,则将当前nfa状态关系式的头部状态信息和下一个nfa状态关系式的尾部状态信息合并。
8.根据权利要求1所述的网络包检测方法,其特征在于,还包括:将更新后的nfa状态关系网编译成dfa状态关系网,使所述dfa状态关系网对所述待检测网络包进行检测获得检测结果。
9.一种网络包检测装置,其特征在于,包括:
获取模块,用于获取待检测网络包;
检测模块,用于将所述待检测网络包输入预先构建的更新后nfa状态关系网进行检测获得检测结果,其中所述更新后nfa状态关系网为对原始nfa状态关系网进行跳转关系更新处理后得到的。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至8任一项所述网络包检测方法的步骤。
11.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至8任一项权利要求所述网络包检测方法的步骤。
12.一种计算机程序产品,所述计算机程序产品包括计算机可执行指令,其特征在于,所述指令在被执行时用于实现如权利要求1至8任一项所述网络包检测方法的步骤。
技术总结