用于处理有限自动机的方法和装置制造方法

文档序号:7812810阅读:410来源:国知局
用于处理有限自动机的方法和装置制造方法
【专利摘要】一种用于运行时间处理的方法和相应的装置使用确定有限自动机(DFA)和非确定有限自动机(NFA)找到有效载荷中图样的存在。可以基于至少一种启发法从一个或多个正则表达式图样的一个集合中的每个图样选择一个子图样。可以从来自该集合中的所有图样的所选择的该子图样生成该DFA,并且可以针对该集合中的至少一个图样生成该至少一个NFA,从而优化该运行时间处理的运行时间性能。
【专利说明】用于处理有限自动机的方法和装置
发明背景
[0001]开放系统互连(OSI)参考模型定义了用于通过传输介质进行通信的7个网络协议层(L1-L7)。上层(L4-L7)表示端到端通信并且下层(L1-L3)表示本地通信。
[0002]联网应用感知系统需要处理、过滤和切换L3到L7网络协议层的范围,例如,L7网络协议层诸如超文本传输协议(HTTP)和简单邮件传输协议(SMTP),以及L4网络协议层诸如传输控制协议(TCP)。除了处理网络协议层以外,联网应用感知系统需要以线速通过L4-L7网络协议层来同时通过基于访问和内容的安全性来保护这些协议,这些协议层包括防火墙、虚拟专用网(VPN)、安全套接字层(SSL)、入侵检测系统(IDS)、互联网协议安全(IPSec)、防病毒(AV)和防垃圾邮件功能。
[0003]网络处理器可用于高吞吐量L2和L3网络协议处理,S卩,执行数据包处理从而以线速转发数据包。通常,通用处理器用于处理需要更多智能处理的L4-L7网络协议。虽然通用处理器可以执行计算密集型任务,但是没有提供足够用于处理数据使得其能够被以线速转发的性能。
[0004]内容感知联网需要以“线速”对数据包的内容进行检查。可以对内容进行分析,以确定是否存在安全漏洞或入侵。应用大量正则表达式形式的图样和规则以确保所有的安全漏洞或入侵被检测到。正则表达式是用于描述字符串中的图样的紧凑型方法。由正则表达式所匹配的最简单图样是单个字符或字符串,例如,/c/或/cat/。正则表达式还包括具有特殊含义的运算符和元字符。
[0005]通过使用元字符,正则表达式可以用于更复杂的搜索,诸如“abc.*XyZ”。S卩,在“abc”和“xyz”之间的无限量字符的情况下,找到字符串“abc”,之后是字符串“xyz”。另一示例是正则表达式“abc..abc.*xyz”,即,找到字符串“abc”,在两个字符以后跟随字符串“abc”并且在无限量字符后跟随字符串“xyz”。
[0006]入侵检测系统(IDS)应用检查所有流过网络的单独数据包的内容,并且标识可能指示尝试闯入或危害系统的可疑图样。可疑图样的一个示例可以是数据包中的特定文本串,该特定文本串在100个字符以后跟随另一特定文本串。
[0007]通常使用搜索方法(如用于处理正则表达式的确定有限自动机(DFA)或非确定有限自动机(NFA))执行内容搜索。
发明概述
[0008]本发明的实施例提供了一种用于有限自动机的编译和运行时间处理的方法、装置、计算机程序产品、和相应的系统。
[0009]根据一个实施例,在操作性地耦合至一个网络的一个安全装置中的操作性地耦合至至少一个存储器的至少一个处理器中,一种方法可以:通过用来自一个有效载荷的多个字符遍历该至少一个存储器中所存储的一个统一确定有限自动机(DFA)的多个节点,使该有效载荷的多个字符走过该统一 DFA,由基于至少一种启发法从一个或多个正则表达式图样的一个集合中的每个图样所选择的多个子图样生成该统一 DFA。该方法可以:通过用来自该有效载荷的多个字符遍历该至少一个存储器中所存储的至少一个非确定有限自动机(NFA)的多个节点,使该有效载荷的多个字符走过该至少一个NFA,针对该集合中的至少一个图样生成的该至少一个NFA、该至少一个图样的用于生成该至少一个NFA的一部分、以及用于使多个字符走过该至少一个NFA的至少一个行走方向基于选自该至少一个图样的一个子图样的一个长度是固定的还是可变的以及所选择的该子图样在该至少一个图样内的一个位置。
[0010]该方法可以在遍历该至少一个NFA的与指示该至少一个图样的一次最终匹配的元数据相关联的一个NFA节点的基础上上报该有效载荷中的该至少一个图样的一次匹配。
[0011]该方法可以使一个用于该DFA的一次给定行走的事务标识符与用于匹配该有效载荷中的该至少一个图样的该至少一个NFA相关联。该方法可以在以下内容的基础上上报该有效载荷中的该至少一个图样的一次匹配:遍历该统一 DFA的具有指示该至少一个图样的一次DFA部分匹配的元数据的一个DFA节点;随后遍历该至少一个NFA的具有指示该至少一个图样的一次NFA部分匹配的元数据的至少一个NFA节点;以及
使该遍历和随后的该遍历与该事务标识符相关。
[0012]该方法可以基于以下内容将该有效载荷中与该至少一个图样的一个第一元素匹配的一个字符的一个偏移作为该有效载荷中的该至少一个图样的一个起始偏移上报:与该至少一个NFA的一个NFA节点相关联并指示该有效载荷中的该至少一个图样的一次最终匹配的元数据;以及与该统一 DFA的一个DFA节点相关联并在该DFA节点处指示⑴为该至少一个图样选择的该子图样的一个长度、以及(ii)该有效载荷中与为该至少一个图样选择的该子图样的一个最后元素匹配的一个子图样字符的一个子图样结束偏移的元数据,该至少一个处理器在从该子图样结束偏移减去该长度的基础上确定该起始偏移。
[0013]该方法可以:在使与该统一 DFA的多个节点相关联的元数据中所指示的多个部分匹配结果与该至少一个图样的该至少一个NFA相关的基础上,上报与该至少一个NFA的一个NFA节点处的该至少一个图样的一个第一元素匹配的该有效载荷的一个字符的一个偏移作为该有效载荷中的该至少一个图样的一个起始偏移。
[0014]该方法可以:在与该NFA节点相关联的元数据以及在该NFA节点处为该有效载荷中的该至少一个图样所确定的一次最终匹配的基础上,上报该至少一个NFA的一个NFA节点处的与该至少一个图样的一个第一元素匹配的该有效载荷的一个字符的一个偏移作为该有效载荷中的该至少一个图样的一个起始偏移。
[0015]该至少一种启发法可以包括将所选择的唯一子图样的数量和所选择的每个子图样的长度最大化,所选择的每个子图样的该长度至少具有一个最小阈值长度。
[0016]如果所选择的该子图样的一个第一元素是该至少一个子图样的一个第一元素并且所选择的该子图样的该长度是固定的,所选择的该子图样的该位置可以是该至少一个子图样的一个开始位置,该至少一个图样的用于生成该至少一个NFA的该部分可以是排除所选择的该子图样的该至少一个图样,该至少一个NFA可以是单个NFA,并且该至少一个NFA的该至少一个行走方向可以是一个前向行走方向。
[0017]该方法可以在与所选择的该子图样的该最后元素和向该至少一个处理器指示一个指向该至少一个NFA的一个起始节点的指针的元数据相关联的该统一 DFA的一个DFA节点处转换成在一个前向行走方向行走该至少一个NFA。该至少一个NFA的该起始节点可以与该至少一个图样的用于生成该至少一个NFA的该部分的一个第一元素相关联。该至少一个NFA的一个有效载荷起始偏移可以与所选择的该子图样的该结束偏移处的另一字节之后的一个字节的一个偏移相关联,并上报所选择的该子图样的一次匹配,与该DFA节点处所选择的该子图样的该最后元素匹配的一个前导字符的该有效载荷内的一个前导偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度。
[0018]该方法可以在该至少一个NFA的与元数据相关联的一个NFA节点处:终止该行走,该NFA节点与该至少一个图样的一个最后元素相关联,以及上报该NFA节点处匹配的一个滞后字符的该有效载荷内的一个滞后偏移作为该至少一个图样的一个结束偏移,以及该至少一个图样的一次最终匹配。
[0019]如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置可以是该至少一个图样的一个中间位置;并且如果所选择的该子图样的该长度是固定的,该至少一个图样的用于生成该至少一个NFA的该部分可以包括该至少一个图样的一个滞后部分和一个前导部分,该至少一个图样的该滞后部分可以是排除了该至少一个图样的所选择的该子图样和该前导部分的该至少一个图样,该至少一个图样的该前导部分可以排除该至少一个图样的所选择的该子图样和该滞后部分。该至少一个NFA可以包括一个滞后NFA和一个前导NFA,该至少一个行走方向可以包括一个前向行走方向和一个反向行走方向,该滞后NFA可以具有该前向行走方向,该前导NFA可以具有该反向行走方向,该至少一个图样的该滞后部分用于生成该滞后NFA,并且该至少一个图样的该前导部分用于生成该前导NFA。
[0020]该方法可以在与所选择的该子图样的该最后元素和向该至少一个处理器指示一个指向该滞后NFA的一个起始节点的指针和一个指向该前导NFA的一个起始节点的指针的元数据相关联的该统一 DFA的一个DFA节点处:使该统一 DFA的行走转换成在该前向行走方向行走该滞后NFA,该滞后NFA的该起始节点可以与该滞后部分的一个第一元素相关联。该方法可以使行走该滞后NFA转换成在该反向行走方向行走该前导NFA,该前导NFA的该起始节点可以与该前导部分的一个最后元素相关联。该方法可以上报与该DFA节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,所选择的该子图样的一次匹配,以及所选择的该子图样的一个长度。
[0021]该方法可以在与该至少一个图样的该最后元素相关联,与元数据相关联的该滞后NFA的一个滞后节点处终止行走该滞后NFA。该方法可以上报与该滞后节点处的该最后元素匹配的该有效载荷的一个滞后字符的该有效载荷内的一个滞后偏移,以及该至少一个图样的该滞后部分的一个匹配。该方法可以在与该至少一个图样的该第一元素相关联,与元数据相关联该前导NFA的一个前导节点处:终止行走该前导NFA,以及上报该至少一个图样的该前导部分的一次匹配,以及与该前导节点处的该第一元素匹配的该有效载荷的一个前导字符的该有效载荷内的一个前导偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话。
[0022]如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置可以是该至少一个图样的一个中间位置,并且如果所选择的该子图样的该第一元素是该至少一个图样的该第一元素,所选择的该子图样的该位置可以是该至少一个图样的该开始位置。如果该子图样的该长度是固定的或可变的,该至少一个图样的用于生成该至少一个NFA的该部分可以包括该至少一个图样的一个滞后部分和一个整个部分,该至少一个图样的该滞后部分可以是排除了该至少一个图样的一个前导部分的该至少一个图样。该前导部分可以包括该至少一个图样的该第一元素、所选择的该子图样的该最后元素、以及其间的该至少一个图样中的所有元素。该至少一个图样的该整个部分可以是该至少一个图样。如果所选择的该子图样的位置可以是开始位置,该前导部分可以是所选择的该子图样。该至少一个NFA可以包括一个滞后NFA和一个伞状NFA,该至少一个行走方向可以包括一个前向行走方向和一个反向行走方向。该滞后NFA可以具有该前向行走方向。该伞状NFA可以具有该反向行走方向。该至少一个图样的该滞后部分已经可以用于生成该滞后NFA,并且该至少一个图样的该整个部分已经可以用于生成该伞状NFA。
[0023]该方法可以在该统一 DFA的与所选择的该子图样的该最后元素相关联,与向该至少一个处理器指示一个指向该滞后NFA的一个起始节点的指针的元数据相关联的一个DFA节点处使该统一 DFA的行走转换成使在向前向行走方向行走该滞后NFA。该滞后NFA的起始节点可以与该滞后部分的一个第一元素相关联。该方法可以上报所选择的该子图样的一次匹配,以及与该DFA节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度,如果该长度是固定的。
[0024]该方法可以在与该至少一个图样的该最后元素相关联,与向该至少一个处理器指示一个指向该伞状NFA的一个起始节点的指针的元数据相关联的该至少一个NFA的一个滞后节点处使该至滞后NFA的行走转换成在反向行走方向行走该伞状NFA。该伞状NFA的起始节点可以与该至少一个图样的最后元素相关联。该方法可以可选地上报与该滞后节点处的该至少一个图样的该最后兀素匹配的一个字符的该有效载荷内的一个偏移。该方法可以可选地上报该至少一个图样的该滞后部分的一个匹配。该方法可以在与该至少一个图样的该第一元素相关联,与元数据相关联该伞状NFA的一个伞状节点处:终止该行走,以及上报该至少一个图样的一次最终匹配,以及与该伞状节点处的该至少一个图样的该第一元素匹配的一个起始字符的该有效载荷内的一个起始偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话。
[0025]如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置可以是该至少一个图样的一个中间位置,并且如果所选择的该子图样的该第一元素是该至少一个图样的该第一元素,所选择的该子图样的该位置可以是该至少一个图样的一个开始位置,并且如果该子图样的该长度是固定的或可变的,该至少一个图样的用于生成该至少一个NFA的该部分可以包括该至少一个图样的一个滞后部分和一个前导部分。该至少一个图样的该滞后部分可以是排除了该至少一个图样的该前导部分的该至少一个图样。该前导部分可以包括该至少一个图样的该第一元素、所选择的该子图样的该最后元素、以及其间的该至少一个图样中的所有元素。如果所选择的该子图样的位置可以是该开始位置,该滞后部分可以是所选择的该子图样。该至少一个NFA可以包括一个滞后NFA和一个前导NFA。该至少一个行走方向可以包括一个前向行走方向和一个反向行走反向。该滞后NFA可以具有该前向行走方向。该前导NFA可以具有该反向行走方向。该至少一个图样的该滞后部分已经可以用于生成该滞后NFA,并且该至少一个图样的该前导部分已经可以用于生成该前导NFA。
[0026]该方法可以在该统一 DFA的与所选择的该子图样的该最后元素相关联,与向该至少一个处理器指示一个指向该滞后NFA的一个起始节点的指针以及一个指向该前导NFA的一个起始节点的元数据相关联的一个DFA节点处使该统一 DFA的行走转换成在该前向行走方向行走该滞后NFA。该滞后NFA的起始节点可以与该滞后部分的一个第一元素相关联。该方法可以使该统一 DFA的行走转换成在反向行走方向行走前导NFA。该前导NFA的起始节点可以与所选择的该子图样的最后元素相关联。该方法可以上报所选择的该子图样的一次匹配,以及与该DFA节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度,如果该长度是固定的。
[0027]该方法可以在与该至少一个图样的该最后元素相关联,与元数据相关联的该至少一个NFA的一个滞后节点处终止行走该滞后NFA。该方法可以上报与该滞后节点处的该至少一个图样的该最后元素匹配的滞后字符的该有效载荷内的一个滞后偏移,并上报该至少一个图样的该滞后部分的一个匹配。该方法可以在与该至少一个图样的该第一兀素相关联,与元数据相关联的该至少一个NFA的一个前导节点处:终止行走该前导NFA,以及上报该前导部分的一次匹配,以及与该前导节点处的该至少一个图样的该第一元素匹配的一个前导字符的该有效载荷内的一个前导偏移。
[0028]如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置可以是该至少一个图样的一个中间位置;并且如果所选择的该子图样的该长度是固定的或可变的,该至少一个NFA可以是单个NFA。该至少一个行走方向可以包括一个前向行走方向,用于与该至少一个图样的一个滞后部分的多个元素相关联的单个NFA的多个运行时间处理节点,以及一个反向行走方向,用于与该至少一个图样的所有元素相关联的该单个NFA的多个运行时间处理节点。该至少一个图样的该滞后部分可以是排除了该至少一个图样的一个前导部分的该至少一个图样。该前导部分可以包括该至少一个图样的该第一元素、所选择的该子图样的该最后元素、以及其间的该至少一个图样中的所有元素。
[0029]该方法可以在该统一 DFA的与所选择的该子图样的该最后元素相关联,与向该至少一个处理器指示一个指向该单个NFA的一个起始节点的指针的元数据相关联的一个DFA节点处使行走该统一 DFA转换成在向前向行走方向行走该单个NFA。该起始节点可以与该至少一个图样中紧随所选择的该子图样的最后元素的下一元素相关联。该方法可以上报所选择的该子图样的一次匹配,与该DFA节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度,如果该长度是固定的。
[0030]该方法可以在与该至少一个图样的一个最后元素相关联,与元数据相关联的该至少一个NFA的一个滞后节点处使用与所选择的该子图样的结束偏移相关联的有效载荷起始偏移使得从行走该统一 DFA转换成在反向行走方向行走该单个NFA。该方法可以在与该至少一个图样的该第一元素相关联,与元数据相关联的该至少一个NFA的一个前导节点处终止该行走。该方法可以上报与该前导节点处的该至少一个图样的该第一元素匹配的一个字符的该有效载荷内的一个偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话,以及该至少一个图样的一次最终匹配。
[0031]如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置可以是该至少一个图样的一个中间位置;并且如果所选择的该子图样的该长度是固定的,该至少一个NFA可以是单个NFA。该至少一个行走方向可以包括一个反向行走方向,用于与该至少一个图样的一个前导部分相关联的单个NFA的多个运行时间处理节点,以及一个前向行走方向,用于与该至少一个图样的所有元素相关联的该单个NFA的多个运行时间处理节点的。该前导部分可以是排除了该至少一个图样的一个滞后部分的该至少一个图样。该滞后部分可以包括所选择的该子图样的该第一元素、该至少一个图样的该最后元素、以及其间的该至少一个图样中的所有元素。
[0032]该方法可以在该统一 DFA的与所选择的该子图样的该最后元素相关联,与向该至少一个处理器指示一个指向该单个NFA的一个起始节点的指针的元数据相关联的一个DFA节点处使该统一 DFA的行走转换成在反向行走方向行走该单个NFA。该起始节点可以与该前导部分的一个最后元素相关联。可以通过从所选择的该子图样的结束偏移减去所选择的该子图样的长度来确定有效载荷起始偏移。该方法可以上报所选择的该子图样的一次匹配,与该DFA节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的该长度。
[0033]该方法可以在与该至少一个图样的该第一元素相关联,与元数据相关联的该单个NFA的一个前导节点处在前向行走方向行走该单个NFA。该方法可以在与该至少一个图样的该最后元素相关联,与元数据相关联的该单个NFA的一个滞后节点处终止该行走。该方法可以上报与该滞后节点处的该至少一个图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移,以及该至少一个图样的一次最终匹配。
[0034]如果所选择的该子图样的一个最后元素是该至少一个子图样的一个最后元素,所选择的该子图样的该位置可以是该至少一个子图样的一个结束位置,并且如果所选择的该子图样的该长度是固定的,该至少一个图样的用于生成该至少一个NFA的该部分是可以排除了所选择的该子图样的该至少一个图样,并且该至少一个行走方向可以是一个反向行走方向。
[0035]该方法可以在该统一 DFA的与所选择的该子图样的该最后元素相对应的与向该至少一个处理器指示一个指向该至少一个NFA的一个起始节点的指针的元数据相关联的一个DFA节点处使该统一 DFA的行走转换成在反向行走方向行走该至少一个NFA。该至少一个NFA的该起始节点可以与该部分的一个最后元素相关联。该方法可以上报所选择的该子图样的一次匹配,以及与该DFA节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移。可以通过从所选择的该子图样的结束偏移减去所选择的该子图样的长度来确定该至少一个NFA的有效载荷起始偏移,如果该长度是固定的。
[0036]该方法可以在与该部分的一个第一元素相关联,该至少一个NFA的与元数据相关联的一个NFA节点处:终止该行走,以及上报该至少一个图样的一次最终匹配,以及与该NFA节点处的该部分的该第一元素匹配的一个字符的该有效载荷内的一个偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话。
[0037]如果所选择的该子图样的一个最后元素可以是该至少一个子图样的一个最后元素,所选择的该子图样的该位置可以是该至少一个子图样的一个结束位置,并且如果所选择的该子图样的该长度是可变的或固定的,该至少一个图样的用于生成该至少一个NFA的该部分可以是该至少一个图样,并且该至少一个行走方向可以是一个反向行走方向。
[0038]该方法可以在该统一 DFA的与所选择的该子图样的该最后元素相对应的与向该至少一个处理器指示一个指向该至少一个NFA的一个起始节点的指针的元数据相关联的一个DFA节点处使该统一 DFA的行走转换成在反向行走方向行走该至少一个NFA。该至少一个NFA的该起始节点可以与该所选择的该子图样的一个最后元素相关联。该方法可以上报所选择的该子图样的一次匹配,以及与该DFA节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度,如果该长度是固定的,该至少一个NFA的一个有效载荷起始偏移与所选择的该子图样的该结束偏移相关联。
[0039]该方法可以在与该部分的一个第一元素相关联,该至少一个NFA的与元数据相关联的一个NFA节点处:终止该行走,以及上报该至少一个图样的一次最终匹配,以及与该NFA节点处的该部分的该第一元素匹配的一个字符的该有效载荷内的一个偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话。
[0040]可以将该统一 DFA和该至少一个NFA存储为包括该统一 DFA和该至少一个NFA的一个二进制图像。
[0041]该至少一个处理器可以包括被配置成一个加速单元以分别分流DFA和NFA运行时间处理的一个DFA协处理器和一个NFA协处理器。
[0042]在此所披露的另一不例实施例包括一种对应于与在此所披露的方法实施例一致的操作的装置。
[0043]进一步地,又一个示例实施例可以包括非瞬态计算机可读介质,该非瞬态计算机可读存储介质上存储有一个指令序列,当被处理器加载和执行时,该指令序列使处理器执行在此所披露的方法。
附图简要说明
[0044]从本发明的示例实施例的以下更具体的说明中上述内容将是明显的,如在这些附图中所展示的,其中,贯穿这些不同的视图,相似的参考字符是指相同的部分。附图不一定按比例,而是着重于展示本发明的实施例。
[0045]图1是安全装置的实施例的框图,可以在该安全装置中实施在此所披露的实施例。
[0046]图2A-G是示例NFA和DFA图形和展示了图爆的概念的表格。
[0047]图3A是安全装置的实施例的另一框图,可以在该安全装置中实施在此所披露的实施例。
[0048]图3B为可以在至少一个处理器中实施的方法的示例实施例的流程图(350),该处理器操作性地耦合至安全装置内的至少一个存储器,该安全装置操作性地耦合至网络。
[0049]图3C为可以在至少一个处理器中实施的方法的示例实施例的流程图,该处理器操作性地耦合至安全装置内的至少一个存储器,该安全装置操作性地耦合至网络。
[0050]图4是用于在所选择的子图样的长度是固定的并且所选择的该子图样的位置是正则表达式图样的开始位置的基础上生成统一 DFA和至少一个NFA的实施例的框图。
[0051]图5是用于在所选择的子图样的位置是正则表达式图样的中间位置并且所选择的该子图样的长度固定的基础上生成统一 DFA和至少一个NFA的实施例的框图。
[0052]图6是用于在所选择的子图样的位置是正则表达式图样的中间位置或开始位置并且该子图样的长度固定或可变的基础上生成统一 DFA和至少一个NFA的实施例的框图。
[0053]图7是用于在所选择的子图样的位置是正则表达式图样的中间位置或开始位置并且所选择的该子图样的长度固定或可变的基础上生成统一 DFA和至少一个NFA的另一实施例的框图。
[0054]图8是用于在所选择的子图样的位置是正则表达式图样的中间位置并且所选择的该子图样的长度固定或可变的基础上生成统一 DFA和至少一个NFA的实施例的框图。
[0055]图9是用于在所选择的该子图样的位置是正则表达式图样的中间位置并且所选择的该子图样的长度固定的基础上生成统一 DFA和至少一个NFA的实施例的框图。
[0056]图10是用于在所选择的子图样的位置是正则表达式图样的结束位置并且所选择的该子图样的长度固定的基础上生成统一 DFA和至少一个NFA的实施例的框图。
[0057]图11是用于在所选择的子图样的位置是正则表达式图样的结束位置并且所选择的该子图样的长度可变或固定的基础上生成统一 DFA和至少一个NFA的实施例的框图。
[0058]图12是可选地在此所披露的实施例内部的计算机的示例内部结构的框图。 发明详细说明
[0059]在详细描述本发明的示例实施例之前,以下紧接着描述了可以使用确定有限自动机(DFA)和非确定有限自动机(NFA)在其中实施这些实施例的示例网络安全应用,以帮助读者理解本发明的发明特征。
[0060]图1是安全装置102的实施例的框图,可以在该安全装置中实施本发明的实施例。安全装置102可以包括网络服务处理器100。安全装置102可以是可以将在一个网络接口103a接收到的数据包切换到另一个网络接口 103b并且可以在转发这些数据包之前在所接收到的数据包上执行多种安全功能的独立系统。例如,安全装置102可以用于在数据包1la上执行安全处理,可以在将处理过的数据包1lb转发至局域网(LAN) 105b或任何其他合适的网络之前在广域网(WAN) 105a或任何其他合适的网络上接收到这些数据包。
[0061]网络服务处理器100可以被配置成用于对所接收到的数据包中所封装的开放系统互连(OSI)网络L2-L7层协议进行处理。如本领域技术人员所熟知的,OSI参考模型定义了七层网络协议层(L1-7)。物理层(LI)表示将设备连接到传输媒介的实际接口,包括电气接口和物理接口。数据链路层(L2)执行数据组帧。网络层(L3)将数据格式化为数据包。传输层(L4)处理端到端的传输。会话层(L5)管理设备之间的通信,例如,无论通信是半双工的还是全双工的。表现层(L6)管理数据格式化及表现,例如,语法、控制代码、特殊图形及字符集。应用层(L7)允许多个用户之间的通信,例如,文件传送及电子邮件。
[0062]网络服务处理器100可以为上层网络协议(例如,L4-L7)调度和排列工作(例如,数据包处理操作),并且使得能够在所接收到的数据包中进行上层网络协议的处理,以便以线速(即,网络的数据传送速率,可以在该网络上传输和接收数据)转发数据包。通过处理这些协议来以线速转发这些数据包,网络服务处理器100不会降低网络数据传送速率。网络服务处理器100可以从网络接口 103a或103b接收数据包(这些网络接口可以是物理硬件接口),并且可以在所接收的数据包上执行L2-L7网络协议。网络服务处理器100可以随后通过网络接口 103a或103b将处理过的数据包1lb转发至网络中的另一跳(最终目的地),或通过另一总线(未示出)以用于由主处理器(未示出)进行进一步处理。网络协议处理可以包括网络安全协议的处理,如防火墙、应用防火墙、包括IP安全(IPSec)和/或安全套接字层(SSL)的虚拟专用网(VPN)、入侵检测系统(IDS)和防病毒(AV)。
[0063]网络服务处理器100可以使用多个处理器(B卩,内核)传送高应用性能。内核(未示出)中的每个可以专用于执行数据面或控制面操作。数据面操作可以包括数据包操作以便转发数据包。控制面操作可以包括处理复杂的高层协议的多个部分,如互联网协议安全(IPSec)、传输控制协议(TCP)和安全套接字层(SSL)。数据面操作可以包括处理这些复杂的高层协议的其他部分。
[0064]网络服务处理器100还可以包括分流内核从而使得网络服务处理器100实现高吞吐量的特定用途协处理器(未示出)。例如,网络服务处理器100可以包括一个加速单元106,该加速单元可以包括一个用于NFA处理的硬件加速的超非确定自动机(HNA)协处理器108和一个用于DFA处理的硬件加速的超级有限自动机(HFA)协处理器110。HNA 108和HFA 110协处理器可以被配置成用于分流网络服务处理器100通用内核(未示出)的执行计算和内存密集型图样匹配法的重负。
[0065]网络服务处理器100可以执行图样搜索、正则表达式处理、内容验证、变换和安全以加速数据包处理。正则表达式处理和图样搜索可以用于针对AV和IDS应用以及需要字符串匹配的其他应用执行字符串匹配。网络服务处理器100中的存储器控制器(未示出)可以控制对存储器104的访问,该存储器操作性地耦合至网络服务处理器100。该存储器可以是内部的(即,片上)或外部(即,片外)、或其组合,并且可以被配置成用于存储所接收到的数据包,如用于由网络服务处理器100进行处理的数据包101a。该存储器可以被配置成用于存储DFA和NFA图形表达式搜索中查找和图样匹配所利用的编译规则数据。编译规则数据可以被存储为包括用于DFA和NFA两者的编译规则数据的二进制图像112,或被存储为将DFA编译规则数据从NFA编译规则数据分开的多个二进制图像。
[0066]典型的内容感知应用处理使用或者DFA或者NFA来识别所接收到的数据包的内容中的图样。DFA和NFA两者都是有限状态机,S卩,计算模型,计算模型中的每一个都包括状态集合、开始状态、输入字母表(所有可能的符号集合)和转换函数。计算在开始状态中开始,并且根据转换函数而改变为新的状态。
[0067]图样通常使用正则表达式来表达,正则表达式包括基本元素,例如,诸如A-Z、0_9的正常文本字符以及诸如*、■'和I的元字符。正则表达式的基本元素是有待匹配的符号(单个字符)。基本元素可以与允许连结(+)交替(I)、以及Kleene星号(*)的元字符结合。用于连结的元字符可以用于从单个字符(或子串)创建多个字符匹配图样,而用于交替(I)的元字符可以用于创建可以匹配两个或更多个子串中任何一个的正则表达式。元字符Kleene星号(*)允许图样匹配任意次数,包括不会发生在前字符或字符串。
[0068]组合不同的运算符和单个字符允许构建表达式的复杂子图样。例如,如(th (is I at) *)的子图样可以与多个字符串匹配,如:th、this、that、thisis、thisat、thatis或thatat。表达式的复杂子图样的另一示例可以是结合字符类结构[...]的示例,该字符类结构允许列出要搜索的字符列表。例如,gr[ea]y查找grey和gray两者。其他复杂子图样示例是可以使用破折号指示字符范围(例如[A-Z])的示例或与任一字符匹配的元字符”。该图样的元素可以是基本元素或一个或多个基本元素与一个或多个元字符的组合。
[0069]对DFA或NFA状态机的输入通常是(8位)字节串,即,字母可以是来自输入流(即,所接收到的数据包)的单个字节(一个字符或符号)。输入流中的每个字节可以产生从一个状态到另一状态的转换。可以用一个图形表示DFA或NFA状态机的状态和转换函数。该图形中的每个节点可以代表一个状态,并且该图形中的弧可以代表状态转换。状态机的当前状态可以由选择图形中的特定节点的节点标识符来表示。
[0070]可以将使用DFA来处理正则表达式并且找到字符的输入流中由正则表达式描述的一个或多个图样表征为具有确定的运行时间性能。可以从输入字符(或符号)以及DFA的当前状态确定DFA的下一个状态,因为每个DFA状态只有一次状态转换。这样,DFA的运行时间性能被认为是确定的并且完全可以从输入预测行为。然而,用于确定性的折中办法是其中节点的数量(或图形大小)可以随着图样的大小呈指数增长的图形。
[0071]相比之下,可以将NFA图形的节点数量(或图形大小)可以表征为随着图样的大小而呈线性增长。然而,可以将使用NFA来处理正则表达式并且找到字符的输入流中由正则表达式所描述的一个或多个图样表征为具有非确定运行时间性能。例如,给定输入字符(或符号)和NFA的当前状态,可能存在不只一个要转换成的NFA的下一状态。这样,不能唯一地从NFA的输入和当前状态确定NFA的下一状态。因此,NFA的运行时间性能被认为是不确定的,因为不能完全从输入预测行为。
[0072]图2A-G示出了 DFA “图爆”的概念。图2A、图2B、和图2C分别示出了图样“.*ar\n]”、“.*ar\n] Γ\η] ”、“.*a[~\n] Γ\η] Γ\η]”的 NFA 图形,并且图 2D、图 2Ε、和图2F分别示出了相同图样的DFA图形。如图2Α至图2F中所示以及图2G的表格所总结的,NFA对于某些图样可以呈线性增长,同时对于相同图样的DFA可以呈指数增长,从而导致图爆。如所示的,对于一个或多个给定图样而言,DFA状态的数量可以大于NFA状态的数量,通常近似多几百或多几千种状态。这是“图爆”的一个示例,这是DFA的一个标志特点。
[0073]根据在此所披露的实施例,可以使用DFA、NFA、或其组合进行内容搜索。根据一个实施例,运行时间处理器、协处理器、或其组合可以用硬件实施并且可以被配置成用于实施一个编译器或行走器。
[0074]编译器可以将图样或图样的输入列表(也被称为特征或规则)编译成DFA、NFA、或其组合。DFA和NFA可以是二进制数据结构,如DFA和NFA图形和表格。
[0075]行走器可以执行运行时间处理,即,用于标识输入流中的图样的存在、或将图样与输入流中的内容进行匹配的动作。内容可以是互联网协议(IP)数据报的有效载荷部分、或输入流中的任何其他合适的有效载荷。DFA或NFA图形的运行时间处理可以被称为用有效载荷行走DFA或NFA图形以确定图样匹配。处理器被配置成用于生成DFA、NFA、或其组合,在此可以被称为编译器。被配置成用于使用所生成的DFA、NFA、或其组合来实施有效载荷的运行时间处理的处理器在此可以被称为行走器。根据在此所披露的实施例,网络服务处理器100可以被配置成用于在安全装置102中实施编译器和行走器。
[0076]图3A是图1的安全装置102的另一实施例的框图,可以在该安全装置中实施本发明的实施例。如参照图1所描述的,安全装置102可以操作性地耦合至一个或多个网络并且可以包括存储器104和网络服务处理器100,该网络服务处理器可以包括加速单元106。参照图3A,网络服务处理器100可以被配置成用于实施生成二进制图像112的编译器306和使用二进制图像112的行走器320。例如,编译器306可以生成二进制图像112,该二进制图像包括被行走器320用于在所接收的数据包101a(图1中所示)上执行图样匹配方法的编译规则数据。根据在此所披露的实施例,编译器306可以通过基于如下文进一步描述的至少一种启发法确定针对DFA、NFA、或其组合来生成二进制图像112。编译器306可以确定有利地适合DFA和NFA的规则数据。
[0077]根据在此披露的实施例,编译器306可以通过处理规则集310来生成二进制图像112,该规则集可以包括一个或多个正则表达式图样的集合304和可选的限定符308。根据规则集310,编译器306可以使用从一个或多个正则表达式图样的所有中选择的子图样和用于一个或多个正则表达式图样的集合304中的至少一个图样的至少一个NFA 314以供行走器320在运行时间处理过程中使用、以及包括映射信息的元数据(未示出)来生成统一DFA 312,该映射信息用于将行走器320在统一 DFA 312的状态(未示出)与至少一个NFA314的状态之间进行转换。可以逐数据结构地将统一 DFA 312和至少一个NFA 314表示为图形、或为任何其他合适的形式,并且可以逐数据结构地将元数据中的映射表示为一个或多个表、或用任何其他合适的形式。根据在此披露的实施例,如果从图样中选择的子图样为该图样,则不为该图样生成NFA。根据在此披露的实施例,所生成的每个NFA可以用于集合中的具体图样,而可以基于来自集合中所有图样的所有子图样来生成统一 DFA。
[0078]基于从所接收到的数据包1la中的有效载荷消耗字节,行走器320通过转换统一DFA 312和至少一个NFA的状态来用有效载荷行走统一 DFA 312和至少一个NFA 314。这样,行走器320使该有效载荷走过统一 DFA 312和该至少一个NFA 314。
[0079]规则集310可以包括一个或多个正则表达式图样的集合304并且可以是Perl兼容正则表达式(PCRE)脚本文件的形式或任何其他合适的形式。PCRE已经成为安全和联网应用中正则表达式语法的事实标准。随着更多应用需要深度数据包检查已经兴起或更多威胁在互联网中变得普遍,用于标识病毒/攻击的相应特征/图样或应用也已经变得更加复杂。例如,特征数据库已经从具有简单字符串图样演进到具有通配符字符/范围/字符类和高级PCRE特征的正则表达式(regex)图样。
[0080]如图3A中所示,可选的限定符308可以各自与正则表达式图样集合304中的一个图样相关联。例如,可选的限定符322可以与图样316相关联。可选的限定符308可以各自是指定所希望的自定义、高级PCRE特征选项、或于处理与限定符相关联的图样的其他合适的选项的一个或多个限定符。例如,限定符322可以指示是否希望用于图样316的高级PCRE特征选项中的起始偏移(即,图样的在有效载荷中匹配的第一匹配字符的有效载荷中的位置)选项。
[0081]由于出现的应用,起始偏移已经变得对深度数据包检查(DPI)系统中的处理比较重要。有利的是,有限自动机只需要上报给定图样在输入内的存在或不存在,并上报有效载荷中的已匹配的图样的结束偏移以用于处理。如下文参照图4至图11所描述的,如果限定符322指示希望起始偏移,编译器306可以用使得行走器320能够上报(即,声明)图样的在有效载荷中匹配的第一匹配字符的有效载荷的位置偏移的方式生产二进制图像112。
[0082]根据在此披露的实施例,编译器306可以使用从一个或多个正则表达式图样的集合304中的所有图样选择的子图样302生成统一 DFA312。编译器306可以基于如以下进一步描述的至少一种启发法来从一个或多个正则表达式图样的集合304中的每个图样中选择多个子图样302。编译器306还可以为该集合中的至少一个图样316生成至少一个NFA314,可以基于所选择的子图样318的长度是否是固定的或可变的和所选择的子图样318在至少一个图样316内的位置来确定至少一个图样316的用于生成至少一个NFA 314的部分(未示出)和至少一个NFA314的运行时间处理(即,行走)的至少一个行走方向。编译器306可以将统一 DFA 312和至少一个NFA 314存储在至少一个存储器104内。
[0083]编译器可以确定所选择的潜在子图样的长度是否是固定的或可变的。例如,如“cdef”子图样的长度可以被确定为具有一个固定长度4,因为“cdef”为一个字符串,而包括运算符的复杂子图样可以被确定为具有一个可变长度。例如,如“a.*cdr\n] {O, 10}.*y”复杂子图样根据所选择的图样可以具有“cdr\n] {O, 10} ”,其可以具有一个2到12的可变长度。
[0084]根据在此披露的实施例,子图样选择可以基于至少一种启发法。子图样是来自图样的一个或多个连续元素的集合,其中,为了与来自有效载荷的字节或字符匹配,来自图样的每个元素可以用DFA或NFA图形中的节点来表示。如上所述的元素可以是用节点表示的单个文本字符或用节点表示的字符类。编译器306可以基于子图样是否很可能引起如以上参照图2A-G所描述的过多DFA图爆来确定图样中的哪些子图样更适用于NFA。例如,从包括连续文本字符的子图样生成DFA将不会引起DFA图爆,而如上所述的复杂子图样可以包括多个运算符和多个字符,并且从而可能引起DFA图爆。例如,包括通配符字符或重复多次的较大字符类(例如,Γ\η]*或Γ\η]{16})的子图样可以在DFA中产生过多状态,并且因此可以更有利地适用于NFA。
[0085]如以上所披露的,从一个或多个正则表达式的集合304中的每个图样中选择子图样可以基于至少一种启发法。根据一个实施例,该至少一种启发法可以包括使所选择的唯一子图样的数量和所选择的每个图样的长度最大化。例如,如“ab.*cdef.*mn”图样可以具有多个潜在字符图样,如“ab.*”、“cdef”JP“.*mn”。编译器可以选择“cdef ”作为该图样的子图样,因为其是图样“ab.*cdef.*mn”中不太可能引起DFA图爆的最大子图样。然而,如果已经为另一个图样选择了子图样“cdef”,则编译器可以为图样“ab.*cdef.*mn”选择替代子图样。可替代地,编译器可以用其他图样的另一个子图样替换子图样“cdef”,从而能够为图样“ab.*cdef.*mn”选择图样“cdef”。
[0086]这样,编译器306可以基于图样304中每个图样的可能子图样的上下文为图样304选择子图样,从而能够使所选择的唯一子图样的数量和所选择的每个子图样的长度最大化。如此,编译器306可以从所选择的图样302生成统一 DFA 312,该统一 DFA通过增加至少一个NFA314中的图样匹配的概率来使至少一个NFA 314的图样匹配中的误报(即,没有匹配或部分匹配)数量最小化。
[0087]通过使子图样长度最大化,可以避免NFA处理中的误报。NFA处理中的误报会引起非确定运行时间处理,并且因此会降低运行时间性能。进一步地,通过使所选择的唯一子图样的数量最大化,鉴于统一 DFA中(来自图样)子图样的匹配,编译器306能够实现统一DFA到从集合中的图样生成的至少一个NFA 314之间的1:1转换。
[0088]例如,如果多个图样共享所选择的子图样,则统一 DFA的行走器将需要转换成多个至少一个NFA,因为每个至少一个NFA是每图样NFA,并且来自统一 DFA的子图样匹配意味着针对该多个图样中每个图样的部分匹配。如此,使唯一子图样的数量最大化减少了DFAiNFA 1:N转换的数量,从而减少了行走器320进行的运行时间处理。
[0089]为了能够使唯一子图样的数量最大化,编译器302可以计算所选择的子图样318的散列值326并将所计算的散列值326结合从其中选择子图样318的图样316的标识符(未示出)一起存储。例如,针对集合304中的每个图样,编译器306可以计算所选择的子图样的散列值。所计算的散列值324可以按照表格的方式、或以任何合适的方式存储在至少一个存储器104中。所使用的散列法可以是任何合适的散列法。编译器可以将所计算的散列值与为该集合中的其他图样选择的子图样的散列值列表进行比较,以便确定所选择的子图样是否是唯一的。
[0090]如果在该列表找到所计算的散列值,则编译器可以确定是否用来自图样的另一个子图样来替换(i)所选择的子图样或用从该集合中的其他图样中选择的替代子图样替换(?)为该集合中的另一个图样选择的子图样。可以基于与该列表中所计算的散列值的关联来标识该集合中的其他图样。确定是否替换(i)或(ii)可以基于对考虑替换的子图样的长度进行比较以便如上所述最大化所选择的唯一子图样的长度。替换所选择的子图样可以包括选择为给定图样标识的下一个最长子图样、或下一个最高优先级的子图样。例如,可以基于引起DFA图爆或所预期的DFA图爆幅度的可能性来确定潜在子图样的优先次序。
[0091]根据在此披露的实施例,至少一种启发法可以包括标识每个图样的子图样和如果给定子图样具有一个小于最小阈值的长度则忽视每个图样的所标识的子图样中的给定子图样。例如,为了减少至少一个NFA中的误报,编译器可以忽视具有小于最小阈值的长度的子图样,因为此类子图样会引起至少一个NFA中的误报的更高概率。
[0092]该至少一种启发法可以包括访问子图样的与使用指示符的历史频率相关联的知识库(未示出),以及如果所访问的知识库中针对给定子图样的使用指示符的历史频率大于等于频率使用阈值则忽视每个图样的所标识的子图样中的给定子图样。例如,特定用途或协议特定子图样可能具有高使用频率,如针对超文本传输协议(HTTP)有效载荷、“回车换行”、或流量清零(如来自二进制文件的多个连续O)、或任何其他频繁使用的子图样。
[0093]该至少一种启发法可以包括标识每个图样的和用于每个图样的子图样,通过基于具有所标识的子图样的最大数量的连续文本字符的给定子图样和基于为一个或多个正则表达式集合选择的所有子图样之间为唯一的给定子图样选择所标识的子图样中的给定子图样使所选择的子图样中的连续文本字符的数量最大化。如以上所披露的,使所选择的子图样的长度最大化可以使得能够实现至少一个NFA中匹配的更高概率。
[0094]该至少一种启发法可以包括基于给定子图样中的每一个的子图样类型和给定子图样的长度来确定每个图样的给定子图样的优先次序。子图样类型可以是纯文本、交替、单字符重复、或多字符重复,并且子图样类型的从最高到最低的优先次序可以是纯文本、交替、单字符重复、或多字符重复。这样,可以将具有至少最小长度阈值长度的文本字符串的子图样的优先次序确定为比可变长度的复杂子图样更高。
[0095]编译器306可以将较长长度的子图样的优先次序确定为在较短长度的另一个子图样之上。编译器306可以基于确定优先次序来选择唯一子图样作为所选择的子图样。如上所述,所选择的唯一子图样可以具有至少最小长度阈值的长度。
[0096]如果给定子图样中没有一个是唯一的并且具有一个至少最小长度阈值的长度,编译器306可以在确定优先次序的基础上选择非唯一子图样作为所选择的子图样。如此,编译器306可以从图样中选择一个是从另一个图样中选择的子图样的副本的子图样而不是选择具有一个小于最小阈值的长度的子图样。为了方便子图样的最终确定,编译器306可以对图样进行多次忽略并按长度对可能的子图样进行分类。如此,可以在针对一个或多个正则表达式的集合304中的其他图样的子图样选择的上下文中执行针对一个或多个正则表达式的集合304中的给定图样的编译器子图样选择。
[0097]如上所述,限定符322可以指示希望报告起始偏移。然而,起始偏移可能不是容易可辨别的。例如,鉴于如“ axycamb ”有效载荷,因为两个图样可以匹配,“ axycamb ”和“ amb ”,在如“a.*b”或“a.*d”有效载荷匹配图样中找到起始偏移会是困难的。如此,可能需要按照潜在起始偏移跟踪有效载荷中的“a”的两个实例的偏移。根据在此披露的实施例,不需要跟踪潜在起始偏移,因为直到确定已经在有效载荷中找到整个图样的匹配才确定起始偏移。可以利用来自统一 DFA、至少一个NFA、或其组合的匹配结果找到确定整个图样的匹配。
[0098]根据在此披露的实施例,如果所接收到的数据包101中的有效载荷包括与从图样316中选择的子图样318匹配的内容,则行走器可以转换成行走图样318的至少一个NFA。行走器320可以上报所选择的子图样318的匹配,以及对匹配的子图样的最后字符的所接收到的数据包中的一个位置进行标识的偏移作为有效载荷中的子图样的结束偏移。如果子图样是图样的子集,则子图样匹配可以是图样的部分匹配。如此,行走器320可以通过行走图样的至少一个NFA来继续搜索有效载荷中的图样的剩余部分,以便确定图样的最终匹配。应理解的是,图样可以遍历所接收到的数据包1la中的一个或多个有效载荷。
[0099]图3B为可以在至少一个处理器中实施的方法的示例实施例的流程图(350),该处理器操作性地耦合至安全装置内的至少一个存储器,该安全装置操作性地耦合至网络。该方法可以开始(352)并基于至少一种启发法从一个或多个正则表达式图样的集合中的每个图样中选择子图样(354)。该方法可以使用从该集合中的所有图样中选择的子图样来生成统一确定有限自动机(DFA) (356)。该方法可以为该集合中的至少一个图样生成至少一个非确定有限自动机(NFA),基于所选择的子图样的长度是否是固定的或可变的和所选择的子图样在至少一个图样内的位置来确定至少一个图样的用于生成该至少一个NFA的部分和用于该至少一个NFA的运行时间处理的至少一个行走方向(358)。该方法可以将统一DFA和所生成的至少一个NFA存储在至少一个存储器内(360)。之后,在该示例实施例中,该方法结束(362)。
[0100]图3C为可以在至少一个处理器中实施的方法的示例实施例的流程图(380),该处理器操作性地耦合至安全装置内的至少一个存储器,该安全装置操作性地耦合至网络。通过用来自有效载荷的多个字符遍历至少一个存储器中所存储的一个统一 DFA的多个节点,可以开始(382)并使该有效载荷的多个字符走过该统一 DFA (384),基于至少一种启发法从一个或多个正则表达式图样的集合中的每个图样选择的多个子图样生成该统一 DFA。该方法可以:通过用来自该有效载荷的多个字符遍历该至少一个存储器中所存储的至少一个NFA的多个节点,使该有效载荷的多个字符走过该至少一个NFA,针对该集合中的至少一个图样生成的该至少一个NFA、该至少一个图样的用于生成该至少一个NFA的一部分、以及用于使多个字符走过该至少一个NFA的至少一个行走方向基于选自该至少一个图样的一个子图样的一个长度是固定的还是可变的以及所选择的该子图样在该至少一个图样(386)内的一个位置。之后,在该示例实施例中,该方法结束(388)。
[0101]如上文所披露的,编译器306可以生成统一 DFA 312和至少一个NFA 314以使行走器320能够搜索所接收到的数据包1la中的一个或多个正则表达式图样304的匹配。编译器306可以基于至少一种启发法从一个或多个正则表达式图样的集合304中的每个图样中选择子图样。可以使用从集合304中的所有图样中选择的子图样302来生成统一 DFA312。编译器306可以为集合304中的至少一个图样316生成至少一个NFA 314。如下文参照图4至图11所披露的,可以基于所选择的子图样318的长度是否是固定的或可变的和所选择的子图样318在至少一个图样316内的位置来确定至少一个图样316的用于生成至少一个NFA 314的部分、和用于至少一个NFA 314的运行时间处理的至少一个行走方向。
[0102]图4是用于在所选择的子图样404的长度是固定的并且所选择的该子图样的位置是至少一个图样406的开始位置的基础上生成统一 DFA 312和至少一个NFA 314的框图400。如图4中所示,所选择的子图样404的第一元素408是该至少一个图样406的第一元素。该至少一个图样406的用于生成该至少一个NFA 402的部分410可以是排除了所选择的子图样404的该至少一个图样406。该至少一个NFA 314可以是单个NFA 402,并且该至少一个NFA 314的至少一个行走方向可以是前向行走方向412。例如,对于给定图样(如“cavium”),前向行走方向将在一个从“c”到“m”的行走方向使输入有效载荷走过该至少一个NFA 314的多个节点,而反向行走方向将在一个从“m”到“c”的行走方向行走输入有效载荷。
[0103]根据图4的示例实施例,编译器306可以使统一 DFA 312的DFA节点414与元数据418相关联,该DFA节点与所选择的子图样404的最后元素416相关联。元数据418可以向行走器320指示一个指向单个NFA 402的起始节点422的指针420,该行走器被配置成用于用有效载荷426行走统一 DFA 312和至少一个NFA 314。元数据418可以包括转换成在前向行走方向412行走NFA 402的指令。单个NFA 402的起始节点422可以与该至少一个图样406的用于生成单个NFA 402的部分410的第一元素424相关联。元数据418可以指示行走器320上报所选择的子图样404的一次匹配,与DFA节点414处的所选择的子图样404的最后兀素416匹配的(多个字符430中的)一个前导字符的有效载荷426内的(多个偏移428中的)一个前导偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度。有效载荷的用于行走单个NFA 402的起始偏移可以是有效载荷426中的结束偏移处的字节之后的一个字节的偏移。例如,该有效载荷中用于在起始节点422处开始行走单个NFA 402的下一字符可以被确定为是该有效载荷内的结束偏移处的字节之后的字节。由于所选择的该子图样的长度是固定的,编译器306可以确定所选择的该子图样的长度并将其包括在元数据418中。行走器320可以使用元数据418中所包括的长度以便确定有效载荷426内的图样406的起始偏移。例如,如果限定符308中的一个限定符需要的话,行走器320可以通过从所确定的结束偏移减去元数据418中所包括的长度来确定起始偏移。
[0104]应当理解的是,可以用任何合适的方式进行上报。例如,行走器320可以通过向网络服务处理器100声明结束偏移来上报该结束偏移,例如通过写到存储单元、触发中断、发送或张贴消息等。可替代地,行走器320可以通过声明结束偏移或其本身的数据结构中用于行走器本身的过程中的其他确定的结果来上报结束偏移或任何其他偏移或基于匹配结果的信息。
[0105]根据图4的示例实施例,编译器306可以使所生成的单个NFA的NFA节点432与由于已经标识了整个图样406的最终匹配而向行走器指示终止行走的指令的元数据434。NFA节点432可以与该至少一个图样406的一个最后元素436相关联。元数据434可以指示行走器320上报在NFA节点432处匹配的(多个字符430中的)一个滞后字符的有效载荷426内的(多个偏移428中的)一个滞后偏移作为该至少一个图样406的结束偏移,以及该至少一个图样406的最终匹配。
[0106]行走器320可以使给定图样的每次行走与一个事务标识符相关。这样,可以结合相应的事务标识符上报子图样长度、有效载荷字符偏移、和图样匹配结果。在示例实施例中,网络服务处理器100可以基于事务标识符使给定图样的行走器结果信息相关,以供行走搜索该给定图样。
[0107]图5是用于在所选择的子图样504的位置是至少一个图样506的中间位置并且所选择的子图样504的长度固定的基础上生成统一 DFA 312和至少一个NFA 314的实施例的框图500。根据图5的示例实施例,该至少一个图样506的用于生成该至少一个NFA 314的部分包括该至少一个图样506的一个滞后部分508和一个前导部分510。如图5中所不,该至少一个图样506的滞后部分508可以是排除了该至少一个图样506所选择的子图样504和前导部分510的该至少一个图样506。该至少一个图样506的前导部分510排除了该至少一个图样506的所选择的子图样504和滞后部分508。
[0108]根据图5的示例实施例,该至少一个NFA 314包括一个滞后NFA 512和一个前导NFA 514。该至少一个行走方向包括一个前向行走方向516和一个反向行走反向518。可以在前向行走方向516行走滞后NFA 512,并且可以在反向行走方向518行走前导NFA 514。该至少一个图样506的滞后部分508可以用于生成滞后NFA 512,并且该至少一个图样506的前导部分510可以用于生成前导NFA 514。
[0109]根据图5的示例实施例,编译器306可以将统一 DFA 312的DFA节点515与元数据520相关联,该DFA节点具有所选择的子图样504的最后元素522。元数据520可以指示行走器,该行走器被配置成用于用有效载荷(如图4的有效载荷426)行走统一 DFA 312和至少一个NFA 314。元数据520可以包括指向滞后NFA 512的起始节点526的指针524,使行走器320转换成在前向行走方向516用起始于有效载荷426中的结束偏移处的字节之后的一个字节的偏移的有效载荷行走滞后NFA 512的指令。滞后NFA 512的起始节点526可以与滞后部分508的一个第一元素528相关联。元数据520可以指示一个指向前导NFA514的起始节点532的指针530,以及供行走器320转换成在反向行走方向518行走前导NFA514的指令。前导NFA 514的起始节点532可以与前导部分510的一个最后元素534相关联。元数据520可以指示行走器320上报与DFA节点515处的所选择的子图样522的该最后元素匹配的(多个字符430中的)一个字符的有效载荷426内的(多个偏移428中的)一个偏移作为所选择的子图样504的一个结束偏移,所选择的该子图样的一次匹配,以及所选择的该子图样的一个长度。行走器320可以使用元数据520中所包括的长度,以便通过从所选择的子图样504的结束偏移减去元数据520中的所选择的该子图样的长度来确定有效载荷的起始偏移,以用于在起始节点532处开始反向行走。
[0110]根据图5的示例实施例,编译器306可以将滞后NFA 512的滞后节点536与元数据540相关联,该滞后节点与该至少一个图样506的最后元素538相关联。元数据540可以向行走器320指示一个指令:终止行走滞后NFA 512,以及上报与滞后节点536处的最后兀素538匹配的有效载荷426的(多个字符430中的)一个滞后字符的有效载荷426内的(多个偏移428中的)一个滞后偏移。元数据540可以指示行走器320上报该至少一个图样506的滞后部分508的一次匹配。
[0111]根据图5的示例实施例,编译器306可以将前导NFA 514的前导节点542与元数据546相关联,该滞后节点与该至少一个图样506的第一元素544相关联,其中,元数据向行走器320指示一个终止行走前导NFA 514的指令。元数据546可以指示行走器320上报该至少一个图样506的前导部分510的一次匹配。元数据546可以指示行走器320上报与前导节点542处的第一元素544匹配的有效载荷426的(多个字符430中的)一个前导字符的有效载荷426内的(多个偏移428中的)一个前导偏移作为该至少一个图样506的起始偏移,如果与该至少一个图样506相关联的限定符(如这些限定符308之一)需要的话。
[0112]图6是用于在所选择的该子图样的位置是该至少一个图样的中间位置或开始位置并且该子图样的长度固定或可变的基础上生成统一 DFA 312和至少一个NFA 314的实施例的框图600。根据图6的示例实施例,该至少一个图样606的用于生成该至少一个NFA314的部分包括该至少一个图样606的一个滞后部分608和一个整个部分610。该至少一个图样606的滞后部分608可以是排除了该至少一个图样606的一个前导部分612的该至少一个图样606。前导部分612包括该至少一个图样606的第一元素614、所选择的子图样604的最后兀素616、以及其间的该至少一个图样606中的所有兀素。该至少一个图样606的整个部分610可以是该至少一个图样606。
[0113]如果所选择的子图样604的一个第一元素618不是该至少一个图样606的一个第一元素614,并且所选择的子图样604的一个最后元素616不是该至少一个图样606的一个最后元素620,所选择的该子图样的该位置是该至少一个图样606的一个中间位置,并且一个开始部分622在该至少一个图样606中的所选择的子图样604之前。
[0114]如果所选择的子图样604的第一元素618是该至少一个图样的第一元素614,所选择的该子图样的位置是该至少一个图样606的开始位置。如果所选择的该子图样的位置是该开始位置,开始部分622不存在,并且前导部分612是所选择的子图样604。
[0115]根据图6的示例实施例,该至少一个NFA包括一个滞后NFA624和一个伞状NFA626。该至少一个行走方向包括一个前向行走方向628和一个反向行走反向630。滞后NFA624具有前向行走方向628,并且伞状NFA 626具有反向行走方向630。该至少一个图样606的滞后部分608可以被编译器306用于生成滞后NFA 624。该至少一个图样606的整个部分610可以被编译器306用于生成伞状NFA 626。
[0116]根据图6的示例实施例,编译器306可以将统一 DFA 312的DFA节点632与元数据634相关联,该DFA节点具有所选择的子图样604的最后元素616。元数据634可以向行走器320指示一个指向滞后NFA 624的起始节点638的指针636,以及转换成在前向行走方向628行走滞后NFA 624的指令。滞后NFA 624的起始节点638可以与滞后部分608的一个第一元素640相关联。元数据634可以指示行走器320上报所选择的子图样604的一次匹配,以及与该DFA节点处的所选择的子图样604的最后元素616匹配的(多个字符430中的)一个字符的有效载荷426内的(多个偏移428中的)一个偏移作为所选择的子图样604的一个结束偏移,以及所选择的子图样604的一个长度,如果该长度固定的话。
[0117]根据图6的示例实施例,编译器306可以将滞后NFA 624的滞后节点642与元数据652相关联,该滞后节点与该至少一个图样606的最后元素620相关联。元数据652可以向行走器320指示一个指向伞状NFA 626的起始节点646的指针644,转换成在反向行走方向630行走伞状NFA 626的指令。伞状NFA 626的起始节点646可以与该至少一个图样606的最后元素620相关联。元数据652可以指示行走器可选地上报与滞后节点642处的该至少一个图样606的最后兀素620匹配的(多个字符430中的)一个字符的有效载荷426内的(多个偏移428中的)一个偏移;以及可选地上报该至少一个图样606的滞后部分608的一次匹配。
[0118]根据图6的示例实施例,编译器306可以使伞状NFA 626的伞状节点648与元数据650相关联,该伞状节点与该至少一个图样606的第一元素614相关联。元数据650可以向行走器320指示一个指令:终止行走并上报该至少一个图样606的一次最终匹配。元数据650可以指示行走器将与伞状节点648处的该至少一个图样606的第一元素614匹配的一个起始字符的有效载荷426内的(多个偏移428中的)一个起始偏移作为该至少一个图样606的起始偏移上报,如果与该至少一个图样606相关联的这些限定符308中的一个限定符需要的话。
[0119]图7是用于在所选择的子图样704的位置是该至少一个图样706的中间位置或开始位置并且所选择的子图样704的长度固定或可变的基础上生成统一 DFA 312和至少一个NFA 314的另一实施例的框图700。根据图7的不例实施例,该至少一个图样的用于生成该至少一个NFA 314的部分包括该至少一个图样706的一个滞后部分708和一个前导部分712。该至少一个图样706的滞后部分708可以是排除了该至少一个图样706的前导部分712的该至少一个图样706。前导部分712包括该至少一个图样706的第一元素714、所选择的子图样704的最后元素716、以及其间的该至少一个图样706中的所有元素。如果所选择的该子图样的位置是该开始位置,该前导部分712可以是所选择的子图样704。
[0120]如果所选择的子图样704的一个第一元素718不是该至少一个图样706的一个第一元素714,并且所选择的子图样704的一个最后元素716不是该至少一个图样706的一个最后元素720,所选择的该子图样的该位置是该至少一个图样706的一个中间位置,并且一个开始部分722在该至少一个图样606中的所选择的子图样704之前。
[0121]如果所选择的子图样704的第一元素718是该至少一个图样的第一元素714,所选择的该子图样的位置是该至少一个图样706的开始位置。如果所选择的该子图样的位置是该开始位置,开始部分722不存在,并且前导部分712是所选择的子图样704。
[0122]根据图7的示例实施例,该至少一个NFA 314包括一个滞后NFA 724和一个前导NFA 726,该至少一个行走方向包括一个前向行走方向728和一个反向行走方向730。滞后NFA 724具有前向行走方向728。前导NFA 726具有反向行走方向730。该至少一个图样706的滞后部分708可以用于生成滞后NFA 724。该至少一个图样706的前导部分712可以用于生成前导NFA 726。
[0123]根据图7的示例实施例,编译器306可以使统一 DFA 312的DFA节点732与元数据734相关联,该DFA节点与所选择的子图样704的最后元素716相关联。元数据734可以向行走器320指示一个指向滞后NFA 724的起始节点738的指针736,以及转换成在前向行走方向728行走滞后NFA 724的指令。滞后NFA 724的起始节点738可以与滞后部分708的一个第一元素740相关联。有效载荷的用于开始滞后NFA724的前向行走的起始偏移可以是所选择的子图样704的结束偏移处的字节之后的一个字节的偏移。元数据734可以向行走器320指示一个指向前导NFA 726的起始节点746的指针744,以及转换成在反向行走方向730行走前导NFA 726的指令。前导NFA 726的起始节点746可以与所选择的子图样704的一个最后兀素716相关联。有效载荷的用于开始前导NFA 726的反向行走的偏移可以是所选择的子图样704的结束偏移。元数据734可以指示行走器320上报所选择的子图样704的一次匹配,以及与DFA节点732处的所选择的子图样704的最后元素716匹配的(这些字符430中的)一个字符的有效载荷426内的(这些偏移428中的)一个偏移作为所选择的子图样704的一个结束偏移,以及所选择的子图样704的一个长度,如果该长度固定的话。
[0124]根据图7的示例实施例,编译器306可以将滞后NFA 724的滞后节点742与元数据752相关联,该滞后节点与该至少一个图样706的最后元素720相关联。元数据752可以指示行走器320终止行走滞后NFA,以及上报与滞后节点742处的该至少一个图样706的最后元素720匹配的(这些字符430中的)一个滞后字符的有效载荷426内的(这些偏移428中的)一个滞后偏移,以及上报该至少一个图样706的滞后部分708的一个匹配。
[0125]根据图7的示例实施例,编译器306可以使所生成的前导NFA724的前导节点748与元数据750相关联,该前导节点与该至少一个图样706的第一元素714相关联。元数据750可以向行走器320指示一个指令:终止行走前导NFA 726,以及上报前导部分712的一次匹配,以及与前导节点748处的该至少一个图样706的第一元素714匹配的(这些字符430中的)一个前导字符的有效载荷内的(这些偏移428中的)一个前导偏移。
[0126]图7的实施例可以被视为图6的实施例的优化,因为行走器320不需要在反向方向为滞后部分708遍历NFA。
[0127]图8是用于在所选择的子图样804的位置是该至少一个图样806的中间位置,并且所选择的子图样804的长度固定或可变的基础上生成统一 DFA 312和至少一个NFA 314的一个实施例的框图800。根据图8的示例实施例,该至少一个NFA 314是单个NFA 854。该至少一个行走方向包括一个前向行走方向828,用于单个NFA 854的与该至少一个图样806的一个滞后部分808的多个元素相关联的多个运行时间处理节点,以及一个反向行走方向830,用于单个NFA 854的与该至少一个图样806的所有元素相关联的多个运行时间处理节点。该至少一个图样806的滞后部分808是排除了该至少一个图样806的一个前导部分812的该至少一个图样806。前导部分812包括该至少一个图样806的第一元素814、所选择的子图样804的最后元素816、以及其间的该至少一个图样806中的所有元素。
[0128]根据图8的示例实施例,编译器306可以使统一 DFA 312的DFA节点832与元数据834相关联,该DFA节点与所选择的子图样804的最后元素816相关联。元数据834可以向行走器320指示一个指向单个NFA 854的起始节点856的指针836,以及转换成在前向行走方向828行走单个NFA 854的指令。起始节点856可以与该至少一个图样806中紧随所选择的子图样804的最后元素816的下一元素840相关联。元数据834可以指示行走器320上报所选择的子图样804的一次匹配,与DFA节点832处的所选择的子图样804的最后元素816匹配的(这些字符430中的)一个字符的有效载荷426内的(这些偏移428中的)一个偏移作为所选择的子图样804的一个结束偏移,以及所选择的子图样804的一个长度,如果该长度固定的话。
[0129]根据图8的示例实施例,编译器306可以将单个NFA 854的滞后节点842与元数据852相关联,该滞后节点与该至少一个图样806的最后元素820相关联,该元数据向行走器320指示一个转换成在反向行走方向830用在所选择的该子图样的结束偏移处开始的有效载荷行走单个NFA 854的指令。编译器306可以将单个NFA 854的前导节点848与元数据850相关联,该前导节点与该至少一个图样806的第一元素814相关联。元数据850可以向行走器320指示一个指令:终止行走,以及上报与前导节点848处的该至少一个图样806的第一元素814匹配的(这些字符430中的)一个字符的有效载荷426内的(这些偏移428中的)一个偏移作为该至少一个图样806的起始偏移(如果与该至少一个图样806相关联的这些限定符308中的一个限定符需要的话),以及该至少一个图样806的一次最终匹配。
[0130]图9是用于在所选择的子图样904的位置是该至少一个图样906的中间位置,并且所选择的子图样904的长度固定的基础上生成统一 DFA 312和至少一个NFA 314的一个实施例的框图。根据图9的示例实施例,该至少一个NFA 314可以是单个NFA 954,并且该至少一个行走方向包括一个反向行走方向930,用于单个NFA 954的与该至少一个图样906的一个前导部分912相关联的多个运行时间处理节点,以及一个前向行走方向928,用于单个NFA 954的与该至少一个图样906的所有元素相关联的多个运行时间处理节点。前导部分912可以是排除了该至少一个图样906的一个滞后部分908的该至少一个图样906。滞后部分908包括所选择的子图样904的第一元素918、该至少一个图样906的最后元素920、以及其间的该至少一个图样906中的所有元素。
[0131]根据图9的示例实施例,编译器306可以将统一 DFA 312的DFA节点932与元数据956相关联,该DFA节点与有所选择的子图样904的最后元素916相关联。元数据956可以向行走器320指示一个指向单个NFA 954的起始节点946的指针936,以及一个转换成在反向行走方向930行走单个NFA 954的指令。起始节点946可以与前导部分912的一个最后元素912相关联。元数据956可以指示行走器320上报所选择的子图样904的一次匹配。元数据956可以指示行走器320上报与DFA节点932处的所选择的子图样904的最后元素916匹配的(这些字符430中的)一个字符的有效载荷426内的(这些偏移428中的)一个偏移作为所选择的子图样904的一个结束偏移,以及所选择的该子图样的一个长度。行走器320可以使用长度(如果包括在元数据956中的话),以便通过从所选择的该子图样的结束偏移减去元数据956中的所选择的该子图样的长度来确定起始节点946的有效载荷起始偏移。
[0132]根据图9的示例实施例,编译器306可以使单个NFA 954的前导节点948与元数据950相关联,该前导节点与该至少一个图样906的第一元素914相关联。元数据950可以向行走器320指示一个转换成在前向行走方向928行走单个NFA 954的指令。编译器306可以使单个NFA 954的滞后节点942与元数据952相关联,该前导节点与该至少一个图样906的最后元素920相关联。元数据952可以向行走器320指示一个终止行走的指令。元数据952可以指示行走器上报与滞后节点942处的该至少一个图样906的最后元素920匹配的(这些字符430中的)一个字符的有效载荷426内的(这些偏移428中的)一个偏移,以及该至少一个图样906的一次最终匹配。
[0133]图10是用于在所选择的子图样1004的位置是该至少一个图样1006的结束位置并且所选择的子图样1004的长度固定的基础上生成统一 DFA 312和至少一个NFA 314的一个实施例的框图1000。根据图10的示例实施例,如果所选择的子图样1004的最后元素1016可以是该至少一个图样1016的最后元素,所选择的子图样1004的位置可以是该至少一个图样1006的结束位置,并且该至少一个NFA 314可以是单个NFA 1054。如果所选择的子图样1004的长度是固定的,该至少一个图样1006的用于生成单个NFA 1054的部分1012可以是排除了所选择的子图样1004的该至少一个图样1006。该至少一个行走方向可以是用于行走单个NFA 1054的反向行走方向1030。
[0134]根据图10的不例实施例,编译器306可以使对应于所选择的子图样1004的最后元素1016的DFA节点1032与元数据1052相关联。元数据1052可以向行走器320指示一个指向单个NFA 1054的起始节点1046的指针1036,以及一个转换成在反向行走方向1030行走单个NFA1054的指令。单个NFA 1046的起始节点1046与部分1012的一个最后元素1034相关联。元数据1052可以指示行走器320上报所选择的子图样1004的一次匹配,以及与DFA节点1032处的所选择的子图样1004的最后元素1016匹配的(这些字符430中的)一个字符的有效载荷426内的(这些偏移428中的)一个偏移作为所选择的子图样1004的一个结束偏移,以及所选择的子图样1004的一个长度。行走器320可以使用长度(如果包括在元数据1052中的话),以便通过从所选择的子图样1004的结束偏移减去元数据1052中的所选择的该子图样的长度来确定起始节点1046的有效载荷起始偏移。
[0135]根据图10的示例实施例,编译器306可以使与部分1012的第一元素1014相关联的NFA节点1048与元数据1050相关联。元数据1050可以向行走器320指示终止行走,以及上报该至少一个图样1006的一次最终匹配,以及与NFA节点1048处的部分1012的第一元素1014匹配的(这些字符430中的)一个字符的有效载荷426内的(这些偏移428中的)一个偏移作为该至少一个图样1006的起始偏移,如果与该至少一个图样1006相关联的这些限定符308中的一个限定符需要的话。
[0136]图11是用于在所选择的子图样1104的位置是该至少一个图样1106的结束位置并且所选择的子图样1004的长度可变或固定的基础上生成统一 DFA 312和至少一个NFA314的一个实施例的框图1100。根据图11的示例实施例,如果所选择的子图样1104的最后元素1116可以是该至少一个图样1116的最后元素,所选择的子图样1104的位置是该至少一个图样1106的结束位置,并且该至少一个NFA 314可以是单个NFA 1154。如果所选择的子图样1104的长度是固定的或可变的,该至少一个图样1106的用于生成单个NFA 1154的部分1112可以该至少一个图样1006。该至少一个行走方向可以是用于行走单个NFA 1154的反向行走方向1130。
[0137]根据图11的不例实施例,编译器306可以使对应于所选择的子图样1104的最后元素1116的DFA节点1132与元数据1152相关联。元数据1152可以向行走器320指示一个指向单个NFA 1154的起始节点1146的指针1136,以及转换成在反向行走方向1130行走单个NFA 1154的指令。单个NFA 1154的起始节点1146可以与所选择的子图样1104的一个最后元素1116相关联。元数据1152可以指示行走器320上报所选择的子图样1104的一次匹配,以及与DFA节点1132处的所选择的子图样1104的最后元素1116匹配的(这些字符430中的)一个字符的有效载荷426内的(这些偏移428中的)一个偏移作为所选择的子图样1104的一个结束偏移,以及所选择的子图样1104的一个长度,如果该长度固定的话。
[0138]根据图11的实施例,编译器306可以使与部分1112的第一元素1114相关联的NFA节点1148与元数据1150相关联。元数据1150可以向行走器320指示终止行走,并上报该至少一个图样1106的一次最终匹配。元数据1152可以向行走器320指示上报与NFA节点1148处的部分1112的第一元素1114匹配的(这些字符430中的)一个字符的有效载荷426内的(这些偏移428中的)一个偏移作为该至少一个图样1106的起始偏移,如果与该至少一个图样1106相关联的这些限定符304中的一个限定符需要的话。
[0139]图12为计算机1200内部结构的示例的框图,可以在该计算机中实施本发明的各实施例。计算机1200包含一条系统总线1202,其中,总线为用于在计算机或处理系统的组件之间进行数据传输的硬件线集合。系统总线1202实质上为一条将计算机系统的不同元件(例如,处理器、磁盘存储器、存储器、输入/输出端口、网络端口等)耦合起来的共享管道,该管道能够在这些元件之间传输信息。对系统总线1202起作用的是用于将各输入和输出设备(例如,键盘、鼠标、显示器、打印机、扩音器等)耦合到计算机1200的I/O设备接口1204。网络接口 1206允许计算机1200耦合到附接至网络的各其他设备。存储器1208为可以用于实施在本发明的实施例的计算机软件指令1210和数据1212提供易失性存储。磁盘存储器1214为可以用于实施在本发明的实施例的计算机软件指令1210和数据1212提供非易失性存储。中央处理器单元1218也对系统总线1202起作用并且提供计算机指令的执行。
[0140]可以使用计算机程序产品来配置在本发明的进一步示例实施例;例如,可以在用于实施本发明示例实施例的软件中对控制装置进行编程。本发明的进一步的实施例可以包括包含可以由处理器执行的指令的非瞬态计算机可读介质,并且当被执行时,这些指令致使处理器完成在此描述的方法。应理解的是,可以用软件、硬件、固件、或将来确定的其他类似实现方式来实现在此描述的框图和流程图中的元素。此外,可以用任何方式在软件、硬件、或固件中组合或分离在此描述的框图和流程图中的元素。
[0141]应理解到,术语“在此”可转换为结合了在此介绍的教导的申请或专利,这样使得主题、定义、或数据转入进行该结合的申请或专利内。
[0142]如果以软件形式实现,可以用可以支持在此披露的示例实施例的任何语言来编写软件。可以用计算机可读介质的形式存储软件,如随机存取存储器(RAM)、只读存储器(ROM)、光盘只读存储器(⑶-ROM)等等。在操作时,通用或专用处理器以本领域中很好理解的方式加载和执行软件。应进一步理解的是,这些框图和流程图可以包括有区别地安排或定向的、或有区别地展现的更多或更少的元素。应理解到,实现方式可以指定框图、流程图、和/或网络图和展示本发明的实施例的执行的框图和流程图的数量。
[0143]尽管本发明已经参照其示例实施例做了具体的展示和说明,本领域技术人员将理解到通过在不偏离由所附的权利要求书涵盖的本发明的范围下可以从中做出在形式和细节上的不同的变化。
【权利要求】
1.一种操作性地耦合至网络的安全装置,该安全装置包括: 至少一个存储器; 操作性地耦合至该至少一个存储器的至少一个处理器,该至少一个处理器被配置成用于: 通过用来自一个有效载荷的多个字符遍历该至少一个存储器中所存储的一个统一确定有限自动机(01^)的多个节点,使该有效载荷的多个字符走过该统一 0?八,由基于至少一种启发法从一个或多个正则表达式图样的一个集合中的每个图样所选择的多个子图样生成该统一 0“ ;以及 通过用来自该有效载荷的多个字符遍历该至少一个存储器中所存储的至少一个非确定有限自动机(研的多个节点,使该有效载荷的多个字符走过该至少一个研针对该集合中的至少一个图样生成的该至少一个研4、该至少一个图样的用于生成该至少一个研7八的一部分、以及用于使多个字符走过该至少一个研^的至少一个行走方向基于选自该至少一个图样的一个子图样的一个长度是固定的还是可变的以及所选择的该子图样在该至少一个图样内的一个位置。
2.如权利要求1所述的安全装置,其中,该至少一个处理器被进一步配置成用于在遍历该至少一个研4的与指示该至少一个图样的一次最终匹配的元数据相关联的一个八节点的基础上上报该有效载荷中的该至少一个图样的一次匹配。
3.如权利要求1所述的安全装置,其中,该至少一个处理器被配置成用于: 使一个用于该0“的一次给定行走的事务标识符与用于匹配该有效载荷中的该至少一个图样的该至少一个研%相关联;以及 在以下内容的基础上上报该有效载荷中的该至少一个图样的一次匹配: 遍历该统一 0“的具有指示该至少一个图样的一次0“部分匹配的元数据的一个0?八节点; 随后遍历该至少一个研4的具有指示该至少一个图样的一次研4部分匹配的元数据的至少一个即八节点;以及 使该遍历和随后的该遍历与该事务标识符相关。
4.如权利要求1所述的安全装置,其中,该至少一个处理器被进一步配置成用于基于以下内容上报该有效载荷中与该至少一个图样的一个第一元素匹配的一个字符的一个偏移作为该有效载荷中的该至少一个图样的一个起始偏移: 与该至少一个研^的一个研^节点相关联并指示该有效载荷中的该至少一个图样的一次最终匹配的元数据;以及 与该统一 0?八的一个0?八节点相关联并在该0?八节点处指示(1)为该至少一个图样选择的该子图样的一个长度、以及(11)该有效载荷中与为该至少一个图样选择的该子图样的一个最后元素匹配的一个子图样字符的一个子图样结束偏移的元数据,该至少一个处理器在从该子图样结束偏移减去该长度的基础上确定该起始偏移。
5.如权利要求1所述的安全装置,其中,该至少一个处理器被进一步配置成用于:在使与该统一 0“的多个节点相关联的元数据所指示的多个部分匹配结果和该至少一个图样的该至少一个研仏相关的基础上,在该至少一个研^的一个研4节点处,将与该至少一个图样的一个第一元素匹配的该有效载荷中的一个字符的一个偏移作为该有效载荷中的该至少一个图样的一个起始偏移上报。
6.如权利要求1所述的安全装置,其中,该至少一个处理器被进一步配置成用于:在该至少一个研4的一个研4节点处的与该研4节点相关联的元数据以及在为该有效载荷中的该至少一个图样确定的一次最终匹配的基础上,在该研4节点处,将与该至少一个图样的一个第一元素匹配的该有效载荷中的一个字符的一个偏移作为该有效载荷中的该至少一个图样的一个起始偏移上报。
7.如权利要求1所述的安全装置,其中,该至少一种启发法包括将所选择的唯一子图样数量和所选择的每个子图样的长度最大化,所选择的每个子图样的该长度至少具有一个最小阈值长度。
8.如权利要求1所述的安全装置,其中,如果所选择的该子图样的一个第一元素是该至少一个图样的一个第一元素并且所选择的该子图样的该长度是固定的,所选择的该子图样的该位置是该至少一个图样的一个开始位置,该至少一个图样的用于生成该至少一个^的该部分是排除了所选择的该子图样的该至少一个图样,该至少一个研4是单个八,并且该至少一个研^的该至少一个行走方向是一个前向行走方向。
9.如权利要求8所述的安全装置,其中,该统一0?八包括: 一个0…节点,与所选择的该子图样的该最后元素和向该至少一个处理器指示下列内容的元数据相关联:一个指向该至少一个X?八的一个起始节点的指针,一个指令:转向在一个前向行走方向行走该至少一个研4,该至少一个研4的该起始节点与该至少一个图样的用于生成该至少一个研4的该部分的一个第一元素相关联,该至少一个研^的一个有效载荷起始偏移与所选择的该子图样的该结束偏移处的另一字节之后的一个字节的一个偏移相关联,以及上报所选择的该子图样的一次匹配,以及该0“节点处的与所选择的该子图样的该最后兀素匹配的一个前导字符的该有效载荷内的一个前导偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度。
10.如权利要求8所述的安全装置,其中,该至少一个研4包括: 一个研4节点,与向该至少一个处理器指示下列内容的元数据相关联:一个指令,以及上报:终止该行走,该研4节点与该至少一个图样的一个最后元素相关联在该研4节点处匹配的一个滞后字符的该有效载荷内的一个滞后偏移作为该至少一个图样的一个结束偏移,和该至少一个图样的一次最终匹配。
11.如权利要求1所述的安全装置,其中,如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置是该至少一个图样的一个中间位置,并且如果所选择的该子图样的该长度是固定的: 该至少一个图样的用于生成该至少一个研^的该部分包括该至少一个图样的一个滞后部分和一个前导部分,该至少一个图样的该滞后部分是排除了该至少一个图样的所选择的该子图样和该前导部分的该至少一个图样,该至少一个图样的该前导部分排除了该至少一个图样的所选择的该子图样和该滞后部分;以及 该至少一个研^包括一个滞后研^和一个前导研该至少一个行走方向包括一个前向行走方向和一个反向行走方向,该滞后八具有该前向行走方向,该前导X?八具有该反向行走方向,该至少一个图样的该滞后部分用于生成该滞后研并且该至少一个图样的该前导部分用于生成该前导八。
12.如权利要求11所述的安全装置,其中,该统一0?八包括: 一个0“节点,与所选择的该子图样的该最后元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指向该滞后八的一个起始节点的指针,一个转换成在该前向行走方向行走该滞后研^的指令,该滞后研4的该起始节点与该滞后部分的一个第一元素相关联;一个指向该前导研^的一个起始节点的指针;一个指令:转换成在该反向行走方向行走该前导研该前导研^的该起始节点与该前导部分的一个最后元素相关联,以及上报与该0…节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,所选择的该子图样的一次匹配,以及所选择的该子图样的一个长度。
13.如权利要求11所述的安全装置,其中,该至少一个研4包括: 该滞后研4的一个滞后节点,与该至少一个图样的该最后元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指令:终止行走该滞后研4以及上报与该滞后节点处的该最后元素匹配的该有效载荷的一个滞后字符的该有效载荷内的一个滞后偏移,以及该至少一个图样的该滞后部分的一次匹配;以及 该前导研^的一个前导节点,与该至少一个图样的该第一元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指令:终止行走该前导研4以及上报该至少一个图样的该前导部分的一次匹配,以及与该前导节点处的该第一元素匹配的该有效载荷的一个前导字符的该有效载荷内的一个前导偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话。
14.如权利要求1所述的安全装置,其中,如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置是该至少一个图样的一个中间位置,并且如果所选择的该子图样的该第一元素是该至少一个图样的该第一元素,所选择的该子图样的该位置是该至少一个图样的该开始位置,并且如果该子图样的该长度是固定的或可变的: 该至少一个图样的用于生成该至少一个研^的该部分包括该至少一个图样的一个滞后部分和一个整个部分,该至少一个图样的该滞后部分是排除了该至少一个图样的一个前导部分的该至少一个图样,该前导部分包括该至少一个图样的该第一元素、所选择的该子图样的该最后元素、以及其间的该至少一个图样中的所有元素,该至少一个图样的该整个部分是该至少一个图样,如果所选择的该子图样的该位置是一个开始位置,该前导部分是所选择的该子图样;以及 该至少一个研^包括一个滞后研^和一个伞状研该至少一个行走方向包括一个前向行走方向和一个反向行走方向,该滞后八具有该前向行走方向,该伞状X?八具有该反向行走方向,该至少一个图样的该滞后部分用于生成该滞后研并且该至少一个图样的该整个部分用于生成该伞状八。
15.如权利要求14所述的安全装置,其中,该统一0?八包括: 一个0“节点,与所选择的该子图样的该最后元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指向该滞后贈^的一个起始节点的指针;一个指令:转换成在该前向行走方向行走该滞后研4,该滞后研4的该起始节点与该滞后部分的一个第一元素相关联,以及上报所选择的该子图样的一次匹配,以及与该0“节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度,如果该长度是固定的。
16.如权利要求14所述的安全装置,其中,该至少一个研4包括: 一个滞后节点,与该至少一个图样的该最后元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指向该伞状八的一个起始节点的指针;一个指令:转换成在该反向行走方向行走该伞状研该伞状研^的该起始节点与该至少一个图样的该最后元素相关联;以及可选地上报与该滞后节点处的该至少一个图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移;以及可选地上报该至少一个图样的该滞后部分的一次匹配;以及 该伞状研^的一个伞状节点,与该至少一个图样的该第一元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指令:终止该行走以及上报该至少一个图样的一次最终匹配,以及与该伞状节点处的该至少一个图样的该第一元素匹配的一个起始字符的该有效载荷内的一个起始偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话。
17.如权利要求1所述的安全装置,其中,如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置是该至少一个图样的一个中间位置,并且如果所选择的该子图样的该第一元素是该至少一个图样的该第一元素,所选择的该子图样的该位置是该至少一个图样的一个开始位置,并且如果该子图样的该长度是固定的或可变的: 该至少一个图样的用于生成该至少一个研^的该部分包括该至少一个图样的一个滞后部分和一个前导部分,该至少一个图样的该滞后部分是排除了该至少一个图样的该前导部分的该至少一个图样,该前导部分包括该至少一个图样的该第一元素、所选择的该子图样的该最后元素、以及其间的该至少一个图样中的所有元素,如果所选择的该子图样的该位置是该开始位置,该滞后部分是所选择的该子图样;以及 该至少一个研^包括一个滞后研^和一个前导研该至少一个行走方向包括一个前向行走方向和一个反向行走方向,该滞后八具有该前向行走方向,该前导X?八具有该反向行走方向,该至少一个图样的该滞后部分用于生成该滞后研并且该至少一个图样的该前导部分用于生成该前导八。
18.如权利要求17所述的安全装置,其中,该统一0?八包括: 一个0“节点,与所选择的该子图样的该最后元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指向该滞后八的一个起始节点的指针;一个转换成在该前向行走方向行走该滞后研^的指令,该滞后研4的该起始节点与该滞后部分的一个第一元素相关联;一个指向该前导研^的一个起始节点的指针;一个指令:转换成在该反向行走方向行走该前导研该前导研^的该起始节点与所选择的该子图样的一个最后元素相关联,以及上报所选择的该子图样的一次匹配,以及与该0“节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度,如果该长度是固定的。
19.如权利要求17所述的安全装置,其中,该至少一个研4包括: 一个滞后节点,与该至少一个图样的该最后元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指令:终止行走该滞后研4以及上报与该滞后节点处的该至少一个图样的该最后兀素匹配的一个滞后字符的该有效载荷内的一个滞后偏移,以及上报该至少一个图样的该滞后部分的一次匹配;以及 一个前导节点,与该至少一个图样的该第一元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指令终止行走该前导研4以及上报该前导部分的一次匹配,以及与该前导节点处的该至少一个图样的该第一元素匹配的一个前导字符的该有效载荷内的一个前导偏移。
20.如权利要求1所述的安全装置,其中,如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置是该至少一个图样的一个中间位置,并且如果所选择的该子图样的该长度是固定的或可变的: 该至少一个是单个晰7\,并且该至少一个行走方向包括一个前向行走方向,用于该单个研4的与该至少一个图样的一个滞后部分的多个元素相关联的多个运行时间处理节点,以及一个反向行走方向,用于该单个~?八的与该至少一个图样的所有元素相关联的多个运行时间处理节点,该至少一个图样的该滞后部分是排除了该至少一个图样的一个前导部分的该至少一个图样,该前导部分包括该至少一个图样的该第一元素、所选择的该子图样的该最后元素、以及其间的该至少一个图样中的所有元素。
21.如权利要求20所述的安全装置,其中,该统一0?八包括: 一个0“节点,与所选择的该子图样的该最后元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指向该单个八的一个起始节点的指针;一个指令:转换成在该前向行走方向行走该单个研该起始节点与该至少一个图样中紧接着所选择的该子图样的该最后元素的一个下一元素相关联,以及上报所选择的该子图样的一次匹配,与该0…节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度,如果该长度是固定的。
22.如权利要求20所述的安全装置,其中,该至少一个研4包括: 一个滞后节点,与该至少一个图样的一个最后元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个转换成使用与所选择的该子图样的该结束偏移相关联的一个有效载荷起始偏移向在该反向行走方向行走该单个研^的指令;以及 一个前导节点,与该至少一个图样的该第一元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指令:终止该行走以及上报与该前导节点处的该至少一个图样的该第一元素匹配的一个字符的该有效载荷内的一个偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话,以及该至少一个图样的一次最终匹配。
23.如权利要求1所述的安全装置,其中,如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置是该至少一个图样的一个中间位置,并且如果所选择的该子图样的该长度是固定的: 该至少一个研4是单个研4,并且该至少一个行走方向包括一个反向行走方向,用于该单个研4的与该至少一个图样的一个前导部分相关联的多个运行时间处理节点,以及一个正向行走方向,用于该单个研4的与该至少一个图样的所有元素相关联的多个运行时间处理节点,该前导部分是排除了该至少一个图样的一个滞后部分的该至少一个图样,该滞后部分包括所选择的该子图样的该第一元素、该至少一个图样的该最后元素、以及其间的该至少一个图样中的所有元素。
24.如权利要求23所述的安全装置,其中,该统一0?八包括: 一个0“节点,与所选择的该子图样的该最后元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指向该单个八的一个起始节点的指针;一个指令:转换成在反向行走方向行走该单个研4,该起始节点与该前导部分的一个最后元素相关联,通过从所选择的该子图样的该结束偏移减去所选择的该子图样的一个长度来确定一个有效载荷起始偏移,以及上报所选择的该子图样的一次匹配,与该0“节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的该长度。
25.如权利要求23所述的安全装置,其中,该至少一个研4包括: 一个前导节点,与该至少一个图样的一个第一元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个转换成在该正向行走方向行走该单个研%的指令;以及 一个滞后节点,与该至少一个图样的该最后元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:一个指令终止该行走以及上报与该滞后节点处的该至少一个图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移,以及该至少一个图样的一个最后匹配。
26.如权利要求1所述的安全装置,其中,如果所选择的该子图样的一个最后元素是该至少一个子图样的一个最后元素,所选择的该子图样的该位置是该至少一个子图样的一个结束位置,并且如果所选择的该子图样的该长度是固定的,该至少一个图样的用于生成该至少一个研4的该部分是排除了所选择的该子图样的该至少一个图样,并且该至少一个行走方向是一个反向行走方向。
27.如权利要求26所述的安全装置,其中,该统一0?八包括: 一个0“节点,与所选择的该子图样的该最后元素相对应,与向该至少一个处理器指示下列内容的元数据相关联:一个指向该至少一个X?八的一个起始节点的指针;一个指令:转换成在一个反向行走方向行走该至少一个晰'八,该至少一个的该起始节点与该部分的一个最后元素相关联,以及上报所选择的该子图样的一次匹配,以及与该0“节点处的所选择的该子图样的该最后兀素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,通过从所选择的该子图样的该结束偏移减去所选择的该子图样的一个长度所确定的该至少一个研^的一个有效载荷起始偏移,如果该长度是固定的。
28.如权利要求26所述的安全装置,其中,该至少一个研4包括: 一个研4节点,与该部分的一个第一元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:终止该行走,以及上报该至少一个图样的一次最终匹配,以及与该八节点处的该部分的该第一元素匹配的一个字符的该有效载荷内的一个偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话。
29.如权利要求1所述的安全装置,其中,如果所选择的该子图样的一个最后元素是该至少一个子图样的一个最后元素,所选择的该子图样的该位置是该至少一个子图样的一个结束位置,并且如果所选择的该子图样的该长度是可变的或固定的,该至少一个图样的用于生成该至少一个研^的该部分是该至少一个图样,并且该至少一个行走方向是一个反向行走方向。
30.如权利要求29所述的安全装置,其中,该统一0?八包括: 一个0“节点,与所选择的该子图样的该最后元素相对应,与向该至少一个处理器指示下列内容的元数据相关联:一个指向该至少一个X?八的一个起始节点的指针;一个指令:转换成在一个反向行走方向行走该至少一个晰'八,该至少一个的该起始节点与所选择该子图样的一个最后元素相关联,以及上报所选择的该子图样的一次匹配,以及与该0?八节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度,如果该长度是固定的,该至少一个研^的一个有效载荷起始偏移与所选择的该子图样的该结束偏移相关联。
31.如权利要求29所述的安全装置,其中,该至少一个研4包括: 一个研4节点,与该部分的一个第一元素相关联,与向该至少一个处理器指示下列内容的元数据相关联:终止该行走,以及上报该至少一个图样的一次最终匹配,以及与该八节点处的该部分的该第一元素匹配的一个字符的该有效载荷内的一个偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话。
32.如权利要求1所述的安全装置,其中,将该统一0?八和该至少一个研4存储为包括该统一 0?八和该至少一个研4的一个二进制图像。
33.如权利要求1所述的安全装置,其中,该至少一个处理器包括被配置成一个加速单元以分别分流0“和研4运行时间处理的一个0“协处理器和一个研4协处理器。
34.—种方法,包括: 在操作性地耦合至一个网络的一个安全装置中的操作性地耦合至至少一个存储器的至少一个处理器中: 通过用来自一个有效载荷的多个字符遍历该至少一个存储器中所存储的一个统一确定有限自动机(01^)的多个节点,使该有效载荷的多个字符走过该统一 0?八,由基于至少一种启发法从一个或多个正则表达式图样的一个集合中的每个图样所选择的多个子图样生成该统一 0“ ;以及 通过用来自该有效载荷的多个字符遍历该至少一个存储器中所存储的至少一个非确定有限自动机(研的多个节点,使该有效载荷的多个字符走过该至少一个研针对该集合中的至少一个图样生成的该至少一个研4、该至少一个图样的用于生成该至少一个研7八的一部分、以及用于使多个字符走过该至少一个研^的至少一个行走方向基于选自该至少一个图样的一个子图样的一个长度是固定的还是可变的以及所选择的该子图样在该至少一个图样内的一个位置。
35.如权利要求34所述的方法,进一步包括在遍历该至少一个研4的与指示该至少一个图样的一次最终匹配的元数据相关联的一个研4节点的基础上上报该有效载荷中的该至少一个图样的一次匹配。
36.如权利要求34所述的方法,进一步包括: 将一个用于该0“的一次给定行走的事务标识符与用于匹配该有效载荷中的该至少一个图样的该至少一个研%相关联;以及 在以下内容的基础上上报该有效载荷中的该至少一个图样的一次匹配: 遍历该统一 0“的具有指示该至少一个图样的一次0“部分匹配的元数据的一个0?八节点; 随后遍历该至少一个研4的具有指示该至少一个图样的一次研4部分匹配的元数据的至少一个即八节点;以及 使该遍历和随后的该遍历与该事务标识符相关。
37.如权利要求34所述的方法,进一步包括基于以下内容将该有效载荷中与该至少一个图样的一个第一元素匹配的一个字符的一个偏移作为该有效载荷中的该至少一个图样的一个起始偏移上报: 与该至少一个研^的一个研^节点相关联并指示该有效载荷中的该至少一个图样的一次最终匹配的元数据;以及 与该统一 0?八的一个0?八节点相关联并在该0?八节点处指示(1)为该至少一个图样选择的该子图样的一个长度、以及(11)该有效载荷中与为该至少一个图样选择的该子图样的一个最后元素匹配的一个子图样字符的一个子图样结束偏移的元数据,该至少一个处理器在从该子图样结束偏移减去该长度的基础上确定该起始偏移。
38.如权利要求34所述的方法,进一步包括:在使与该统一0?八的多个节点相关联的元数据中所指示的多个部分匹配结果与该至少一个图样的该至少一个研%相关的基础上,上报与该至少一个研4的一个研4节点处的该至少一个图样的一个第一元素匹配的该有效载荷的一个字符的一个偏移作为该有效载荷中的该至少一个图样的一个起始偏移。
39.如权利要求34所述的方法,进一步包括:在与该研4节点相关联的元数据以及在该研4节点处为该有效载荷中的该至少一个图样所确定的一次最终匹配的基础上,上报该至少一个研4的一个研4节点处的与该至少一个图样的一个第一元素匹配的该有效载荷的一个字符的一个偏移作为该有效载荷中的该至少一个图样的一个起始偏移。
40.如权利要求34所述的方法,其中,该至少一种启发法包括将所选择的唯一子图样的数量和所选择的每个子图样的长度最大化,所选择的每个子图样的该长度至少具有一个最小阈值长度。
41.如权利要求34所述的方法,其中,如果所选择的该子图样的一个第一元素是该至少一个子图样的一个第一元素并且所选择的该子图样的该长度是固定的,所选择的该子图样的该位置是该至少一个子图样的一个开始位置,该至少一个图样的用于生成该至少一个^的该部分是排除了所选择的该子图样的该至少一个图样,该至少一个研4是单个八,并且该至少一个研^的该至少一个行走方向是一个前向行走方向。
42.如权利要求41所述的方法,进一步包括:在该统一0“的与所选择的该子图样的该最后元素和向该至少一个处理器指示一个指向该至少一个研4的一个起始节点的指针的元数据相关联的一个0?八节点处: 转换成在一个前向行走方向行走该至少一个晰'八,该至少一个晰'八的该起始节点与该至少一个图样的用于生成该至少一个研4的该部分的一个第一元素相关联,该至少一个X?八的一个有效载荷起始偏移与所选择的该子图样的该结束偏移处的另一字节之后的一个字节的一个偏移相关联;以及 上报所选择的该子图样的一次匹配,与该0…节点处所选择的该子图样的该最后元素匹配的一个前导字符的该有效载荷内的一个前导偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度。
43.如权利要求41所述的方法,进一步包括,在该至少一个研4的与元数据相关联的一个即八节点处: 终止该行走,该研%节点与该至少一个图样的一个最后元素相关联;以及 上报在该晰'八节点处匹配的一个滞后字符的该有效载荷内的一个滞后偏移作为该至少一个图样的一个结束偏移,以及该至少一个图样的一次最终匹配。
44.如权利要求34所述的方法,其中,如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置是该至少一个图样的一个中间位置,并且如果所选择的该子图样的该长度是固定的: 该至少一个图样的用于生成该至少一个研^的该部分包括该至少一个图样的一个滞后部分和一个前导部分,该至少一个图样的该滞后部分是排除了该至少一个图样的所选择的该子图样和该前导部分的该至少一个图样,该至少一个图样的该前导部分排除了该至少一个图样的所选择的该子图样和该滞后部分;以及 该至少一个研^包括一个滞后研4和一个前导研4,该至少一个行走方向包括一个前向行走方向和一个反向行走方向,该滞后八具有该前向行走方向,该前导X?八具有该反向行走方向,该至少一个图样的该滞后部分用于生成该滞后研并且该至少一个图样的该前导部分用于生成该前导八。
45.如权利要求34所述的方法,进一步包括:在该统一0“的与所选择的该子图样的该最后元素和向该至少一个处理器指示一个指向该滞后研4的一个起始节点的指针和一个指向该前导八的一个起始节点的指针的元数据相关联的一个0?八节点处: 使该统一 0?八的行走转换成在该前向行走方向行走该滞后研4,该滞后研4的该起始节点与该滞后部分的一个第一元素相关联; 使行走该滞后八转换成在该反向行走方向行走该前导八,该前导八的该起始节点与该前导部分的一个最后元素相关联;以及 上报与该0“节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,所选择的该子图样的一次匹配,以及所选择的该子图样的一个长度。
46.如权利要求34所述的方法,其中,该方法进一步包括: 在该滞后研4的与该至少一个图样的该最后元素相关联、与元数据相关联的一个滞后节点处: 终止行走该滞后晰'八;以及 上报与该滞后节点处的该最后元素匹配的该有效载荷的一个滞后字符的该有效载荷内的一个滞后偏移,以及该至少一个图样的该滞后部分的一次匹配;以及 在该前导研4的与该至少一个图样的该第一元素相关联、与元数据相关联的一个前导节点处: 终止行走该前导;以及 上报该至少一个图样的该前导部分的一次匹配,以及与该前导节点处该第一元素匹配的该有效载荷的一个前导字符的该有效载荷内的一个前导偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话。
47.如权利要求34所述的方法,其中,如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置是该至少一个图样的一个中间位置,并且如果所选择的该子图样的该第一元素是该至少一个图样的该第一元素,所选择的该子图样的该位置是该至少一个图样的该开始位置,并且如果该子图样的该长度是固定的或可变的: 该至少一个图样的用于生成该至少一个研^的该部分包括该至少一个图样的一个滞后部分和一个整个部分,该至少一个图样的该滞后部分是排除了该至少一个图样的一个前导部分的该至少一个图样,该前导部分包括该至少一个图样的该第一元素、所选择的该子图样的该最后元素、以及其间的该至少一个图样中的所有元素,该至少一个图样的该整个部分是该至少一个图样,如果所选择的该子图样的该位置是一个开始位置,该前导部分是所选择的该子图样;以及 该至少一个研^包括一个滞后研^和一个伞状研该至少一个行走方向包括一个前向行走方向和一个反向行走方向,该滞后八具有该前向行走方向,该伞状X?八具有该反向行走方向,该至少一个图样的该滞后部分用于生成该滞后研并且该至少一个图样的该整个部分用于生成该伞状八。
48.如权利要求47所述的方法,其中,该方法进一步包括:在该统一0“的与所选择的该子图样的该最后元素相关联、与向该至少一个处理器指示一个指向该滞后研%的一个起始节点的指针的元数据相关联的一个0“节点处: 使该统一 0?八的行走转换成在该前向行走方向行走该滞后研4,该滞后研4的该起始节点与该滞后部分的一个第一元素相关联;以及 上报所选择的该子图样的一次匹配,以及与该0“节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度,如果该长度是固定的。
49.如权利要求47所述的方法,其中,该方法进一步包括: 在该至少一个研4的与该至少一个图样的该最后元素相关联、与向该至少一个处理器指示一个指向该伞状研^的一个起始节点的指针的元数据相关联的一个滞后节点处: 使该滞后研^的行走转换成在该反向行走方向行走该伞状研4,该伞状研4的该起始节点与该至少一个图样的该最后元素相关联;以及 可选地上报与该滞后节点处的该至少一个图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移;以及 可选地上报该至少一个图样的该滞后部分的一次匹配;以及 在该伞状研4的与该至少一个图样的该第一元素相关联、与元数据相关联的一个伞状节点处: 终止该行走;以及 上报该至少一个图样的一次最终匹配,以及与该伞状节点处的该至少一个图样的该第一元素匹配的一个起始字符的该有效载荷内的一个起始偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话。
50.如权利要求34所述的方法,其中,如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置是该至少一个图样的一个中间位置,并且如果所选择的该子图样的该第一元素是该至少一个图样的该第一元素,所选择的该子图样的该位置是该至少一个图样的一个开始位置,并且如果该子图样的该长度是固定的或可变的: 该至少一个图样的用于生成该至少一个研^的该部分包括该至少一个图样的一个滞后部分和一个前导部分,该至少一个图样的该滞后部分是排除了该至少一个图样的该前导部分的该至少一个图样,该前导部分包括该至少一个图样的该第一元素、所选择的该子图样的该最后元素、以及其间的该至少一个图样中的所有元素,如果所选择的该子图样的该位置是该开始位置,该滞后部分是所选择的该子图样;以及 该至少一个研^包括一个滞后研^和一个前导研该至少一个行走方向包括一个前向行走方向和一个反向行走方向,该滞后八具有该前向行走方向,该前导X?八具有该反向行走方向,该至少一个图样的该滞后部分用于生成该滞后研并且该至少一个图样的该前导部分用于生成该前导八。
51.如权利要求34所述的方法,进一步包括:在该统一0“的与所选择的该子图样的该最后元素相关联、与向该至少一个处理器指示一个指向该滞后研4的一个起始节点的指针和一个指向该前导八的一个起始节点的指针的元数据相关联的一个0?八节点处: 使该统一 0?八的行走转换成在该前向行走方向行走该滞后研4,该滞后研4的该起始节点与该滞后部分的一个第一元素相关联;以及 使该统一 0?八的行走转换成在该反向行走方向行走该前导研4,该前导研4的该起始节点与所选择的该子图样的一个最后元素相关联;以及 上报所选择的该子图样的一次匹配,以及与该0“节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度,如果该长度是固定的。
52.如权利要求34所述的方法,进一步包括: 在该至少一个研4的与该至少一个图样的该最后元素相关联、与元数据相关联的一个滞后节点处: 终止行走该滞后研%,并且该方法进一步包括上报与该滞后节点处的该至少一个图样的该最后兀素匹配的一个滞后字符的该有效载荷内的一个滞后偏移,以及 上报该至少一个图样的该滞后部分的一次匹配;以及 在至少一个研4的与该至少一个图样的该第一元素相关联、与元数据相关联的该一个前导节点处: 终止行走该前导;以及 上报该前导部分的一次匹配,以及与该前导节点处的该至少一个图样的该第一元素匹配的一个前导字符的该有效载荷内的一个前导偏移。
53.如权利要求34所述的方法,其中,如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置是该至少一个图样的一个中间位置,并且如果所选择的该子图样的该长度是固定的或可变的: 该至少一个是单个晰7\,并且该至少一个行走方向包括一个前向行走方向,用于该单个研4的与该至少一个图样的一个滞后部分的多个元素相关联的多个运行时间处理节点,以及一个反向行走方向,用于该单个~?八的与至少一个图样的所有元素相关联的多个运行时间处理节点,该至少一个图样的该滞后部分是排除了该至少一个图样的一个前导部分的该至少一个图样,该前导部分包括该至少一个图样的该第一元素、所选择的该子图样的该最后元素、以及其间的该至少一个图样中的所有元素。
54.如权利要求53所述的方法,进一步包括,在该统一0“的与所选择的该子图样的该最后元素相关联、与向该至少一个处理器指示一个指向该单个研4的一个起始节点的指针的元数据相关联的一个0?八节点处: 使行走该统一 0?八转换成在该前向行走方向行走该单个研4,该起始节点与该至少一个图样中的紧跟着所选择的该子图样的该最后元素的一个下一元素相关联;以及 上报所选择的该子图样的一次匹配,与该0…节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度,如果该长度是固定的。
55.如权利要求53所述的方法,进一步包括: 在该至少一个研%的与该至少一个图样的一个最后元素相关联、与元数据相关联的一个滞后节点处: 使用与所选择的该子图样的该结束偏移相关联的一个有效载荷起始偏移,使行走该统一 0?八转换成在该反向行走方向行走该单个研4 ;以及 在该至少一个研%的与该至少一个图样的该第一元素相关联、与元数据相关联的一个前导节点处: 终止该行走;以及 上报与该前导节点处的该至少一个图样的该第一元素匹配的一个字符的该有效载荷内的一个偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话,以及该至少一个图样的一次最终匹配。
56.如权利要求34所述的方法,其中,如果所选择的该子图样的一个第一元素不是该至少一个图样的一个第一元素,并且所选择的该子图样的一个最后元素不是该至少一个图样的一个最后元素,所选择的该子图样的该位置是该至少一个图样的一个中间位置,并且如果所选择的该子图样的该长度是固定的: 该至少一个研^是单个研4,并且该至少一个行走方向包括一个反向行走方向,用于该单个研4的与该至少一个图样的一个前导部分相关联的多个运行时间处理节点,以及一个正向行走方向,用于该单个研4的与该至少一个图样的所有元素相关联的多个运行时间处理节点,该前导部分是排除了该至少一个图样的一个滞后部分的该至少一个图样,该滞后部分包括所选择的该子图样的该第一元素、该至少一个图样的该最后元素、以及其间的该至少一个图样中的所有元素。
57.如权利要求56所述的方法,该方法进一步包括: 在该统一 0“的与所选择的该子图样的该最后元素相关联、与向该至少一个处理器指示一个指向该单个八的一个起始节点的指针的元数据相关联的一个0?八节点处: 使该统一 0?八的行走转换成在该反向行走方向行走该单个研4,该起始节点与该前导部分的一个最后元素相关联,通过从所选择的该子图样的该结束偏移减去所选择的该子系统的一个长度来确定一个有效载荷起始偏移;以及 上报所选择的该子图样的一次匹配,以及与该0“节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的该长度。
58.如权利要求56所述的方法,该方法进一步包括: 在该单个研4的与该至少一个图样的一个第一元素相关联、与元数据相关联的一个前导节点处: 在该前向行走方向行走该单个八;以及 在该单个研4的与该至少一个图样的该最后元素相关联、与元数据相关联的一个滞后节点处: 终止该行走;以及 上报与该滞后节点处的该至少一个图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移,以及该至少一个图样的一次最终匹配。
59.如权利要求34所述的犯法,其中,如果所选择的该子图样的一个最后元素是该至少一个子图样的一个最后元素,所选择的该子图样的该位置是该至少一个子图样的一个结束位置,并且如果所选择的该子图样的该长度是固定的,该至少一个图样的用于生成该至少一个研4的该部分是排除了所选择的该子图样的该至少一个图样,并且该至少一个行走方向是一个反向行走方向。
60.如权利要求59所述的方法,进一步包括: 在该统一 0“与所选择的该子图样的该最后元素相对应的、与向该至少一个处理器指示一个指向该至少一个晰'八的一个起始节点的指针的元数据相关联的一个0?八节点处: 使该统一 0?八的行走转换成在该反向行走方向行走该至少一个研4,该至少一个X?八的该起始节点与该部分的一个最后元素相关联;以及 上报所选择的该子图样的一次匹配,以及与该0“节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,通过从所选择的该子图样的该结束偏移减去所选择的该子图样的一个长度所确定的该至少一个研4的一个有效载荷起始偏移,如果该长度是固定的。
61.如权利要求59所述的方法,进一步包括: 在该至少一个研%的与该部分的一个第一元素相关联、与元数据相关联的一个X?八节点处: 终止该行走;以及 上报该至少一个图样的一次最终匹配,以及与该研4节点处的该部分的该第一元素匹配的一个字符的该有效载荷内的一个偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话。
62.如权利要求34所述的方法,其中,如果所选择的该子图样的一个最后元素是该至少一个子图样的一个最后元素,所选择的该子图样的该位置是该至少一个子图样的一个结束位置,并且如果所选择的该子图样的该长度是可变的或固定的,该至少一个图样的用于生成该至少一个研^的该部分是该至少一个图样,并且该至少一个行走方向是一个反向行走方向。
63.如权利要求62所述的方法,进一步包括: 在该统一 0…的与所选择的该子图样的该最后元素相对应的、与向该至少一个处理器指示一个指向该至少一个八的一个起始节点的指针的元数据相关联的一个0?八节点处: 使该统一 0?八的行走转换成在该反向行走方向行走该至少一个研4,该至少一个X?八的该起始节点与所选择的该子图样的一个最后元素相关联;以及 上报所选择的该子图样的一次匹配,以及与该0“节点处的所选择的该子图样的该最后元素匹配的一个字符的该有效载荷内的一个偏移作为所选择的该子图样的一个结束偏移,以及所选择的该子图样的一个长度,如果该长度是固定的,该至少一个研^的一个有效载荷起始偏移与所选择的该子图样的该结束偏移相关联。
64.如权利要求62所述的方法,进一步包括: 在该至少一个研%的与该部分的一个第一元素相关联、与元数据相关联的一个X?八节点处: 终止该行走;以及 上报该至少一个图样的一次最终匹配,以及与该研4节点处的该部分的该第一元素匹配的一个字符的该有效载荷内的一个偏移作为该至少一个图样的一个起始偏移,如果与该至少一个图样相关联的一个限定符需要的话。
65.如权利要求34所述的方法,其中,将该统一0?八和该至少一个研4存储为包括该统一 0?八和该至少一个研4的一个二进制图像。
66.如权利要求34所述的方法,其中,该至少一个处理器包括被配置成一个加速单元以分别分流0?八和研4运行时间处理的一个0?八协处理器和一个研4协处理器。
67.一种非瞬态计算机可读介质,其上存储有一个指令序列,当被一个处理器加载和执行时,该指令序列致使该处理器: 通过用来自一个有效载荷的多个字符遍历该至少一个存储器中所存储的一个统一确定有限自动机(01^)的多个节点,使该有效载荷的多个字符走过该统一 0?八,由基于至少一种启发法从一个或多个正则表达式图样的一个集合中的每个图样所选择的多个子图样生成该统一 0“ ;以及 通过用来自该有效载荷的多个字符遍历该至少一个存储器中所存储的至少一个非确定有限自动机(研的多个节点,使该有效载荷的多个字符走过该至少一个研针对该集合中的至少一个图样生成的该至少一个研4、该至少一个图样的用于生成该至少一个研7八的一部分、以及用于使多个字符走过该至少一个研^的至少一个行走方向基于选自该至少一个图样的一个子图样的一个长度是固定的还是可变的以及所选择的该子图样在该至少一个图样内的一个位置。
【文档编号】H04L29/06GK104426910SQ201410432198
【公开日】2015年3月18日 申请日期:2014年8月28日 优先权日:2013年8月30日
【发明者】S·L·比拉, R·戈亚尔 申请人:凯为公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1