用于编译有限自动机的方法和装置制造方法

文档序号:7812873阅读:140来源:国知局
用于编译有限自动机的方法和装置制造方法
【专利摘要】提供一种使用确定性有限自动机(DFA)和非确定性有限自动机(NFA)来实施运行时间处理以发现在净荷中存在的模式的方法和对应装置。可以基于至少一个试探从在一个或者多个正则表达式模式的集合中的每个模式选择子模式,并且可以使用从在集合中的所有模式选择的子模式来生成统一的确定性有限自动机(DFA),而且可以为在集合中的至少一个模式生成至少一个非确定性的有限自动机(NFA)从而优化运行时间处理的运行时间性能。
【专利说明】用于编译有限自动机的方法和装置

【背景技术】
[0001]开放系统互连(OSI)参考模型定义用来通过传输介质通信的七个网络协议层(L1-L7)。更高层(L4-L7)代表端到端通信而更低层(L1-L3)代表本地通信。
[0002]网络应用感知系统需要处理、过滤和切换范围从L3至L7的网络协议层、例如L7网络协议层诸如超文本传送协议(HTTP)和简单邮件传送协议(SMTP)以及L4网络协议层诸如传输控制协议(TCP)。除了处理网络协议层之外,网络应用感知系统还需要同时保护这些协议,而通过L4-L7网络协议层的基于访问和内容的安全性包括线速的防火墙、虚拟专用网(VPN)、安全套接字层(SSL)、入侵检测系统(IDS)、网际协议安全性(IPSec)、防病毒(AV)和防垃圾邮件功能。
[0003]网络处理器可用于高吞吐量L2和L3网络协议处理、也就是执行用于线速转发分组的分组处理。通常,通用处理器用来处理需要更智能处理的L4-L7网络协议。虽然通用处理器可以执行计算密集任务,但是它未提供用于处理数据、从而可以线速转发它的充分性能。
[0004]内容感知网络需要在“线速”检查分组的内容。可以分析内容以确定是否已经有安全漏洞或者入侵。大量正则表达式形式的模式和规则被应用以保证检测到所有安全漏洞或者入侵。正则表达式是一种以字符串描述模式的紧致方法。正则表达式匹配的最简单模式是单个字符或者字符串、例如/c/或者/cat。正则表达式也包括算符和具有特殊含义的元字符。
[0005]通过使用元字符,正则表达式可以用于更复杂的搜索、比如“abc.*XyZ”。也就是说,发现串“ abc ”跟随有字符“ xyz ”但在“ abc ”与“ xyz ”之间的字符数目不限。另一示例是正则表达式“abc..abc.*xyz ; ”、也就是发现串“abc”跟随有两个字符、随后为串“abc”和不限数目的字符、随后为串“ xyz ”。
[0006]入侵检测系统(IDS)应用检查流过网络的所有个别分组的内容并且标识可疑模式,这些可疑模式可以指示用于闯入或者危害系统的尝试。可疑模式的一个示例可以是在分组中的特定文本串跟随有100个字符、随后为另一特定文本串。
[0007]通常使用搜索方法、比如确定性有限自动机(DFA)或者非确定性有限自动机(NFA)来执行内容搜索以处理正则表达式。


【发明内容】

[0008]本发明的实施例提供一种用于有限自动机的编译和运行时间处理的方法、装置、计算机程序产品和相应系统。
[0009]根据一个实施例,一种方法可以在操作地耦合到网络的安全设备中,操作地耦合到至少一个存储器的至少一个处理器中基于至少一个试探从在一个或者多个正则表达式模式的集合中的每个模式选择子模式。该方法可以使用从在集合中的所有模式选择的子模式来生成统一的确定性有限自动机(DFA)。该方法可以为在集合中的至少一个模式可以生成至少一个非确定性有限自动机(NFA)。至少一个模式的用于生成至少一个NFA的部分和用于至少一个NFA的运行时间处理的至少一个遍历方向可以基于选择的子模式的长度是固定还是可变和选择的子模式在至少一个模式内的位置来确定。该方法可以在至少一个存储器中存储所生成的统一的DFA和至少一个NFA。
[0010]至少一个试探可以包括最大化选择的唯一子模式的数目和选择的每个子模式的长度。
[0011]该方法可以确定选择的子模式的长度是固定还是可变。
[0012]该方法可以计算选择的每个子模式的哈希值并且与从其选择子模式的模式的标识符关联地存储计算的每个哈希值。
[0013]至少一个试探可以包括最大化选择的唯一子模式的数目,并且该方法可以包括为在集合中的每个模式计算选择的子模式的哈希值。该方法可以比较计算的哈希值与为在集合中的其它模式选择的子模式的哈希值的列表。如果在列表中发现计算的哈希值,则该方法可以确定是否(i)用来自模式的另一子模式替换选择的子模式或者(ii)用从在集合中的其他模式选择的备选(alternate)子模式替换为在集合中的另一模式选择的子模式。在集合中的其他模式可以基于在列表中的与计算的哈希值的关联性来标识。用于是否替换(i)或者(ii)的确定可以基于比较被考虑用于替换的子模式的长度以便最大化选择的唯一子模式的长度。
[0014]至少一个试探可以包括标识每个模式的子模式并且如果每个模式的标识的子模式中的给定的子模式具有小于最小门限的长度则忽略给定的子模式。
[0015]至少一个试探可以包括访问与历史使用频率指示符关联的子模式的知识库并且如果在访问的知识库中的用于每个模式的标识的子模式中的给定的子模式的历史使用频率指示符大于或者等于使用频率门限则忽略给定的子模式。
[0016]至少一个试探可以包括标识每个模式的子模式并且为每个模式通过基于标识的子模式中的给定的子模式具有标识的子模式中的最大数目的连续文本字符并且基于给定的子模式在为一个或者多个正则表达式的集合选择的所有子模式之中唯一而选择给定的子模式,来最大化在选择的子模式中的连续文本字符的数目。
[0017]至少一个试探可以包括:基于每个模式的给定的子模式中的每个子模式的子模式类型和给定的子模式的长度为每个模式的给定的子模式设置优先级,更长长度子模式被设置优先级高于更少长度的另一子模式,基于优先级设置选择唯一子模式作为选择的子模式,选择的唯一子模式具有至少最小长度门限的长度,并且如果给定的子模式都不唯一和具有至少最小长度门限的长度,则基于优先级设置选择非唯一子模式作为选择的子模式。
[0018]至少一个试探可以包括基于每个模式的给定的子模式中的每个子模式的子模式类型为给定的子模式设置优先级,子模式类型是仅文本、备选、单字符重复或者多字符重复,并且用于子模式类型的从最高到最低的优先级顺序是仅文本、备选、单字符重复和多字符重复。
[0019]如果选择的子模式的第一元素是至少一个模式的第一元素并且选择的子模式的长度固定,则选择的子模式的位置可以是至少一个模式的开始位置,至少一个模式的用于生成至少一个NFA的部分可以是排除选择的子模式的至少一个模式。至少一个NFA可以是单个NFA,并且至少一个NFA的至少一个遍历方向可以是前向遍历方向。
[0020]生成统一的DFA可以包括:关联生成的统一的DFA的与选择的子模式的最后元素关联的DFA节点与元数据,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示指向生成的至少一个NFA的开始节点的指针、用于转变至在前向遍历方向上对至少一个NFA进行遍历并且报告选择的子模式的匹配、在DFA节点的与选择的子模式的最后元素匹配的前导字符在净荷内的前导偏移作为选择的子模式的结束偏移和选择的子模式的长度的指令。至少一个NFA的开始节点可以与至少一个模式的用于生成至少一个NFA的部分的第一元素关联,至少一个NFA的净荷开始偏移可以与在选择的子模式的结束偏移的另一字节之后的字节关联。
[0021]生成至少一个NFA可以包括:关联生成的至少一个NFA的NFA节点与元数据,元数据向遍历器指示用于终止遍历并且报告在NFA节点匹配的滞后字符在净荷内的滞后偏移作为至少一个模式的结束偏移和至少一个模式的最终匹配的指令,NFA节点与至少一个模式的最后元素关联。
[0022]如果选择的子模式的第一元素不是至少一个模式的第一元素并且选择的子模式的最后元素不是至少一个模式的最后元素,则选择的子模式的位置可以是至少一个模式的中间位置。如果选择的子模式的长度固定,则至少一个模式的用于生成至少一个NFA的部分可以包括至少一个模式的滞后部分和前导部分。至少一个模式的滞后部分可以是排除选择的子模式和至少一个模式的前导部分的至少一个模式。至少一个模式的前导部分可以排除选择的子模式和至少一个模式的滞后部分。至少一个NFA可以包括滞后NFA和前导NFA,至少一个遍历方向可以包括前向遍历方向和反向遍历方向,滞后NFA可以具有前向遍历方向,并且前导NFA可以具有反向遍历方向。至少一个模式的滞后部分可以用于生成滞后NFA,并且至少一个模式的前导部分可以用于生成前导NFA。
[0023]生成统一的DFA可以包括:关联生成的统一的DFA节点与元数据,DFA节点与选择的子模式的最后元素关联,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示指向滞后NFA的开始节点的指针、用于转变至在前向遍历方向上对滞后NFA进行遍历的指令,滞后NFA的开始节点与滞后部分的第一元素关联,滞后NFA的净荷开始偏移与在选择的子模式的结束偏移之后的字节关联,指示指向前导NFA的开始节点的指针、用于转变至在反向遍历方向上对前导NFA进行遍历并且报告在DFA节点的与选择的子模式的最后元素匹配的字符在净荷内的偏移作为选择的子模式的结束偏移、选择的子模式的匹配和选择的子模式的长度的指令,前导NFA的开始节点与前导部分的最后元素关联,前导NFA的净荷开始偏移通过从选择的子模式的结束偏移减去选择的子模式的长度来确定。
[0024]生成至少一个NFA可以包括:关联滞后NFA的滞后节点与元数据,滞后节点与至少一个模式的最后元素关联,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示用于终止对生成的滞后NFA进行遍历并且报告在滞后节点的与最后元素匹配的、净荷的滞后字符在净荷内的滞后偏移和至少一个模式的滞后部分的匹配的指令。生成至少一个NFA可以包括:关联前导NFA的前导节点与元数据,前导节点与至少一个模式的第一元素关联,元数据向遍历器指示用于终止对生成的前导NFA进行遍历并且报告至少一个模式的前导部分的匹配并且如果与至少一个模式关联的限定符需要则报告在前导节点的与第一元素匹配的、净荷的前导字符在净荷内的前导偏移作为至少一个模式的开始偏移的指令。
[0025]如果选择的子模式的第一元素不是至少一个模式的第一元素并且选择的子模式的最后元素可以不是至少一个模式的最后元素,则选择的子模式的位置可以是至少一个模式的中间位置,并且如果选择的子模式的第一元素是至少一个模式的第一元素,则选择的子模式的位置可以是至少一个模式的开始位置。如果子模式的长度固定或者可变,则至少一个模式的用于生成至少一个NFA的部分可以包括至少一个模式的滞后部分和整个部分。至少一个模式的滞后部分可以是排除至少一个模式的前导部分的至少一个模式。前导部分可以包括至少一个模式的第一元素、选择的子模式的最后元素和在至少一个模式中的在它们之间的所有元素。至少一个模式的整个部分可以是至少一个模式,如果选择的子模式的位置是开始位置,则前导部分是选择的子模式。至少一个NFA可以包括滞后NFA和伞形NFA。至少一个遍历方向可以包括前向遍历方向和反向遍历方向。滞后NFA可以具有前向遍历方向,并且伞形NFA可以具有反向遍历方向。至少一个模式的滞后部分可以用于生成滞后NFA,并且至少一个模式的整个部分可以用于生成伞形NFA。
[0026]生成统一的DFA可以包括:关联生成的统一的DFA的DFA节点与元数据,DFA节点与选择的子模式的最后元素关联,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示指向滞后NFA的开始节点的指针、用于转变至在前向遍历方向上对滞后NFA进行遍历并且报告选择的子模式的匹配和在DFA节点的与选择的子模式的最后元素匹配的字符在净荷内的偏移作为选择的子模式的结束偏移并且如果选择的子模式的长度固定则报告长度的指令,滞后NFA的开始节点与滞后部分的第一元素关联。
[0027]生成至少一个NFA可以包括:关联生成的滞后NFA的滞后节点与元数据,滞后节点与至少一个模式的最后元素关联,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示指向伞形NFA的开始节点的指针、用于转变至在反向遍历方向上对伞形NFA进行遍历并且可选地报告在滞后节点的与至少一个模式的最后元素匹配的字符在净荷内的偏移并且可选地报告至少一个模式的滞后部分的匹配的指令,伞形NFA的开始节点与至少一个模式的最后元素关联。生成至少一个NFA可以包括:关联生成的伞形NFA的伞形节点与元数据,伞形节点与至少一个模式的第一元素关联,元数据向遍历器指示用于终止遍历并且报告至少一个模式的最终匹配并且如果与至少一个模式关联的限定符需要则报告在伞形节点的与至少一个模式的第一元素匹配的开始字符在净荷内的开始偏移作为至少一个模式的开始偏移的指令。
[0028]如果选择的子模式的第一元素不是至少一个模式的第一元素并且选择的子模式的最后元素不是至少一个模式的最后元素,则选择的子模式的位置可以是至少一个模式的中间位置,并且如果选择的子模式的第一元素是至少一个模式的第一元素,则选择的子模式的位置可以是至少一个模式的开始位置。如果子模式的长度固定或者可变,则至少一个模式的用于生成至少一个NFA的部分可以包括至少一个模式的滞后部分和前导部分。至少一个模式的滞后部分可以是排除至少一个模式的前导部分的至少一个模式。前导部分可以包括至少一个模式的第一元素、选择的子模式的最后元素和在至少一个模式中的在它们之间的所有元素。如果选择的子模式的位置是开始位置,则滞后部分可以是选择的子模式。至少一个NFA可以包括滞后NFA和前导NFA。至少一个遍历方向可以包括前向遍历方向和反向遍历方向。滞后NFA可以具有前向遍历方向,并且前导NFA可以具有反向遍历方向。至少一个模式的滞后部分可以用于生成滞后NFA。至少一个模式的前导部分可以用于生成前导 NFA。
[0029]生成统一的DFA可以包括:关联生成的统一的DFA的DFA节点与元数据,DFA节点与选择的子模式的最后元素关联,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示指向滞后NFA的开始节点的指针、用于转变至在前向遍历方向上对滞后NFA进行遍历的指令,滞后NFA的开始节点与滞后部分的第一元素关联,指示指向前导NFA的开始节点的指针、用于转变至在反向遍历方向上对前导NFA进行遍历并且报告选择的子模式的匹配和在DFA节点的与选择的子模式的最后元素匹配的字符在净荷内的偏移作为选择的子模式的结束偏移并且如果选择的子模式的长度固定则报告长度的指令,前导NFA的开始节点与选择的子模式的最后元素关联。
[0030]生成至少一个NFA可以包括:关联生成的滞后NFA的滞后节点与元数据,滞后节点与至少一个模式的最后元素关联,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示用于终止对滞后NFA进行遍历并且报告在滞后节点的与至少一个模式的最后元素匹配的滞后字符在净荷内的滞后偏移并且报告至少一个模式的滞后部分的匹配的指令。生成至少一个NFA可以包括:关联生成的前导NFA的前导节点与元数据,前导节点与至少一个模式的第一元素关联,元数据向遍历器指示用于终止对前导NFA进行遍历并且报告在前导节点的与至少一个模式的第一元素匹配的前导字符在净荷内的前导偏移的指令。
[0031]如果选择的子模式的第一元素不是至少一个模式的第一元素并且选择的子模式的最后元素不是至少一个模式的最后元素,则选择的子模式的位置可以是至少一个模式的中间位置。如果选择的子模式的长度固定或者可变,则至少一个NFA可以是单个NFA。至少一个遍历方向可以包括用于单个NFA的与至少一个模式的滞后部分的元素关联的运行时间处理节点的前向遍历方向和用于单个NFA的与至少一个模式的所有元素关联的运行时间处理节点的反向遍历方向。至少一个模式的滞后部分可以是排除至少一个模式的前导部分的至少一个模式,前导部分可以包括至少一个模式的第一元素、选择的子模式的最后元素和在至少一个模式中的在它们之间的所有元素。
[0032]生成统一的DFA可以包括:关联生成的统一的DFA的DFA节点与元数据,该节点与选择的子模式的最后元素关联,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示指向单个NFA的开始节点的指针、用于转变至在前向遍历方向上对生成的单个NFA进行遍历并且报告选择的子模式的匹配、在DFA节点的与选择的子模式的最后元素匹配的字符在净荷内的偏移作为选择的子模式的结束偏移并且如果选择的子模式的长度固定则报告长度的指令,开始节点与在至少一个模式中的紧接地跟随选择的子模式的最后元素的下一元素关联。
[0033]生成至少一个NFA可以包括:关联单个NFA的滞后节点与元数据,滞后节点与至少一个模式的最后元素关联,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示用于转变至用选择的子模式的结束偏移关联的净荷开始偏移在反向遍历方向上对单个NFA进行遍历的指令。生成至少一个NFA可以包括:关联单个NFA的前导节点与元数据,前导节点与至少一个模式的第一元素关联,元数据向遍历器指示用于终止遍历并且如果与至少一个模式关联的限定符需要则报告在前导节点的与至少一个模式的第一元素匹配的字符在净荷内的偏移作为至少一个模式的开始偏移以及至少一个模式的最终匹配的指令。
[0034]如果选择的子模式的第一元素不是至少一个模式的第一元素并且选择的子模式的最后元素不是至少一个模式的最后元素,则选择的子模式的位置可以是至少一个模式的中间位置。如果选择的子模式的长度固定,则至少一个NFA可以是单个NFA。至少一个遍历方向可以包括用于单个NFA的与至少一个模式的前导部分关联的运行时间处理节点的反向遍历方向和用于单个NFA的与至少一个模式的所有元素关联的运行时间处理节点的前向遍历方向。前导部分可以是排除至少一个模式的滞后部分的至少一个模式。滞后部分可以包括选择的子模式的第一元素、至少一个模式的最后元素和至少一个模式中的在它们之间的所有元素。
[0035]生成统一的DFA可以包括:关联生成的统一的DFA的DFA节点与元数据,节点与选择的子模式的最后元素关联,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示指向单个NFA的开始节点的指针、用于转变至在反向遍历方向上对生成的单个NFA进行遍历并且报告选择的子模式的匹配、在DFA节点的与选择的子模式的最后元素匹配的字符在净荷内的偏移作为选择的子模式的结束偏移和选择的子模式的长度的指令,开始节点与前导部分的最后元素关联,净荷开始偏移通过从选择的子模式的结束偏移减去选择的子模式的长度来确定。
[0036]生成至少一个NFA可以包括:关联单个NFA的前导节点与元数据,前导节点与至少一个模式的第一元素关联,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示用于转变至在前向遍历方向上对单个NFA进行遍历的指令。生成至少一个NFA可以包括:关联单个NFA的滞后节点与元数据,滞后节点与至少一个模式的最后元素关联,元数据向遍历器指示用于终止遍历并且报告在滞后节点的与至少一个模式的最后元素匹配的字符在净荷内的偏移和至少一个模式的最终匹配的指令。
[0037]如果选择的子模式的第一元素是至少一个模式的最后元素,则选择的子模式的位置可以是至少一个模式的结束位置,并且如果选择的子模式的长度固定,则至少一个模式的用于生成至少一个NFA的部分可以是排除选择的子模式的至少一个模式,并且至少一个遍历方向可以是反向遍历方向。
[0038]生成统一的DFA可以包括:关联DFA节点与元数据,DFA节点与选择的子模式的最后元素关联,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示指向生成的至少一个NFA的开始节点的指针、用于转变至在反向遍历方向上对生成的至少一个NFA进行遍历并且报告选择的子模式的匹配和在DFA节点的与选择的子模式的最后元素匹配的字符在净荷内的偏移作为选择的子模式的结束偏移的指令,生成的至少一个NFA的开始节点与部分的最后元素关联,生成的至少一个NFA的净荷开始偏移通过从选择的子模式的结束偏移减去选择的子模式的长度来确定。
[0039]生成至少一个NFA可以包括:关联与部分的第一元素关联的NFA节点与元数据,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示用于终止遍历并且报告至少一个模式的最终匹配并且如果与至少一个模式关联的限定符需要则报告在NFA节点的与部分的第一元素匹配的字符在净荷内的偏移作为至少一个模式的开始偏移的指令。
[0040]如果选择的子模式的第一元素是至少一个模式的最后元素,则选择的子模式的位置可以是至少一个模式的结束位置,并且如果选择的子模式的长度可变或者固定,则至少一个模式的用于生成至少一个NFA的部分可以是至少一个模式,并且至少一个遍历方向可以是反向遍历方向。
[0041]生成统一的DFA可以包括:关联DFA节点与元数据,DFA节点与选择的子模式的最后元素关联,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示指向生成的至少一个NFA的开始节点的指针、用于转变至在反向遍历方向上对生成的至少一个NFA进行遍历并且报告选择的子模式的匹配和在DFA节点的与选择的子模式的最后元素匹配的字符在净荷内的偏移作为选择的子模式的结束偏移并且如果选择的子模式的长度固定则报告长度的指令,生成的至少一个NFA的开始节点与选择的子模式的最后元素关联,生成的至少一个NFA的净荷开始偏移与选择的子模式的结束偏移关联。
[0042]生成至少一个NFA可以包括:关联与部分的第一元素关联的NFA节点与元数据,元数据向被配置为用净荷对生成的统一的DFA和至少一个NFA进行遍历的遍历器指示用于终止遍历并且报告至少一个模式的最终匹配并且如果与至少一个模式关联的限定符需要则报告在NFA节点的与部分的第一元素匹配的字符在净荷内的偏移作为至少一个模式的开始偏移的指令。
[0043]在至少一个存储器中存储生成的统一 DFA和至少一个NFA可以包括生成包括生成的统一 DFA和至少一个NFA的二进制图像。
[0044]至少一个处理器可以包括配置作为加速单元以分别分流DFA和NFA运行时间处理的DFA协同处理器和NFA协同处理器。
[0045]这里公开的另一示例实施例包括一种与这里公开的装置实施例一致的操作对应的装置。
[0046]另外,又一示例实施例可以包括一种非瞬态计算机可读介质,该非瞬态计算机可读介质具有在其上存储的指令序列,该指令序列在被加载并且由处理器执行时使处理器执行这里公开的方法。

【专利附图】

【附图说明】
[0047]前文将从如附图中所示本发明的示例实施例的以下更具体描述中变得清楚,在附图中,相似标号贯穿不同视图指代相同部分。附图未必按比例、代之以着重于举例说明本发明的实施例。
[0048]图1是可以在其中实施这里公开的实施例的安全设备的一个实施例的框图。
[0049]图2A-G是示例NFA和DFA图形以及图示图形展开概念的表。
[0050]图3A是其中可以实施这里公开的实施例的安全设备的一个实施例的另一框图。
[0051]图3B是可以在操作地耦合到网络的安全设备中操作地耦合到至少一个存储器的至少一个处理器中实施的方法的一个示例实施例的流程图。
[0052]图4是用于基于选择的子模式的长度固定并且选择的子模式的位置是正则表达式模式的开始位置来生成统一的DFA和至少一个NFA的一个实施例的框图。
[0053]图5是用于基于选择的子模式的位置是正则表达式模式的中间位置并且选择的子模式的长度固定来生成统一的DFA和至少一个NFA的一个实施例的框图。
[0054]图6是用于基于选择的子模式的位置是正则表达式模式的中间位置或者开始位置并且子模式的长度固定或者可变来生成统一的DFA和至少一个NFA的一个实施例的框图。
[0055]图7是用于基于选择的子模式的位置是正则表达式模式的中间位置或者开始位置并且选择的子模式的长度固定或者可变来生成统一的DFA和至少一个NFA的另一实施例的框图。
[0056]图8是用于基于选择的子模式的位置是正则表达式模式的中间位置并且选择的子模式的长度固定或者可变来生成统一的DFA和至少一个NFA的一个实施例的框图。
[0057]图9是用于基于选择的子模式的位置是正则表达式模式的中间位置并且选择的子模式的长度固定来生成统一的DFA和至少一个NFA的一个实施例的框图。
[0058]图10是用于基于选择的子模式的位置是正则表达式模式的结束位置并且选择的子模式的长度固定来生成统一的DFA和至少一个NFA的一个实施例的框图。
[0059]图11是用于基于选择的子模式的位置是正则表达式模式的结束位置并且选择的子模式的长度固定或者可变来生成统一的DFA和至少一个NFA的一个实施例的框图。
[0060]图12是可选地在这里公开的一个实施例内的计算机的示例内部结构的框图。

【具体实施方式】
[0061]在具体描述本发明的示例实施例之前,以下紧接地描述其中可以实施这些实施例的示例安全性应用以及使用确定性有限自动机(DFA)和非确定性有限自动机(NFA)的典型处理的示例安全性应用以帮助读者理解本发明的发明特征。
[0062]图1是其中可以实施本发明的实施例的安全设备102的一个实施例的框图。安全设备102可以包括网络服务处理器100。安全设备102可以是单独系统,该单独系统可以将在一个网络接口 103a接收的分组向另一网络接口 103b切换并且可以在转发接收的分组之前对分组执行多个安全性功能。例如安全设备102可以用来在向局域网(LAN) 105b或者任何其它适当网络转发处理的分组1lb之前对可以在广域网(WAN) 105a或者任何其它适当网络上接收的分组1la执行安全性处理。
[0063]网络服务处理器100可以被配置为处理在接收的分组中封装的开放系统互连
(OSI)网络L2-L7层协议。如本领域技术人员所知,OSI参考模型定义七个网络协议层(L1-L7)。物理层(LI)代表将设备连接到传输介质的实际电和物理接口。数据链路层(L2)执行数据成帧。网络层(L3)将数据格式化成分组。传送层(L4)操纵端到端传送。会话层(L5)管理在设备之间的通信、例如通信是半双工还是全双工。呈现层(L6)管理数据格式化和呈现、例如语法、控制代码、特殊图形和字符集合。应用层(L7)允许在用户之间的通信、例如文件传送和电子邮件。
[0064]网络服务处理器100可以对用于更高级网络协议、例如L4-L7的工作(例如分组处理操作)进行调度和排队并且使更高级网络协议在接收的分组中的处理能够被执行,从而以线速(即网络——可以通过该网络发送和接收数据——的数据传送速率)转发分组。通过处理协议以线速转发分组,网络服务处理器100未减缓网络数据传送速率。网络服务处理器100可以从可以是物理硬件接口的网络接口 103a或者103b接收分组并且对接收的分组执行L2-L7网络协议处理。网络服务处理器100可以随后通过网络接口 103a或者103b向在网络中的另一跳跃、最终目的地或者通过另一总线(未示出)转发处理的分组1lb用于由主机处理器(未示出)进一步处理。网络协议处理可以包括处理网络安全性协议、t匕如防火墙、应用防火墙、包括IP安全性(IPSec)和/或安全套接字层(SSL)的虚拟专用网(VPN)、入侵检测系统(IDS)和防病毒(AV)。
[0065]网络服务器处理器100可以使用多个处理器(即核)来交付高应用性能。核(未示出)中的每个核可以专用于执行数据平面或者控制平面操作。数据平面操作可以包括用于转发分组的分组操作。控制平面操作可以包括处理复杂的更高级协议、比如网际协议安全性(IPSec)、传输控制协议(TCP)和安全套接字层(SSL)的部分。数据平面操作可以包括处理这些复杂的更高级协议的其它部分。
[0066]网络服务处理器100也可以包括分流(offload)核的专用协同处理器(未示出),从而网络服务处理器100实现高吞吐量。例如网络服务处理器100可以包括加速单元106,该加速单元可以包括用于NFA处理的硬件加速的超非确定性自动机(HNA)协同处理器108和用于DFA处理的硬件加速的超有限自动机(HFA)协同处理器110。HNA 108和HFA 110协同处理器可以被配置为分流网络服务处理器100通用核(未示出)的执行计算和存储器密集模式匹配方法的繁重负担。
[0067]网络服务处理器100可以执行模式搜索、正则表达式处理、内容验证、变换和安全性加速分组处理。正则表达式处理和模式搜索可以用来为AV和IDS应用以及需要串匹配的其它应用执行串匹配。在网络服务处理器100中的存储器控制器(未示出)可以控制对操作地耦合到该网络服务处理器100的存储器104的访问。存储器可以是内部(即片上)或者外部(即片外)或者其组合并且可以被配置为存储接收的数据分组、例如分组1la用于由网络服务处理器100处理。存储器可以被配置为存储编译的规则数据,该编译的规则数据用于在DFA和NFA图形表达式检索中的查找和模式匹配。可以存储编译的规则数据作为二值图像112——该二进制图像包括用于DFA和NFA的编译的规则数据——或者作为多个二进制图像,这些多个二进制图像从NFA编译的规则数据分离DFA编译的规则数据。
[0068]典型内容感知应用处理可以使用DFA或者NFA以识别在接收的分组的内容中的模式。DFA和NFA均为有限自动机、也就是计算模型,每个计算模型包括状态集合、开始状态、输入字母(所有可能字符的集合)和转变函数。计算在开始状态中开始并且根据转变函数改变成新状态。
[0069]普遍使用正则表达式来表达模式,该正则表达式包括原子元素、例如普通文本字符如A-Z、0-9和元字符如*、~和I。正则表达式的原子元素是待匹配的符号(单字符)。原子元素可以与允许级联(+)、备选(I)和克林星号(*)的元字符进行组合。用于级联的元字符可以用来创建来自单个字符(或者子串)的多个字符匹配模式,而用于备选(I)的元字符可以用来创建可以匹配两个或者更多子串中的任何子串的正则表达式。元字符克林星号(*)允许模式匹配任何次数、包括未出现先前字符或者字符串。
[0070]组合不同算符和单字符允许构造表达式的复杂子模式。例如子模式、比如(th (is I at) *)可以匹配多个字符串、比如:th、this、that、thisis、thisat、that is 或者thatat。表达式的复杂子模式的另一示例可以是并入字符类构造[…]的子模式,该字符类构造允许列举搜寻的字符的列表。例如gr[ea]y寻找grey和gray 二者。其它复杂子模式示例是可以使用破折号以指示字符范围的子模式、例如[A-Z]或者匹配任何一个字符的源字符”。模式的元素可以是原子元素或者一个或者多个原子元素与一个或者多个元字符组合的组合。
[0071]向DFA或者NFA状态机的输入通常是来自输入流(即接收的分组)的(8比特)字节的串,也就是说,字母可以是单个字节(一个字符或者符号)。在输入流中的每个字节可以产生从一个状态向另一状态的转变。DFA或者NFA状态机的状态和转变函数可以由图形代表。在图形中的每个节点可以代表状态,并且在图形中的弧可以代表状态转变。状态机的当前状态可以由选择图形中的特定节点的节点标识符代表。
[0072]使用DFA以处理正则表达式并且在输入字符流中发现正则表达式描述的一个或者多个模式可以被表征为具有确定性运行时间性能。可以从输入字符(或者符号)和DFA的当前状态确定DFA的下一状态,因为每一 DFA状态仅有一个状态转变。这样,DFA的运行时间性能被认为是确定性的,并且可以从输入完全地预测行为。然而用于确定性的折衷是这样的图形,在该图形中,节点的数目(或者图形大小)可以随着模式的大小呈指数地增长。
[0073]对照而言,可以表征NFA图形的节点的数目(或者图形大小)为随着模式的大小线性地增长。然而使用NFA以处理正则表达式并且在输入字符流中发现正则表达式描述的一个或者多个模式可以被表征为具有非确定性运行时间性能。例如给定输入字符(或者符号)和NFA的当前状态,有可能的是有NFA的待转变成的多于一个的下一状态。这样,不能从输入和NFA的当前状态唯一地确定NFA的下一状态。因此,认为NFA的运行时间性能为非确定性,因为不能从输入完全地预测行为。
[0074]图2A-G示出DFA“图形展开”概念。图2A、2B和2C分别示出用于模式*a[~\n] ”、 *a[~\n] Γ\η] *a[~\n] Γ\η] Γ\η] ”的图形,并且图2D、2E和2F分别示出用于相同模式的DFA图形。如图2A-2F中所不和图2G的表概括的那样,NFA可以对于一些模式线性地增长,而用于相同模式的DFA可以呈指数地增长从而产生图形展开。如图所示,对于一个或者多个给定的模式,DFA状态的数目可以大于NFA状态的数目、通常为多数百个或者多数千个状态这一量级。这是“图形展开”的示例,该图形展开是DFA的标志特性。
[0075]根据这里公开的实施例,可以使用DFA、NFA或者其组合来执行内容搜索。根据一个实施例,运行时间处理器、协同处理器或者其组合可以在硬件中被实施并且可以被配置为实施编译器和遍历器(walker)。
[0076]编译器可以将模式或者模式(也称为签名或者规则)的输入列表编译成DFA、NFA或者其组合。DFA和NFA可以是二进制数据结构、比如DFA和NFA图形和表。
[0077]遍历器可以执行运行时间处理、即用于标识在输入流中存在模式或者匹配模式与在输入流中的内容的动作。内容可以是网际协议(IP)数据报的净荷部分或者在输入流中的任何其它适当净荷。DFA或者NFA图形的运行时间处理可以称为用净荷对DFA或者NFA图形进行遍历以确定模式匹配。被配置为生成DFA、NFA或者其组合的处理器可以这里称为编译器。被配置为使用生成的DFA、NFA或者其组合来实施净荷的运行时间处理的处理器可以这里称为遍历器。根据这里公开的实施例,网络服务处理器100可以被配置为在安全设备102中实施编译器和遍历器。
[0078]图3A是其中可以实施本发明的实施例的图1的安全设备102的另一实施例的框图。如参照图1描述的那样,安全设备102可以操作地耦合到一个或者多个网络并且可以包括存储器104和可以包括加速单元106的网络服务处理器100。参照图3A,网络服务处理器100可以被配置为实施生成二进制图像112的编译器306和使用二进制图像112的遍历器320。例如编译器306可以生成二进制图像112,该二进制图像包括由遍历器302用于对接收的分组101a(图1中所示)执行模式匹配方法的编译的规则数据。根据这里公开的实施例,编译器306可以如以下进一步描述的那样通过基于至少一个试探(heuristic)确定用于DFA、NFA或者其组合的编译的规则数据来生成二进制图像112。编译器306可以确定有利地适合用于DFA和NFA的规则数据。
[0079]根据这里公开的实施例,编译器306可以通过处理可包括一个或者多个正则表达式模式的集合304和可选限定符308的规则集合310来生成二进制图像112。从规则集合310,编译器306可以使用从所有一个或者多个正则表达式模式中选择的子模式生成统一的DFA 312以及为在一个或者多个正则表达式模式的集合304中的至少一个模式生成至少一个NFA 314以用于由遍历器302在运行时间处理期间使用,而且生成元数据(未示出),该元数据包括用于在统一的DFA 312的状态(未示出)与至少一个NFA 314的状态之间转变遍历器320的映射信息。可以按数据结构将统一的DFA 312和至少一个NFA 314表示为图形或者以任何其它适当形式,并且可以按数据结构表示元数据中的映射为一个或者多个表或者以任何其它适当形式。根据这里公开的实施例,如果从模式选择的子模式是该模式,则不为该模式生成NFA。根据这里公开的实施例,生成的每个NFA可以用于在集合中的特定模式,而可以基于来自集合中的所有模式的所有子模式生成统一的DFA。
[0080]遍历器320通过基于来自在接收的分组1la中的净荷的消耗字节来转变统一的DFA 312和至少一个NFA的状态、用净荷对统一的DFA 312和至少一个NFA 314进行遍历。这样,遍历器320用净荷遍历经过统一的DFA 312和至少一个NFA 314。
[0081]规则集合310可以包括一个或者多个正则表达式模式的集合304并且可以是以Perl兼容正则表达式(PCRE)脚本文件的形式或者任何其它适当形式。PCRE已经变成用于在安全性和联网应用中的正则表达式语法的实际规则。随着需要深度分组检查的更多应用已经显现或者更多威胁已经变成在因特网中盛行,用于标识病毒/攻击或者应用的对应签名/模式也已经变成更复杂。例如签名数据库已经从具有简单串模式演变成具有通配符字符、范围、字符类和高级PCRE签名的正则表达式(regex)模式。
[0082]如图3A中所示,可选限定符308可以各自与在正则表达式模式的集合304中的模式关联。例如可选限定符322可以与模式316关联。可选限定符308可以各自是一个或者多个限定符,该一个或者多个限定符指定希望的定制、高级PCRE签名选项或者用于处理与限定符关联的模式的其它适当选项。例如限定符322可以指示是否希望用于模式316的高级PCRE签名选项中的开始偏移(即模式的在净荷中匹配的第一匹配字符在净荷中的位置)选项。
[0083]随着应用显现,开始偏移已经变成对于在深度分组检查(DPI)系统中的处理而言重要。传统上,仅需有限自动机以报告给定的模式在输入中存在或者未存在并且报告匹配的模式在净荷中的结束偏移用于处理。如以下描述的那样,参照图4-11,如果限定符322指示希望开始偏移,则编译器306可以用如下方式生成二进制图像112,该方式使遍历器320报告(即声明)模式的在净荷中匹配的第一匹配字符在净荷中的位置的偏移。
[0084]根据这里公开的实施例,编译器306可以使用从在一个或者多个正则表达式模式的集合304中的所有模式选择的子模式302来生成统一的DFA 312。编译器306可以如以下进一步描述的那样基于至少一个试探从在一个或者多个正则表达式模式的集合304中的每个模式选择子模式302。编译器306也可以为在集合中的至少一个模式316生成至少一个NFA 314,至少一个模式316的用于生成至少一个NFA 314的部分(未示出)和用于至少一个NFA 314的运行时间处理(即遍历)的至少一个遍历方向可以基于选择的子模式318的长度是固定还是可变和选择的子模式318在至少一个模式316内的位置来确定。编译器306可以在至少一个存储器104中存储统一的DFA 312和至少一个NFA 314。
[0085]编译器可以确定选择的潜在子模式的长度是固定还是可变。例如可以确定子模式、比如“cedf ”的长度具有固定长度4,因为“cdef ”是串,而可以确定包括算符的复杂子模式为具有可变长度。例如复杂子模式、比如“a.*cdr\n] {O, 10}.*y”可以具有“cdr\n]{O, 10} ”作为选择的子模式,该子模式可以具有可变长度2至12。
[0086]根据这里公开的实施例,子模式选择可以基于至少一个试探。子模式是来自模式的一个或者多个连续元素的集合,其中来自模式的每个元素可以由在DFA或者NFA图形中的节点代表用于匹配来自净荷的字节或者字符。元素如以上描述的那样可以是节点代表的单个文本字符或者节点代表的字符类。编译器306可以如以上参照图2A-G描述的那样基于子模式是否可能引起过度DFA图形展开来确定在模式中的哪些子模式更好地适合用于NFA。例如从包括连续文本字符的子模式生成DFA将不产生DFA图形展开,而复杂子模式如以上描述的那样可以包括算符以及字符、因此可以引起DFA图形展开。例如包括重复多次的通配符字符或者更大字符类的子模式(例如Γ\η]*οι.Γ\η] {16}))可以在DFA中引起过度状态、因此可以更有利地适合用于NFA。
[0087]如以上公开的那样,从在一个或者多个正则表达式的集合304中的每个模式选择子模式可以基于至少一个试探。根据一个实施例,至少一个试探可以包括最大化选择的唯一子模式的数目和选择的每个子模式的长度。例如模式、比如“ab.*cdef.*mn”可以具有多个潜在子模式、比如“ab.*”、“cdef”和*mn”。编译器可以选择“cdef ”作为模式的子模式,因为它是在模式“ab.*cdef.*mn”中的不可能引起DFA图形展开的最大子模式。然而如果已经为另一模式选择子模式“cdef”,则编译器可以为模式“ab.*cdef.*mn”选择备选子模式。备选地,编译器可以将子模式“cdef”替换为用于其它模式的另一子模式,从而使子模式“cdef”能够被选择用于模式“ab.*cdef.*mn”。
[0088]这样,编译器306可以基于用于模式304的每个模式的可能子模式的情境,选择模式304的子模式,从而实现最大化所选择的唯一子模式的数目和所选择的每个子模式的长度。这样,编译器306可以从选择的子模式302生成统一的DFA 312,该统一的DFA通过增加在至少一个NFA 314中的模式匹配的概率来最小化在至少一个NFA 314的模式匹配中的误判(即无匹配或者部分匹配)的数目。
[0089]通过最大化子模式长度,可以避免在NFA处理中的误判。在NFA处理中的误判可以造成非确定性运行时间处理、因此可以减少运行时间性能。另外,通过最大化选择的唯一子模式的数目,编译器306在被给定统一的DFA中的子模式(来自模式)的匹配的集合中实现在统一的DFA向从该模式生成的至少一个NFA 314之间的1:1转变。
[0090]例如如果多个模式共享选择的子模式,则统一的DFA的遍历器将需要向多个至少一个DFA转变,因为每个至少一个NFA是每模式NFA,并且来自统一 DFA中的子模式匹配表示用于多个模式中的每个模式的部分匹配。这样,最大化唯一子模式的数目减少DFA=NFA1:N转变的数目从而减少遍历器320的运行时间处理。
[0091]为了实现最大化唯一子模式的数目,编译器302可以计算选择的子模式318的哈希值326并且与从其选择子模式318的模式316的标识符(未示出)关联地存储计算的哈希值326。例如编译器306可以为在集合304中的每个模式计算选择的子模式的哈希值。计算的哈希值324可以存储于至少一个存储器104中作为表或者以任何适当方式。使用的哈希方法可以是任何适当哈希方法。编译器可以比较计算的哈希值与为在集合中的其它模式选择的子模式的哈希值的列表以便确定选择的子模式是否唯一。
[0092]如果在列表中发现计算的哈希值,则编译器可以确定是(i)用来自模式的另一子模式替换选择的子模式还是(ii)用从在集合中的另一模式选择的备选子模式替换为在集合中的另一模式选择的子模式。可以基于与在列表中计算的哈希值的关联性标识在集合中的另一模式。用于是替换(i)还是(ii)的确定可以基于比较被考虑用于替换的子模式的长度以便如以上描述的那样最大化选择的唯一子模式的长度。替换选择的子模式可以包括选择为给定的模式标识的下一最长子模式或者下一最高优先级的子模式。例如可以基于造成DFA展开的可能性或者预计的DFA展开的量值为潜在子模式设置优先级。
[0093]根据这里公开的实施例,至少一个试探可以包括标识每个模式的子模式并且如果每个模式的标识的子模式中的给定的子模式具有小于最小门限的长度则忽略给定的子模式。例如为了减少在至少一个NFA中的误判,编译器可以忽略具有小于最小门限的长度的子模式,因为这样的子模式可以造成在至少一个NFA中的误判的更高概率。
[0094]至少一个试探可以包括访问与历史使用频率指示符关联的子模式的知识库(未示出)并且如果在访问的知识库中的用于每个模式的标识的子模式中的给定的子模式的历史使用频率指示符大于或者等于使用频率门限则忽略给定的子模式。例如应用或者协议专属子模式可以具有高使用频率、比如对于超文本传送协议(HTTP)的净荷、“carriagereturn line feed”、或者净流量(clear traffic)比如来自二进制文件的多个连续O、或者任何其它频繁使用的子模式。
[0095]至少一个试探可以包括标识每个模式的子模式,以及对于每个模式通过基于标识的子模式中的给定的子模式具有标识的子模式的最大数目的连续文本指示符并且基于给定的子模式在为一个或者多个正则表达式的集合选择的所有子模式之中唯一来选择给定的子模式,而最大化在选择的子模式中的连续文本字符的数目。如以上公开的那样,最大化选择的子模式的长度可以实现在至少一个NFA中的匹配的更高概率。
[0096]至少一个试探可以包括基于每个模式的给定的子模式中的每个子模式的子模式类型和给定的子模式的长度为给定的子模式设置优先级。子模式类型可以是仅文本、备选(alternat1n)、单字符重复或者多字符重复,并且用于子模式类型的从最高到最低的优先级可以是仅文本、备选(alternat1n)、单字符重复和多字符重复。这样,具有至少最小长度门限的长度的作为文本串的子模式可以优先级高于可变长度的复杂子模式。
[0097]编译器306可以使更长长度子模式被设置优先级高于更少长度的另一子模式。编译器306可以基于优先级设置选择唯一子模式作为选择的子模式。如以上描述的那样,选择的唯一子模式可以具有至少最小长度门限的长度。
[0098]如果给定的子模式都不唯一和具有至少最小长度门限的长度,则编译器306可以基于优先级设置选择非唯一子模式作为选择的子模式。这样,编译器306可以从模式选择子模式一该子模式是从另一模式选择的子模式的重复一而不是选择具有小于最小门限的长度的子模式。为了有助于最后确定子模式,编译器306可以对模式执行多遍并且按长度对可能子模式进行排序。这样,用于在一个或者多个正则表达式的集合304中的给定的模式的编译器子模式选择可以在用于在一个或者多个正则表达式的集合304中的其它模式的子模式选择的情境内被执行。
[0099]如以上描述的那样,限定符322可以指示希望报告开始偏移。然而开始偏移可能不容易可辨认。例如在净荷中发现与模式比如“a.*b”或者“a.*d”匹配的开始偏移可能在给定净荷、比如“axycamb”时有难度,因为两个模式可以匹配“axycamb”和“amb”。这样,可能需要跟踪用于净荷中的“a”的两个实例的偏移作为潜在开始偏移。根据这里公开的实施例,无需跟踪潜在开始偏移,因为开始偏移并没有确定直到整个模式的匹配被确定为已经在净荷中发现。可以利用来自统一的DFA、至少一个NFA或者其组合的匹配结果来发现确定整个模式的匹配。
[0100]根据这里公开的实施例,如果在接收的分组101中的净荷包括与从模式316选择的子模式318匹配的内容,则遍历器可以转变成对用于模式318的至少一个NFA进行遍历。遍历器320可以报告选择的子模式318的匹配和偏移,该偏移标识匹配子模式的最后字符在接收的分组中的位置作为净荷中的用于子模式的结束偏移。如果子模式是模式的子集,则子模式匹配可以是用于模式的部分匹配。这样,遍历器320可以通过对用于模式的至少一个NFA进行遍历来继续在净荷中搜寻模式的其余部分以便确定用于模式的最终匹配。应当理解模式可以遍历在接收的分组1la中的一个或者多个净荷。
[0101]图3B是可以在操作地耦合到网络的安全设备中操作地耦合到至少一个存储器的至少一个处理器中实施的方法的一个示例实施例的流程图(350)。该方法可以开始(352)并且基于至少一个试探从在一个或者多个正则表达式模式的集合中的每个模式选择子模式(354)。该方法可以使用从集合中的所有模式选择的子模式来生成统一的确定性自动机(DFA) (356)。该方法可以为在集合中的至少一个模式生成至少一个非确定性自动机(NFA),至少一个模式的用于生成至少一个NFA的部分和用于至少一个NFA的运行时间处理的至少一个遍历方向基于选择的子模式的长度是固定的还是可变和选择的子模式在至少一个模式内的位置来确定(358)。该方法可以在至少一个存储器中存储生成的统一的DFA和至少一个NFA(360)。该方法随后在示例实施例中结束(362)。
[0102]如以上公开的那样,编译器306可以生成统一的DFA 312和至少一个NFA 314以使遍历器320能够在接收的分组1la中搜寻一个或者多个正则表达式模式的集合304的匹配。编译器306可以基于至少一个试探从在一个或者多个正则表达式模式的集合304中的每个模式选择子模式。可以使用从在集合304中的所有模式选择的子模式302来生成统一的DFA 312。编译器306可以为在集合304中的至少一个模式316生成至少一个NFA314。至少一个模式的用于生成至少一个NFA 314的部分和用于至少一个NFA 314的运行时间处理的至少一个遍历方向可以如以下参照图4-11公开的那样基于选择的子模式318的长度是固定还是可变和选择的子模式318在至少一个模式316内的位置来确定。
[0103]图4是用于基于选择的子模式404的长度固定和选择的子模式的位置是至少一个模式406的开始位置来生成统一的DFA 312和至少一个NFA 314的框图400。如图4中所示,选择的子模式404的第一元素408是至少一个模式406的第一元素。至少一个模式的用于生成至少一个NFA 402的部分410可以是排除选择的子模式404的至少一个模式406。至少一个NFA 314可以是单个NFA 402,并且至少一个NFA 314的至少一个遍历方向可以是前向遍历方向412。例如对于给定的模式、比如“cavium”,前向遍历方向将在从“c”到“m”的遍历方向上经过至少一个NFA 314的节点对输入净荷进行遍历,而相反遍历方向将在从“m”到“c”的遍历方向上对输入净荷进行遍历。
[0104]根据图4的示例实施例,编译器306可以将统一的DFA 312的、与选择的子模式404的最后元素416关联的DFA节点414与元数据418关联。元数据418可以向被配置为用净荷426对统一的DFA312和至少一个NFA 314进行遍历的遍历器320指示指向单个NFA402的开始节点422的指针420。元数据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中包括的长度以便确定模式406在净荷426内的开始偏移。例如如果限定符308中的限定符需要,则遍历器320可以通过从确定的结束偏移减去在元数据418中包括的长度来确定开始偏移。
[0105]应当理解可以用任何适当方式执行报告。例如遍历器320可以通过向网络服务处理器100声明结束偏移一例如通过向存储器位置写入、触发中断、发送或者发表消息等——来报告结束偏移。备选地,遍历器320可以通过在它自己的数据结构中声明结束偏移或者其它确立的结果用于在遍历器本身的过程中使用来基于匹配结果报告结束偏移或者任何其它偏移或者息。
[0106]根据图4的示例实施例,编译器306可以将生成的单个NFA的NFA节点432与元数据434关联,该元数据向遍历器指示用于终止遍历的指令,因为已经标识整个模式406的最终匹配。NFA节点432可以与至少一个模式406的最后元素436关联。元数据434可以指示遍历器320报告在NFA节点432匹配的(字符430中的)滞后字符在净荷426内的(偏移428中的)滞后偏移作为至少一个模式406的结束偏移以及至少一个模式406的最终匹配。
[0107]遍历器320可以使得用于给定的模式的每个遍历与事务标识符相关。这样,可以与对应事务标识符关联地报告子模式长度、净荷字符偏移和模式匹配结果。在示例实施例中,网络服务处理器100可以基于用于搜寻给定的模式的遍历的事务标识符使得用于给定的模式的遍历器结果信息相关。
[0108]图5是用于基于选择的子模式504的位置是至少一个模式506的中间位置并且选择的子模式504的长度固定来生成统一的DFA312和至少一个NFA 314的框图500。根据图5的示例实施例,至少一个模式506的用于生成至少一个NFA 314的部分包括至少一个模式506的滞后部分508和前导部分510。如图5中所不,至少一个模式506的滞后部分508可以是排除选择的子模式506和至少一个模式506的前导部分510的至少一个模式506。至少一个模式506的前导部分510排除选择的子模式506和至少一个模式506的滞后部分508。
[0109]根据图5的示例实施例,至少一个NFA 314包括滞后NFA 512和前导NFA 514。至少一个遍历方向包括前向遍历方向516和反向遍历方向518。滞后NFA 512可以在前向遍历方向516上被遍历,并且前导NFA 514可以在反向遍历方向518上被遍历。至少一个模式506的滞后部分508可以用于生成滞后NFA 512,并且至少一个模式506的前导部分510可以用于生成前导NFA 514。
[0110]根据图5的示例实施例,编译器306可以关联具有选择的子模式504的最后元素522的、统一的DFA 312的DFA节点515与元数据520。元数据520可以向被配置为用净荷、比如图4的净荷426对统一的DFA 312和至少一个NFA 314进行遍历的遍历器进行指示。元数据520可以包括指向滞后NFA 512的开始节点526的指针524、用于转变遍历器320以在净荷426中的结束偏移的字节之后的字节的偏移开始用净荷在前向遍历方向516上对滞后NFA 512进行遍历的指令。滞后NFA 512的开始节点526可以与滞后部分508的第一元素关联。元数据520可以指示指向前导NFA 514的开始节点532的指针530和用于遍历器320转变至在反向遍历方向518上对前导NFA 514进行遍历的指令。前导NFA 514的开始节点532可以与前导部分510的最后元素534关联。元数据520可以向遍历器320指示报告在DFA节点515的与选择的子模式522的最后元素匹配的(字符430中的)字符在净荷426内的(偏移428中)的偏移作为选择的子模式504的结束偏移、选择的子模式的匹配和选择的子模式的长度。遍历器320可以使用在元数据520中包括的长度以便通过从选择的子模式504的结束偏移减去在元数据520中的选择的子模式的长度来确定用于在开始节点532开始反向遍历的起始净荷偏移。
[0111]根据图5的不例实施例,编译器306可以关联滞后NFA 512的与至少一个模式506的最后元素538关联的滞后节点536与元数据540。元数据540可以向遍历器320指示终止对滞后NFA 512进行遍历和报告净荷426的与在滞后节点536的最后元素538匹配的(字符430中的)滞后字符在净荷426内的(偏移428中的)滞后偏移的指令。元数据540可以向遍历器320指示报告至少一个模式506的滞后部分508的匹配。
[0112]根据图5的示例实施例,编译器306可以关联前导NFA 514的与至少一个模式506的第一元素关联的前导节点542与元数据546,该元数据向遍历器320指示用于终止对前导NFA 514进行遍历的指令。元数据546可以向遍历器320指示报告至少一个模式506的前导部分510的匹配。如果与至少一个模式506关联的限定符、比如限定符308之一需要,则元数据546可以向遍历器320指示报告净荷426的与在前导节点542的第一元素544匹配的(字符430中的)前导字符在净荷426内的(偏移428中的)前导偏移作为至少一个模式506的开始偏移。
[0113]图6是用于基于选择的子模式的位置是至少一个模式的中间位置或者开始位置并且子模式的长度是固定或者可变来生成统一的DFA 312和至少一个NFA 314的一个实施例的框图600。根据图6的示例实施例,至少一个模式606的用于生成至少一个NFA 314的部分包括至少一个模式606的滞后部分608和整个部分610。至少一个模式606的滞后部分608可以是排除至少一个模式606的前导部分612的至少一个模式606。前导部分612包括至少一个模式606的第一元素614、选择的子模式604的最后元素616和在至少一个模式606中的在它们之间的所有兀素。至少一个模式606的整个部分610可以是至少一个模式 606。
[0114]如果选择的子模式604的第一元素618不是至少一个模式606的第一元素并且选择的子模式604的最后元素616不是至少一个模式606的最后元素620,则选择的子模式的位置是至少一个模式606的中间位置,并且开始部分622在至少一个模式606中先于选择的子模式604。
[0115]如果选择的子模式604的第一元素618是至少一个模式的第一元素614,则选择的子模式的位置是至少一个模式606的开始位置。如果选择的子模式的位置是开始位置,则开始部分622不存在并且前导部分612是选择的子模式604。
[0116]根据图6的示例实施例,至少一个NFA包括滞后NFA 624和伞形NFA 626。至少一个遍历方向包括前向遍历方向628和反向遍历方向630。滞后NFA 624具有前向遍历方向628,并且伞形NFA 626具有反向遍历方向630。至少一个模式606的滞后部分608可以由编译器306用于生成滞后NFA 624。至少一个模式606的整个部分610可以由编译器306用于生成伞形NFA 626。
[0117]根据图6的示例实施例,编译器306可以关联具有选择的子模式604的最后元素616的、统一的DFA 312的DFA节点632与元数据634。元数据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的长度固定则报告长度。
[0118]根据图6的不例实施例,编译器306可以关联滞后NFA 624的与至少一个模式606的最后元素620关联的滞后节点642与元数据652。元数据652可以向遍历器320指示指向伞形NFA 626的开始节点646的指针644、用于转变至在反向遍历方向630上对伞形626进行遍历的指令。伞形626的开始节点646可以与至少一个模式606的最后元素620关联。元数据652可以向遍历器指示可选地报告在滞后节点642的与至少一个模式606的最后元素620匹配的(字符430中的)字符在净荷426内的(偏移428中的)偏移并且可选地报告至少一个模式606的滞后部分608的匹配。
[0119]根据图6的不例实施例,编译器306可以关联伞形NFA 626的与至少一个模式606的第一元素614关联的伞形节点648与元数据650。元数据650可以向遍历器320指示用于终止遍历并且报告至少一个模式606的最终匹配的指令。如果限定符308中的与至少一个模式606关联的限定符需要,则元数据650可以向遍历器指示报告在伞形节点648的与至少一个模式606的第一元素614匹配的开始字符在净荷426内的(偏移428中的)开始偏移作为至少一个模式606的开始偏移。
[0120]图7是基于选择的子模式704的位置是至少一个模式706的中间位置或者开始位置并且选择的子模式704的长度固定或者可变来生成统一的DFA 312和至少一个NFA 314的另一实施例的框图。根据图7的示例实施例,至少一个模式的用于生成NFA 314的部分包括至少一个模式706的滞后部分708和前导部分712。至少一个模式706的滞后部分708可以是排除至少一个模式706的前导部分712的至少一个模式706。前导部分712包括至少一个模式706的第一元素714、选择的子模式704的最后元素716和在至少一个模式706中的在它们之间的所有元素。如果选择的子模式704的位置是开始位置,则前导部分712可以是选择的子模式。
[0121]如果选择的子模式704的第一元素718不是至少一个模式706的第一元素714并且选择的子模式704的最后元素716不是至少一个模式706的最后元素720,则选择的子模式的位置是至少一个模式706的中间位置并且开始部分722在至少一个模式706中先于选择的子模式704。
[0122]如果选择的子模式704的第一元素718是至少一个模式的第一元素714,则选择的子模式的位置是至少一个模式706的开始位置。如果选择的子模式的位置是开始位置,则开始部分722不存在并且前导部分712是选择的子模式704。
[0123]根据图7的示例实施例,至少一个NFA 314包括滞后NFA 724和前导NFA 726,至少一个遍历方向包括前向遍历方向728和反向遍历方向730。滞后NFA 724具有前向遍历方向728。前导NFA 726具有反向遍历方向730。至少一个模式706的滞后部分708可以用于生成滞后NFA 724。至少一个模式706的前导部分712可以用于生成前导NFA 726。
[0124]根据图7的示例实施例,编译器306可以关联统一的DFA 312的与选择的子模式704的最后元素716关联的DFA节点732与元数据734。元数据734可以向遍历器320指示指向滞后NFA 724的开始节点738的指针736和用于转变至在前向遍历方向728上对滞后NFA 724进行遍历的指令。滞后NFA 724的开始节点738可以与滞后部分708的第一元素740关联。净荷的用于开始滞后NFA 724的前向遍历的开始偏移可以是在选择的子模式704的结束偏移的字节之后的字节的偏移。元数据734可以向遍历器320指示指向前导NFA726的开始节点746的指针744和用于转变至在反向遍历方向730上对前导NFA 726进行遍历的指令。前导NFA 726的开始节点746可以与选择的子模式704的最后元素716关联。用于开始前导NFA726的反向遍历的净荷偏移可以是选择的子模式704的结束偏移。元数据734可以向遍历器320指示报告选择的子模式704的匹配,和在DFA节点732的与选择的子模式704的最后元素716匹配的(字符430中)的字符在净荷426内的(偏移428中的)偏移作为选择的子模式704的结束偏移,并且如果选择的子模式704的长度固定则报告长度。
[0125]根据图7的示例实施例,编译器306可以关联滞后NFA 724的与至少一个模式706的最后元素720关联的滞后节点742与元数据752。元数据752可以向遍历器320指示终止对滞后NFA进行遍历并且报告在滞后节点742的与至少一个模式706的最后元素720匹配的(字符430中的)滞后字符在净荷426内的(偏移428中的)滞后偏移并且报告至少一个模式706的滞后部分708的匹配。
[0126]根据图7的示例实施例,编译器306可以关联生成的前导NFA724的与至少一个模式706的第一元素714关联的前导节点748与元数据750。元数据750可以向遍历器320指示用于终止对前导NFA726进行遍历并且报告在前导节点748的与至少一个模式706的第一元素714匹配的(字符430中的)前导字符在净荷内的(偏移428中的)前导偏移的指令。
[0127]图7的实施例可以视为图6的实施例的优化,因为遍历器320无需在反向方向上遍历用于滞后部分708的NFA。
[0128]图8是基于选择的子模式804的位置是至少一个模式806的中间位置并且选择的子模式804的长度固定或者可变来生成统一的DFA 312和至少一个NFA 314的一个实施例的框图800。根据图8的示例实施例,至少一个NFA 314是单个NFA 854。至少一个遍历方向包括用于单个NFA 854的与至少一个模式806的滞后部分808的元素关联的运行时间处理节点的前向遍历方向828和用于单个NFA 854的与至少一个模式806的所有元素关联的运行时间处理节点的反向遍历方向830。至少一个模式806的滞后部分808是排除至少一个模式806的前导部分812的至少一个模式806。前导部分812包括至少一个模式806的第一元素814、选择的子模式804的最后元素816和在至少一个模式806中的在它们之间的所有元素。
[0129]根据图8的示例实施例,编译器806可以关联统一的DFA 312的与选择的子模式804的最后元素816关联的DFA节点832与元数据834。元数据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的长度固定则报告长度。
[0130]根据图8的示例实施例,编译器806可以关联单个NFA 854的与至少一个模式806的最后元素820关联的滞后节点842与元数据852,该元数据向遍历器320指示用于转变至在选择的子模式804的结束偏移开始用净荷在相反遍历方向830上对单个NFA 854进行遍历的指令。编译器306可以关联单个NFA 854的与至少一个模式806的第一元素814关联的前导节点848与元数据850。元数据850可以向遍历器320指示用于终止遍历并且如果限定符308中的与至少一个模式806关联的限定符需要则报告在前导节点848的与至少一个模式806的第一元素814匹配的(字符430中的)字符在净荷426内的(偏移428中)的偏移作为至少一个模式806的开始偏移的指令以及至少一个模式806的最终匹配。
[0131]图9是基于选择的子模式904的位置是至少一个模式906的中间位置并且选择的子模式904的长度固定来生成统一的DFA 312和至少一个NFA 314的一个实施例的框图。根据图9的示例实施例,至少一个NFA 314可以是单个NFA 954,并且至少一个遍历方向包括用于单个NFA 954的与至少一个模式906的前导部分912关联的运行时间处理节点的反向遍历方向930和用于单个NFA 954的与至少一个模式906的所有元素关联的运行时间处理节点的前向遍历方向928。前导部分912可以是排除至少一个模式906的滞后部分908的至少一个模式906。滞后部分908包括选择的子模式904的第一元素918、至少一个模式906的最后元素920和在至少一个模式906中的在它们之间的所有元素。
[0132]根据图9的示例实施例,编译器306可以关联统一的DFA 312的与选择的子模式904的最后元素916关联的DFA节点932与元数据956。元数据956可以向遍历器320指示指向单个NFA 954的开始节点946的指针和用于转变至在反向遍历方向930上对单个NFA954进行遍历的指令。开始节点946可以与前导部分912的最后元素912关联。元数据956可以向遍历器320指示报告选择的子模式904的匹配。元数据956可以向遍历器320指示报告在DFA节点932的与选择的子模式904的最后元素916关联的(字符430中的)字符在净荷426内的(偏移428内的)偏移作为选择的子模式904的结束偏移以及选择的子模式的长度。遍历器320可以使用长度(如果在元数据956中包括的话)以便通过从选择的子模式的结束偏移减去在元数据956中选择的子模式的长度来确定开始节点946的净荷开始偏移。
[0133]根据图9的示例实施例,编译器306可以关联单个NFA 954的与至少一个模式906的第一元素914关联的前导节点948与元数据950。元数据950可以向遍历器320指示用于转变至前向遍历方向928上对单个NFA 954进行遍历的指令。编译器306可以关联单个NFA 954的与至少一个模式906的最后元素920关联的滞后节点942与元数据952。元数据952可以向遍历器320指示用于终止遍历的指令。元数据952可以向遍历器指示报告在滞后节点942的与至少一个模式906的最后元素920匹配的(字符430中的)字符在净荷426内的(偏移428中的)偏移以及至少一个模式906的最终匹配。
[0134]图10是基于选择的子模式1004的位置是至少一个模式1006的中间位置并且选择的子模式1004的长度固定来生成统一的DFA312和至少一个NFA 314的一个实施例的框图1000。根据图10的示例实施例,如果选择的子模式1004的最后元素1016可以是至少一个模式1016的最后元素,则选择的子模式1004的位置可以是至少一个模式1006的结束位置并且至少一个NFA 314可以是单个NFA1054。如果选择的子模式1004的长度固定,则至少一个模式1006的用于生成单个NFA 1054的部分1012可以是排除选择的子模式1004的至少一个模式1006。至少一个遍历方向可以是用于对单个NFA 1054进行遍历的反向遍历方向1030。
[0135]根据图10的示例实施例,编译器306可以关联与选择的子模式1004的最后元素1016对应的DFA节点1032与元数据1052。元数据1052可以向遍历器320指示指向单个NFA1054的开始节点1045的指针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的净荷开始偏移。
[0136]根据图10的示例实施例,编译器306可以关联与部分1012的第一元素1014关联的NFA节点1048与元数据1050。元数据1050可以向遍历器320指示终止遍历并且报告至少一个模式1006的最终匹配并且如果限定符308中的与至少一个模式1006关联的限定符需要则报告在NFA节点1048的与部分1012的第一元素1014匹配的(字符430中的)字符在净荷426内的(偏移428中的)偏移作为至少一个模式1006的开始偏移。
[0137]图11是基于选择的子模式1104的位置是至少一个模式1106的结束位置并且选择的子模式1104的长度固定或者可变来生成统一的DFA 312和至少一个NFA 314的一个实施例的框图。根据图11的示例实施例,如果选择的子模式1104的最后元素1116可以是至少一个模式1106的最后元素,则选择的子模式1104的位置是至少一个模式1106的结束位置并且至少一个NFA 314可以是单个NFA1154。如果选择的子模式1104的长度固定或者可变,则至少一个模式1106的用于生成单个NFA 1154的部分1112可以是至少一个模式1106。至少一个遍历方向可以是用于对单个NFA 1154进行遍历的反向遍历方向1130。
[0138]根据图11的示例实施例,编译器306可以关联与选择的子模式1104的最后元素1116对应的DFA节点1132与元数据1152。元数据1152可以向遍历器320指示指向单个NFA1154的开始节点1156的指针1136和用于转变至在反向遍历方向1130上对单个NFAl 154进行遍历的指令。单个NFA 1154的开始节点1146可以与选择的子模式1104的最后元素1116关联。元数据1152可以向遍历器320指示选择的子模式1104的匹配和在DFA节点1132的与选择的子模式1104的最后元素1116匹配的(字符430中的)字符在净荷426内的(偏移428中的)偏移作为选择的子模式1104的结束偏移并且如果选择的子模式1104的长度固定则报告长度。
[0139]根据图11的示例实施例,编译器306可以关联与部分1112的第一元素1114关联的NFA节点1148与元数据1150。元数据1150可以向遍历器320指示终止遍历并且报告至少一个模式1106的最终匹配。元数据1152可以向遍历器320指示如果限定符304中的与至少一个模式1106关联的限定符需要则报告在NFA节点1148的与部分1112的第一元素1114匹配的(字符430中的)字符在净荷426内的(偏移428中的)偏移作为至少一个模式1106的开始偏移。
[0140]图12是其中可以实施本发明的各种实施例的计算机1200的内部结构的示例的框图。计算机1200包含系统总线1202,其中总线是用于在计算机或者处理系统的部件之中的数据传送的硬件线集合。系统总线1202实质上是连接计算机系统的不同单元(例如处理器、盘存储装置、存储器、输入/输出端口、网络端口等)的共享管道,该共享管道实现在单元之间传送信息。与系统总线1202 —起操作的是用于将各种输入和输出设备(例如键盘、鼠标、显示器、打印机、扬声器等)连接到计算机1200的I/O设备接口 1204。网络接口1206允许计算机1200连接到各种附着到网络的其它设备。存储器1208为可以用来实施本发明的实施例的计算机软件指令1210和数据1212提供易失性存储。盘存储装置1214为可以用来实施本发明的实施例的计算机软件指令1210和数据1212提供非易失性存储。中央处理单元1218也与系统总线1202操作并且提供执行计算机指令。
[0141]可以使用计算机程序产品来配置本发明的更多示例实施例;例如可以在用于实施本发明的示例实施例的软件中对控制进行编程。本发明的更多示例实施例可以包括非瞬态计算机可读介质,该非瞬态计算机可读介质包含可以由处理器执行并且在被执行时使处理器完成这里描述的方法的指令。应当理解可以以软件、硬件、固件或者将来确定的其它相似实现方式实施这里描述的框图和流程图的单元。此外,可以以软件、硬件或者固件的任何方式组合或者划分这里描述的框图和流程图的单元。
[0142]应当理解术语“这里”可转用到并入这里呈现的教导的申请或者专利,从而主题内容、定义或者数据结转到进行该并入的申请或者专利中。
[0143]如果在软件中实施,则可以用可以支持这里公开的示例实施例的任何语言编写软件。软件可以存储于任何形式的计算机可读介质、比如随机存取存储器(RAM)、只读存储器(ROM)、紧致盘只读存储器(⑶-ROM)等中。在操作中,通用或者专用处理器以本领域很好理解的方式加载和执行软件。还应当理解框图和流程图可以包括更多或者更少单元、被不同地布置或者定向或者被不同地表征。应当理解实现方式可以规定举例说明本发明的实施例的实现的框图、流程图和/或网络图以及框图和流程图的数目。
[0144]尽管已经参照本发明的示例实施例具体示出和描述本发明,但是本领域技术人员将理解其中可以进行在形式和细节上的各种改变而未脱离所附权利要求涵盖的本发明的范围。
【权利要求】
1.一种操作地耦合到网络的安全设备,所述安全设备包括: 至少一个存储器; 操作地耦合到所述至少一个存储器的至少一个处理器,所述至少一个处理器被配置为: 基于至少一个试探从在一个或者多个正则表达式模式的集合中的每个模式选择子模式; 使用从在所述集合中的所有模式选择的所述子模式来生成统一的确定性有限自动机(DFA); 为在所述集合中的至少一个模式生成至少一个非确定性有限自动机(NFA),所述至少一个模式的用于生成所述至少一个NFA的部分和用于所述至少一个NFA的运行时间处理的至少一个遍历方向基于所述选择的子模式的长度是固定还是可变和所述选择的子模式在所述至少一个模式内的位置来确定;并且 在所述至少一个存储器中存储所生成的所述统一的DFA和所述至少一个NFA。
2.根据权利要求1所述的安全设备,其中所述至少一个试探包括最大化选择的唯一子模式的数目和选择的每个子模式的长度。
3.根据权利要求1所述的安全设备,其中所述处理器还被配置为确定所述选择的子模式的长度是固定还是可变。
4.根据权利要求1所述的安全设备,其中所述至少一个处理器还被配置为: 计算选择的每个子模式的哈希值;并且 与从其选择所述子模式的模式的标识符关联地存储计算的每个哈希值。
5.根据权利要求1所述的安全设备,其中所述至少一个试探包括最大化选择的唯一子模式的数目,并且为了最大化选择的唯一子模式的数目,所述至少一个处理器还被配置用于为在所述集合中的每个模式: 计算所述选择的子模式的哈希值; 将所述计算的哈希值与为在所述集合中的其它模式选择的子模式的哈希值的列表相比较;并且 如果在所述列表中发现所述计算的哈希值,则确定是否(i)用来自所述模式的另一子模式替换所述选择的子模式或者(ii)用从在所述集合中的其他模式选择的备选子模式替换为在所述集合中的所述另一模式选择的所述子模式,在所述集合中的所述其他模式基于在所述列表中的与所述计算的哈希值的关联性来标识,其中所述用于是否进行替换(i)或者(ii)的确定是基于比较被考虑用于所述替换的子模式的长度,从而最大化选择的所述唯一子模式的长度。
6.根据权利要求1所述的安全设备,其中所述至少一个试探包括标识每个模式的子模式并且如果每个模式的标识的所述子模式中的给定的子模式具有小于最小门限的长度则忽略所述给定的子模式。
7.根据权利要求1所述的安全设备,其中所述至少一个试探包括访问与历史使用频率指示符关联的子模式的知识库并且如果在访问的所述知识库中的用于每个模式的标识的所述子模式中的给定的子模式的历史使用频率指示符大于或者等于使用频率门限则忽略所述给定的子模式。
8.根据权利要求1所述的安全设备,其中所述至少一个试探包括标识每个模式的子模式,并且为每个模式通过基于所述标识的子模式中的给定的子模式具有所述标识的子模式中最大数目的连续文本字符并且基于所述给定的子模式在为所述一个或者多个正则表达式的集合选择的所有子模式之中唯一而选择所述给定的子模式,来最大化在所述选择的子模式中的连续文本字符的数目。
9.根据权利要求1所述的安全设备,其中所述至少一个试探包括: 基于每个模式的给定的子模式中的每个子模式的子模式类型和所述给定的子模式的长度为所述给定的子模式设置优先级,更长长度子模式被设置优先级高于更少长度的另一子模式; 基于所述优先级设置来选择唯一子模式作为所述选择的子模式,所述选择的唯一子模式具有至少最小长度门限的长度;并且 如果所述给定的子模式都不唯一和具有至少所述最小长度门限的长度,则基于所述优先级设置来选择非唯一子模式作为所述选择的子模式。
10.根据权利要求1所述的安全设备,其中所述至少一个试探包括基于每个模式的给定的子模式中的每个子模式的子模式类型为所述给定的子模式设置优先级,所述子模式类型是仅文本、备选、单字符重复或者多字符重复,并且用于所述子模式类型的从最高到最低的优先级是仅文本、备选、单字符重复和多字符重复。
11.根据权利要求1所述的安全设备,其中如果所述选择的子模式的第一元素是所述至少一个模式的第一元素并且所述选择的子模式的长度固定,则所述选择的子模式的位置是所述至少一个模式的开始位置,所述至少一个模式的用于生成所述至少一个NFA的部分是排除所述选择的子模式的所述至少一个模式,所述至少一个NFA是单个NFA,并且所述至少一个NFA的所述至少一个遍历方向是前向遍历方向。
12.根据权利要求11所述的安全设备,其中为了生成所述统一的DFA,所述至少一个处理器还被配置为: 将所述生成的统一的DFA的与所述选择的子模式的最后元素关联的DFA节点与元数据相关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述生成的至少一个NFA的开始节点的指针、用于转变至在前向遍历方向上对所述至少一个NFA进行遍历并且报告所述选择的子模式的匹配、在所述DFA节点的与所述选择的子模式的所述最后元素匹配的前导字符在所述净荷内的前导偏移作为所述选择的子模式的结束偏移和所述选择的子模式的长度的指令,所述至少一个NFA的所述开始节点与所述至少一个模式的用于生成所述至少一个NFA的所述部分的第一元素关联,所述至少一个NFA在所述净荷中的字符偏移与在所述选择的子模式的结束偏移之后的字节关联,所述至少一个NFA的净荷开始偏移与在所述选择的子模式的所述结束偏移的另一字节之后的字节关联。
13.根据权利要求11所述的安全设备,其中为了生成所述至少一个NFA,所述至少一个处理器还被配置为: 关联所述生成的至少一个NFA的NFA节点与元数据,所述元数据向所述遍历器指示用于终止所述遍历并且报告在所述NFA节点匹配的滞后字符在所述净荷内的滞后偏移作为所述至少一个模式的结束偏移和所述至少一个模式的最终匹配的指令,所述NFA节点与所述至少一个模式的最后元素关联。
14.根据权利要求1所述的安全设备,其中如果所述选择的子模式的第一元素不是所述至少一个模式的第一元素并且所述选择的子模式的最后元素不是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的中间位置,并且如果所述选择的子模式的长度固定,则: 所述至少一个模式的用于生成所述至少一个NFA的部分包括所述至少一个模式的滞后部分和前导部分,所述至少一个模式的所述滞后部分是排除所述选择的子模式和所述至少一个模式的所述前导部分的所述至少一个模式,所述至少一个模式的所述前导部分排除所述选择的子模式和所述至少一个模式的所述滞后部分;并且 所述至少一个NFA包括滞后NFA和前导NFA,所述至少一个遍历方向包括前向遍历方向和反向遍历方向,所述滞后NFA具有所述前向遍历方向,所述前导NFA具有所述反向遍历方向,所述至少一个模式的所述滞后部分用于生成所述滞后NFA,并且所述至少一个模式的所述前导部分用于生成所述前导NFA。
15.根据权利要求14所述的安全设备,其中为了生成所述统一的DFA,所述至少一个处理器还被配置为: 关联所述生成的统一的DFA的DFA节点与元数据,所述DFA节点与所述选择的子模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述滞后NFA的开始节点的指针、用于转变至在所述前向遍历方向上对所述滞后NFA进行遍历的指令,所述滞后NFA的所述开始节点与所述滞后部分的第一元素关联,所述滞后NFA的净荷开始偏移与在所述选择的子模式的所述结束偏移的另一字节之后的字节关联,指示指向所述前导NFA的开始节点的指针、用于转变至在所述反向遍历方向上对所述前导NFA进行遍历并且报告在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移、所述选择的子模式的匹配和所述选择的子模式的长度的指令,所述前导NFA的所述开始节点与所述前导部分的最后元素关联,所述前导NFA的净荷开始偏移通过从所述选择的子模式的所述结束偏移减去所述选择的子模式的长度来确定。
16.根据权利要求14所述的安全设备,其中为了生成所述至少一个NFA,所述至少一个处理器还被配置为: 关联所述滞后NFA的滞后节点与元数据,所述滞后节点与所述至少一个模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示用于终止对所述生成的滞后NFA进行遍历并且报告在所述滞后节点的与所述最后元素匹配的、所述净荷的滞后字符在所述净荷内的滞后偏移和所述至少一个模式的所述滞后部分的匹配的指令;并且 关联所述前导NFA的前导节点与元数据,所述前导节点与所述至少一个模式的所述第一元素关联,所述元数据向所述遍历器指示用于终止对所述生成的前导NFA进行遍历并且报告所述至少一个模式的所述前导部分的匹配并且如果与所述至少一个模式关联的限定符需要则报告在所述前导节点的与所述第一元素匹配的、所述净荷的所述前导字符在所述净荷内的前导偏移作为所述至少一个模式的开始偏移的指令。
17.根据权利要求1所述的安全设备,其中如果所述选择的子模式的第一元素不是所述至少一个模式的第一元素并且所述选择的子模式的最后元素不是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的中间位置,并且如果所述选择的子模式的所述第一元素是所述至少一个模式的所述第一元素,则所述选择的子模式的位置是所述至少一个模式的所述开始位置,并且如果所述子模式的长度固定或者可变,则: 所述至少一个模式的用于生成所述至少一个NFA的部分包括所述至少一个模式的滞后部分和整个部分,所述至少一个模式的所述滞后部分是排除所述至少一个模式的前导部分的所述至少一个模式,所述前导部分包括所述至少一个模式的所述第一元素、所述选择的子模式的所述最后元素和在所述至少一个模式中的在它们之间的所有元素,所述至少一个模式的所述整个部分是所述至少一个模式,如果所述选择的子模式的位置是开始位置,则所述前导部分是所述选择的子模式;并且 所述至少一个NFA包括滞后NFA和伞形NFA,所述至少一个遍历方向包括前向遍历方向和反向遍历方向,所述滞后NFA具有所述前向遍历方向,所述伞形NFA具有所述反向遍历方向,所述至少一个模式的所述滞后部分用于生成所述滞后NFA,并且所述至少一个模式的所述整个部分用于生成所述伞形NFA。
18.根据权利要求17所述的安全设备,其中为了生成所述统一的DFA,所述至少一个处理器还被配置为: 关联所述生成的统一的DFA的DFA节点与元数据,所述DFA节点与所述选择的子模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述滞后NFA的开始节点的指针、用于转变至在所述前向遍历方向上对所述滞后NFA进行遍历并且报告所述选择的子模式的匹配和在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移并且如果所述选择的子模式的长度固定则报告所述长度的指令,所述滞后NFA的所述开始节点与所述滞后部分的第一元素关联。
19.根据权利要求17所述的安全设备,其中为了生成所述至少一个NFA,所述至少一个处理器还被配置为: 关联所述生成的滞后NFA的滞后节点与元数据,所述滞后节点与所述至少一个模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述伞形NFA的开始节点的指针、用于转变至在所述反向遍历方向上对所述伞形NFA进行遍历并且可选地报告在所述滞后节点的与所述至少一个模式的所述最后元素匹配的字符在所述净荷内的偏移并且可选地报告所述至少一个模式的所述滞后部分的匹配的指令,所述伞形NFA的所述开始节点与所述至少一个模式的所述最后兀素关联;并且 关联所述生成的伞形NFA的伞形节点与元数据,所述伞形节点与所述至少一个模式的所述第一元素关联,所述元数据向所述遍历器指示用于终止所述遍历并且报告所述至少一个模式的最终匹配并且如果与所述至少一个模式关联的限定符需要则报告在所述伞形节点的与所述至少一个模式的所述第一元素匹配的开始字符在所述净荷内的开始偏移作为所述至少一个模式的开始偏移的指令。
20.根据权利要求1所述的安全设备,其中如果所述选择的子模式的第一元素不是所述至少一个模式的第一元素并且所述选择的子模式的最后元素不是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的中间位置,并且如果所述选择的子模式的所述第一元素是所述至少一个模式的所述第一元素,则所述选择的子模式的位置是所述至少一个模式的开始位置,并且如果所述子模式的长度固定或者可变,则: 所述至少一个模式的用于生成所述至少一个NFA的部分包括所述至少一个模式的滞后部分和前导部分,所述至少一个模式的所述滞后部分是排除所述至少一个模式的所述前导部分的所述至少一个模式,所述前导部分包括所述至少一个模式的所述第一元素、所述选择的子模式的所述最后元素和在所述至少一个模式中的在它们之间的所有元素,如果所述选择的所述子模式的位置是所述开始位置,则所述滞后部分是所述选择的子模式;并且 所述至少一个NFA包括滞后NFA和前导NFA,所述至少一个遍历方向包括前向遍历方向和反向遍历方向,所述滞后NFA具有所述前向遍历方向,所述前导NFA具有所述反向遍历方向,所述至少一个模式的所述滞后部分用于生成所述滞后NFA,并且所述至少一个模式的所述前导部分用于生成所述前导NFA。
21.根据权利要求20所述的安全设备,其中为了生成所述统一的DFA,所述至少一个处理器还被配置为: 关联所述生成的统一的DFA的DFA节点与元数据,所述DFA节点与所述选择的子模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述滞后NFA的开始节点的指针、用于转变至在所述前向遍历方向上对所述滞后NFA进行遍历的指令,所述滞后NFA的所述开始节点与所述滞后部分的第一元素关联,指示指向所述前导NFA的开始节点的指针、用于转变至在所述反向遍历方向上对所述前导NFA进行遍历并且报告所述选择的子模式的匹配和在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移并且如果所述选择的子模式的长度固定则报告所述长度的指令,所述前导NFA的所述开始节点与所述选择的子模式的最后元素关联。
22.根据权利要求20所述的安全设备,其中为了生成所述至少一个NFA,所述至少一个处理器还被配置为: 关联所述生成的滞后NFA的滞后节点与元数据,所述滞后节点与所述至少一个模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示用于终止对所述滞后NFA进行遍历并且报告在所述滞后节点的与所述至少一个模式的所述最后元素匹配的滞后字符在所述净荷内的滞后偏移并且报告所述至少一个模式的所述滞后部分的匹配的指令;并且 关联所述生成的前导NFA的前导节点与元数据,所述前导节点与所述至少一个模式的所述第一元素关联,所述元数据向所述遍历器指示用于终止对所述前导NFA进行遍历并且报告在所述前导节点的与所述至少一个模式的所述第一元素匹配的前导字符在所述净荷内的前导偏移的指令。
23.根据权利要求1所述的安全设备,其中如果所述选择的子模式的第一元素不是所述至少一个模式的第一元素并且所述选择的子模式的最后元素不是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的中间位置,并且如果所述选择的子模式的长度固定或者可变,则: 所述至少一个NFA是单个NFA,并且所述至少一个遍历方向包括用于所述单个NFA的与所述至少一个模式的滞后部分的元素关联的运行时间处理节点的前向遍历方向和用于所述单个NFA的与所述至少一个模式的所有元素关联的运行时间处理节点的反向遍历方向,所述至少一个模式的所述滞后部分是排除所述至少一个模式的前导部分的所述至少一个模式,所述前导部分包括所述至少一个模式的所述第一元素、所述选择的子模式的所述最后元素和在所述至少一个模式中的在它们之间的所有元素。
24.根据权利要求23所述的安全设备,其中为了生成所述统一的DFA,所述至少一个处理器还被配置为: 关联所述生成的统一的DFA的DFA节点与元数据,所述DFA节点与所述选择的子模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述单个NFA的开始节点的指针、用于转变至在所述前向遍历方向上对所述生成的单个NFA进行遍历并且报告所述选择的子模式的匹配、在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移并且如果所述选择的子模式的长度固定则报告所述长度的指令,所述开始节点与在所述至少一个模式中的紧接地跟随所述选择的子模式的所述最后元素的下一元素关联。
25.根据权利要求23所述的安全设备,其中为了生成所述至少一个NFA,所述至少一个处理器还被配置为: 关联所述单个NFA的滞后节点与元数据,所述滞后节点与所述至少一个模式的最后元素关联,所述元数据向被配置为用净荷对生产的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示用于转变至在用与所述选择的子模式的所述结束偏移关联的净荷开始偏移在所述反向遍历方向上对所述单个NFA进行遍历的指令;并且 关联所述单个NFA的前导节点与元数据,所述前导节点与所述至少一个模式的所述第一元素关联,所述元数据向所述遍历器指示用于终止所述遍历并且如果与所述至少一个模式关联的限定符需要则报告在所述前导节点的与所述至少一个模式的所述第一元素匹配的字符在所述净荷内的偏移作为所述至少一个模式的开始偏移以及所述至少一个模式的最终匹配的指令。
26.根据权利要求1所述的安全设备,其中如果所述选择的子模式的第一元素不是所述至少一个模式的第一元素并且所述选择的子模式的最后元素不是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的中间位置,并且如果所述选择的子模式的长度固定,则: 所述至少一个NFA是单个NFA,并且所述至少一个遍历方向包括用于所述单个NFA的与所述至少一个模式的前导部分关联的运行时间处理节点的反向遍历方向和用于所述单个NFA的与所述至少一个模式的所有元素关联的运行时间处理节点的前向遍历方向,所述前导部分是排除所述至少一个模式的滞后部分的所述至少一个模式,所述滞后部分包括所述选择的子模式的所述第一元素、所述至少一个模式的所述最后元素和所述至少一个模式中的在它们之间的所有元素。
27.根据权利要求26所述的安全设备,其中为了生成所述统一的DFA,所述至少一个处理器还被配置为: 关联所述生成的统一的DFA的DFA节点与元数据,所述节点与所述选择的子模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述单个NFA的开始节点的指针、用于转变至在所述反向遍历方向上对所述生成的单个NFA进行遍历并且报告所述选择的子模式的匹配、在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移和所述选择的子模式的长度的指令,所述开始节点与所述前导部分的最后元素关联,净荷开始偏移通过从所述选择的子模式的所述结束偏移减去所述选择的子模式的长度来确定。
28.根据权利要求26所述的安全设备,其中为了生成所述至少一个NFA,所述至少一个处理器还被配置为: 关联所述单个NFA的前导节点与元数据,所述前导节点与所述至少一个模式的第一元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示用于转变至在所述前向遍历方向上对所述单个NFA进行遍历的指令;并且 关联所述单个NFA的滞后节点与元数据,所述滞后节点与所述至少一个模式的所述最后元素关联,所述元数据向所述遍历器指示用于终止所述遍历并且报告在所述滞后节点的与所述至少一个模式的所述最后元素匹配的字符在所述净荷内的偏移和所述至少一个模式的最终匹配的指令。
29.根据权利要求1所述的安全设备,其中如果所述选择的子模式的最后元素是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的结束位置,并且如果所述选择的子模式的长度固定,则所述至少一个模式的用于生成所述至少一个NFA的部分是排除所述选择的子模式的所述至少一个模式,并且所述至少一个遍历方向是反向遍历方向。
30.根据权利要求29所述的安全设备,其中为了生成所述统一的DFA,所述处理器还被配置为: 关联DFA节点与元数据,所述DFA节点与所述选择的子模式的所述最后元素相对应,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述生成的至少一个NFA的开始节点的指针、用于转变至在反向遍历方向上对所述生成的至少一个NFA进行遍历并且报告所述选择的子模式的匹配和在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移的指令,所述生成的至少一个NFA的所述开始节点与所述部分的最后元素关联,所述生成的至少一个NFA的净荷开始偏移通过从所述选择的子模式的所述结束偏移减去所述选择的子模式的长度来确定。
31.根据权利要求29所述的安全设备,其中为了生成所述至少一个NFA,所述处理器还被配置为: 关联与所述部分的第一元素关联的NFA节点与元数据,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示用于终止所述遍历并且报告所述至少一个模式的最终匹配并且如果与所述至少一个模式关联的限定符需要则报告在所述NFA节点的与所述部分的所述第一元素匹配的字符在所述净荷内的偏移作为所述至少一个模式的开始偏移的指令。
32.根据权利要求1所述的安全设备,其中如果所述选择的子模式的最后元素是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的结束位置,并且如果所述选择的子模式的长度可变或者固定,则所述至少一个模式的用于生成所述至少一个NFA的部分是所述至少一个模式,并且所述至少一个遍历方向是反向遍历方向。
33.根据权利要求32所述的安全设备,其中为了生成所述统一的DFA,所述处理器还被配置为: 关联DFA节点与元数据,所述DFA节点与所述选择的子模式的所述最后元素相对应,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述生成的至少一个NFA的开始节点的指针、用于转变至在反向遍历方向上对所述生成的至少一个NFA进行遍历并且报告所述选择的子模式的匹配和在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移并且如果所述选择的子模式的长度固定则报告所述长度的指令,所述生成的至少一个NFA的所述开始节点与所述选择的子模式的最后元素关联,所述生成的至少一个NFA的净荷开始偏移与所述选择的子模式的所述结束偏移关联。
34.根据权利要求32所述的安全设备,其中为了生成所述至少一个NFA,所述处理器还被配置为: 关联与所述部分的第一元素关联的NFA节点与元数据,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示用于终止所述遍历并且报告所述至少一个模式的最终匹配并且如果与所述至少一个模式关联的限定符需要则报告在所述NFA节点的与所述部分的所述第一元素匹配的字符在所述净荷内的偏移作为所述至少一个模式的开始偏移的指令。
35.根据权利要求1所述的安全设备,其中为了在所述至少一个存储器中存储所述生成的统一 DFA和至少一个NFA,所述处理器还被配置为生成包括所述生成的统一 DFA和至少一个NFA的二进制图像。
36.根据权利要求1所述的安全设备,其中所述至少一个处理器包括DFA协同处理器和NFA协同处理器,其被配置作为加速单元来分别分流DFA和NFA运行时间处理。
37.一种方法,包括: 在安全设备中的与至少一个存储器操作地耦合的至少一个处理器中,所述安全设备操作地耦合到网络: 基于至少一个试探从在一个或者多个正则表达式模式的集合中的每个模式选择子模式; 使用从在所述集合中的所有模式选择的所述子模式来生成统一的确定性有限自动机(DFA); 为在所述集合中的至少一个模式生成至少一个非确定性有限自动机(NFA),所述至少一个模式的用于生成所述至少一个NFA的部分和用于所述至少一个NFA的运行时间处理的至少一个遍历方向基于所述选择的子模式的长度是固定还是可变和所述选择的子模式在所述至少一个模式内的位置来确定;并且 在所述至少一个存储器中存储所生成的所述统一的DFA和所述至少一个NFA。
38.根据权利要求37所述的方法,其中所述至少一个试探包括最大化选择的唯一子模式的数目和选择的每个子模式的长度。
39.根据权利要求37所述的方法,还包括确定所述选择的子模式的长度是固定还是可变。
40.根据权利要求37所述的方法,还包括: 计算选择的每个子模式的哈希值;并且 与从其选择所述子模式的模式的标识符关联地存储计算的每个哈希值。
41.根据权利要求37所述的方法,其中所述至少一个试探包括最大化选择的唯一子模式的数目,并且还包括:为在所述集合中的每个模式, 计算所述选择的子模式的哈希值; 比较所述计算的哈希值与为在所述集合中的其它模式选择的子模式的哈希值的列表;并且 如果在所述列表中发现所述计算的哈希值,则确定是否(i)用来自所述模式的另一子模式替换所述选择的子模式或者(ii)用从在所述集合中的其他模式选择的备选子模式替换为在所述集合中的所述另一模式选择的所述子模式,在所述集合中的所述其他模式基于在所述列表中的与所述计算的哈希值的关联性来标识,其中所述用于是否替换(i)或者(ii)的确定是基于比较被考虑用于所述替换的子模式的长度,从而最大化选择的所述唯一子模式的长度。
42.根据权利要求37所述的方法,其中所述至少一个试探包括标识每个模式的子模式并且如果每个模式的标识的所述子模式中的给定的子模式具有小于最小门限的长度则忽略所述给定的子模式。
43.根据权利要求37所述的方法,其中所述至少一个试探包括访问与历史使用频率指示符关联的子模式的知识库并且如果在访问的所述知识库中的用于每个模式的标识的所述子模式中的给定的子模式的历史使用频率指示符大于或者等于使用频率门限则忽略所述给定的子模式。
44.根据权利要求37所述的方法,其中所述至少一个试探包括标识每个模式的子模式并且为每个模式通过基于所述标识的子模式中的给定的子模式具有所述标识的子模式中最大数目的连续文本字符并且基于所述给定的子模式在为所述一个或者多个正则表达式的集合选择的所有子模式之中唯一而选择所述给定的子模式,来最大化在所述选择的子模式中的连续文本字符的数目。
45.根据权利要求37所述的方法,其中所述至少一个试探包括: 基于每个模式的给定的子模式中的每个子模式的子模式类型和所述给定的子模式的长度为所述给定的子模式设置优先级,更长长度子模式被设置优先级高于更少长度的另一子模式; 基于所述优先级设置来选择唯一子模式作为所述选择的子模式,所述选择的唯一子模式具有至少最小长度门限的长度;并且 如果所述给定的子模式都不唯一和具有至少所述最小长度门限的长度,则基于所述优先级设置选择非唯一子模式作为所述选择的子模式。
46.根据权利要求37所述的方法,其中所述至少一个试探包括基于每个模式的给定的子模式中的每个子模式的子模式类型为所述给定的子模式设置优先级,所述子模式类型是仅文本、备选、单字符重复或者多字符重复,并且用于所述子模式类型的从最高到最低的优先级是仅文本、备选、单字符重复和多字符重复。
47.根据权利要求37所述的方法,其中如果所述选择的子模式的第一元素是所述至少一个模式的第一元素并且所述选择的子模式的长度固定,则所述选择的子模式的位置是所述至少一个模式的开始位置,所述至少一个模式的用于生成所述至少一个NFA的所述部分是排除所述选择的子模式的所述至少一个模式,所述至少一个NFA是单个NFA,并且所述至少一个NFA的所述至少一个遍历方向是前向遍历方向。
48.根据权利要求47所述的方法,其中生成所述统一的DFA包括: 关联所述生成的统一的DFA的与所述选择的子模式的最后元素关联的DFA节点与元数据,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述生成的至少一个NFA的开始节点的指针、用于转变至在前向遍历方向上对所述至少一个NFA进行遍历并且报告所述选择的子模式的匹配、在所述DFA节点的与所述选择的子模式的所述最后元素匹配的前导字符在所述净荷内的前导偏移作为所述选择的子模式的结束偏移和所述选择的子模式的长度的指令,所述至少一个NFA的所述开始节点与所述至少一个模式的用于生成所述至少一个NFA的所述部分的第一元素关联,所述至少一个NFA的净荷开始偏移与在所述选择的子模式的所述结束偏移的另一字节之后的字节关联。
49.根据权利要求37所述的方法,其中生成所述至少一个NFA包括: 关联所述生成的至少一个NFA的NFA节点与元数据,所述元数据向所述遍历器指示用于终止所述遍历并且报告在所述NFA节点匹配的滞后字符在所述净荷内的滞后偏移作为所述至少一个模式的结束偏移和所述至少一个模式的最终匹配的指令,所述NFA节点与所述至少一个模式的最后元素关联。
50.根据权利要求37所述的方法,其中如果所述选择的子模式的第一元素不是所述至少一个模式的第一元素并且所述选择的子模式的最后元素不是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的中间位置,并且如果所述选择的子模式的长度固定,则: 所述至少一个模式的用于生成所述至少一个NFA的所述部分包括所述至少一个模式的滞后部分和前导部分,所述至少一个模式的所述滞后部分是排除所述选择的子模式和所述至少一个模式的所述前导部分的所述至少一个模式,所述至少一个模式的所述前导部分排除所述选择的子模式和所述至少一个模式的所述滞后部分;并且 所述至少一个NFA包括滞后NFA和前导NFA,所述至少一个遍历方向包括前向遍历方向和反向遍历方向,所述滞后NFA具有所述前向遍历方向,所述前导NFA具有所述反向遍历方向,所述至少一个模式的所述滞后部分用于生成所述滞后NFA,并且所述至少一个模式的所述前导部分用于生成所述前导NFA。
51.根据权利要求50所述的方法,其中生成所述统一的DFA包括: 关联所述生成的统一的DFA的DFA节点与元数据,所述DFA节点与所述选择的子模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述滞后NFA的开始节点的指针、用于转变至在所述前向遍历方向上对所述滞后NFA进行遍历的指令,所述滞后NFA的所述开始节点与所述滞后部分的第一元素关联,所述滞后NFA的净荷开始偏移与在所述选择的子模式的所述结束偏移之后的字节关联,指示指向所述前导NFA的开始节点的指针、用于转变至在所述反向遍历方向上对所述前导NFA进行遍历并且报告在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移、所述选择的子模式的匹配和所述选择的子模式的长度的指令,所述前导NFA的所述开始节点与所述前导部分的最后元素关联,所述前导NFA的净荷开始偏移通过从所述选择的子模式的所述结束偏移减去所述选择的子模式的长度来确定。
52.根据权利要求50所述的方法,其中生成所述至少一个NFA包括: 关联所述滞后NFA的滞后节点与元数据,所述滞后节点与所述至少一个模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示用于终止对所述生成的滞后NFA进行遍历并且报告在所述滞后节点的与所述最后元素匹配的、所述净荷的滞后字符在所述净荷内的滞后偏移和所述至少一个模式的所述滞后部分的匹配的指令;并且 关联所述前导NFA的前导节点与元数据,所述前导节点与所述至少一个模式的所述第一元素关联,所述元数据向所述遍历器指示用于终止对所述生成的前导NFA进行遍历并且报告所述至少一个模式的所述前导部分的匹配并且如果与所述至少一个模式关联的限定符需要则报告在所述前导节点的与所述第一元素匹配的、所述净荷的所述前导字符在所述净荷内的前导偏移作为所述至少一个模式的开始偏移的指令。
53.根据权利要求37所述的方法,其中如果所述选择的子模式的第一元素不是所述至少一个模式的第一元素并且所述选择的子模式的最后元素不是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的中间位置,并且如果所述选择的子模式的所述第一元素是所述至少一个模式的所述第一元素,则所述选择的子模式的位置是所述至少一个模式的所述开始位置,并且如果所述子模式的长度固定或者可变,则: 所述至少一个模式的用于生成所述至少一个NFA的所述部分包括所述至少一个模式的滞后部分和整个部分,所述至少一个模式的所述滞后部分是排除所述至少一个模式的前导部分的所述至少一个模式,所述前导部分包括所述至少一个模式的所述第一元素、所述选择的子模式的所述最后元素和在所述至少一个模式中的在它们之间的所有元素,所述至少一个模式的所述整个部分是所述至少一个模式,如果所述选择的子模式的位置是开始位置,则所述前导部分是所述选择的子模式;并且 所述至少一个NFA包括滞后NFA和伞形NFA,所述至少一个遍历方向包括前向遍历方向和反向遍历方向,所述滞后NFA具有所述前向遍历方向,所述伞形NFA具有所述反向遍历方向,所述至少一个模式的所述滞后部分用于生成所述滞后NFA,并且所述至少一个模式的所述整个部分用于生成所述伞形NFA。
54.根据权利要求53所述的方法,其中生成所述统一的DFA包括: 关联所述生成的统一的DFA的DFA节点与元数据,所述DFA节点与所述选择的子模式的所述最后元素关联,所述元数据向被配置为用净荷生成的对所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述滞后NFA的开始节点的指针、用于转变至在所述前向遍历方向上对所述滞后NFA进行遍历并且报告所述选择的子模式的匹配和在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移并且如果所述选择的子模式的长度固定则报告所述长度的指令,所述滞后NFA的所述开始节点与所述滞后部分的第一元素关联。
55.根据权利要求53所述的方法,其中生成所述至少一个NFA包括: 关联所述生成的滞后NFA的滞后节点与元数据,所述滞后节点与所述至少一个模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述伞形NFA的开始节点的指针、用于转变至在所述反向遍历方向上对所述伞形NFA进行遍历并且可选地报告在所述滞后节点的与所述至少一个模式的所述最后元素匹配的字符在所述净荷内的偏移并且可选地报告所述至少一个模式的所述滞后部分的匹配的指令,所述伞形NFA的所述开始节点与所述至少一个模式的所述最后兀素关联;并且 关联所述生成的伞形NFA的伞形节点与元数据,所述伞形节点与所述至少一个模式的所述第一元素关联,所述元数据向所述遍历器指示用于终止所述遍历并且报告所述至少一个模式的最终匹配并且如果与所述至少一个模式关联的限定符需要则报告在所述伞形节点的与所述至少一个模式的所述第一元素匹配的开始字符在所述净荷内的开始偏移作为所述至少一个模式的开始偏移的指令。
56.根据权利要求37所述的方法,其中如果所述选择的子模式的第一元素不是所述至少一个模式的第一元素并且所述选择的子模式的最后元素不是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的中间位置,并且如果所述选择的子模式的所述第一元素是所述至少一个模式的所述第一元素,则所述选择的子模式的位置是所述至少一个模式的开始位置,并且如果所述子模式的长度固定或者可变,则: 所述至少一个模式的用于生成所述至少一个NFA的所述部分包括所述至少一个模式的滞后部分和前导部分,所述至少一个模式的所述滞后部分是排除所述至少一个模式的所述前导部分的所述至少一个模式,所述前导部分包括所述至少一个模式的所述第一元素、所述选择的子模式的所述最后元素和在所述至少一个模式中的在它们之间的所有元素,如果所述选择的所述子模式的位置是所述开始位置,则所述滞后部分是所述选择的子模式;并且 所述至少一个NFA包括滞后NFA和前导NFA,所述至少一个遍历方向包括前向遍历方向和反向遍历方向,所述滞后NFA具有所述前向遍历方向,所述前导NFA具有所述反向遍历方向,所述至少一个模式的所述滞后部分用于生成所述滞后NFA,并且所述至少一个模式的所述前导部分用于生成所述前导NFA。
57.根据权利要求56所述的方法,其中生成所述统一的DFA包括: 关联所述生成的统一的DFA的DFA节点与元数据,所述DFA节点与所述选择的子模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述滞后NFA的开始节点的指针、用于转变至在所述前向遍历方向上对所述滞后NFA进行遍历的指令,所述滞后NFA的所述开始节点与所述滞后部分的第一元素关联,指示指向所述前导NFA的开始节点的指针、用于转变至在所述反向遍历方向上对所述前导NFA进行遍历并且报告所述选择的子模式的匹配和在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移并且如果所述选择的子模式的长度固定则报告所述长度的指令,所述前导NFA的所述开始节点与所述选择的子模式的最后元素关联。
58.根据权利要求56所述的方法,其中生成所述至少一个NFA包括: 关联所述生成的滞后NFA的滞后节点与元数据,所述滞后节点与所述至少一个模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示用于终止对所述滞后NFA进行遍历并且报告在所述滞后节点的与所述至少一个模式的所述最后元素匹配的滞后字符在所述净荷内的滞后偏移并且报告所述至少一个模式的所述滞后部分的匹配的指令;并且 关联所述生成的前导NFA的前导节点与元数据,所述前导节点与所述至少一个模式的所述第一元素关联,所述元数据向所述遍历器指示用于终止对所述前导NFA进行遍历并且报告所述前导部分的匹配和在所述前导节点的与所述至少一个模式的所述第一元素匹配的前导字符在所述净荷内的前导偏移的指令。
59.根据权利要求37所述的方法,其中如果所述选择的子模式的第一元素不是所述至少一个模式的第一元素并且所述选择的子模式的最后元素不是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的中间位置,并且如果所述选择的子模式的长度固定或者可变,则: 所述至少一个NFA是单个NFA,并且所述至少一个遍历方向包括用于所述单个NFA的与所述至少一个模式的滞后部分的元素关联的运行时间处理节点的前向遍历方向和用于所述单个NFA的与所述至少一个模式的所有元素关联的运行时间处理节点的反向遍历方向,所述至少一个模式的所述滞后部分是排除所述至少一个模式的前导部分的所述至少一个模式,所述前导部分包括所述至少一个模式的所述第一元素、所述选择的子模式的所述最后元素和在所述至少一个模式中的在它们之间的所有元素。
60.根据权利要求59所述的方法,其中生成所述统一的DFA包括: 关联所述生成的统一的DFA的DFA节点与元数据,所述节点与所述选择的子模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述单个NFA的开始节点的指针、用于转变至在所述前向遍历方向上对所述生成的单个NFA进行遍历并且报告所述选择的子模式的匹配、在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移并且如果所述选择的子模式的长度固定则报告所述长度的指令,所述开始节点与在所述至少一个模式中的紧接地跟随所述选择的子模式的所述最后元素的下一元素关联。
61.根据权利要求59所述的方法,其中生成所述至少一个NFA包括: 关联所述单个NFA的滞后节点与元数据,所述滞后节点与所述至少一个模式的最后元素关联,所述元数据向被配置为用净荷对生产的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示用于转变至用与所述选择的子模式的所述结束偏移关联的净荷开始偏移在所述反向遍历方向上对所述单个NFA进行遍历的指令;并且 关联所述单个NFA的前导节点与元数据,所述前导节点与所述至少一个模式的所述第一元素关联,所述元数据向所述遍历器指示用于终止所述遍历并且如果与所述至少一个模式关联的限定符需要则报告在所述前导节点的与所述至少一个模式的所述第一元素匹配的字符在所述净荷内的偏移作为所述至少一个模式的开始偏移以及所述至少一个模式的最终匹配的指令。
62.根据权利要求37所述的方法,其中如果所述选择的子模式的第一元素不是所述至少一个模式的第一元素并且所述选择的子模式的最后元素不是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的中间位置,并且如果所述选择的子模式的长度固定,则: 所述至少一个NFA是单个NFA,并且所述至少一个遍历方向包括用于所述单个NFA的与所述至少一个模式的前导部分关联的运行时间处理节点的反向遍历方向和用于所述单个NFA的与所述至少一个模式的所有元素关联的运行时间处理节点的前向遍历方向,所述前导部分是排除所述至少一个模式的滞后部分的所述至少一个模式,所述滞后部分包括所述选择的子模式的所述第一元素、所述至少一个模式的所述最后元素和所述至少一个模式中的在它们之间的所有元素。
63.根据权利要求62所述的方法,其中生成所述统一的DFA包括: 关联所述生成的统一的DFA的DFA节点与元数据,所述节点与所述选择的子模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述单个NFA的开始节点的指针、用于转变至在所述反向遍历方向上对所述生成的单个NFA进行遍历并且报告所述选择的子模式的匹配、在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移和所述选择的子模式的长度的指令,所述开始节点与所述前导部分的最后元素关联,净荷开始偏移通过从所述选择的子模式的所述结束偏移减去所述选择的子模式的长度来确定。
64.根据权利要求62所述的方法,其中生成所述至少一个NFA包括: 关联所述单个NFA的前导节点与元数据,所述前导节点与所述至少一个模式的第一元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示用于转变至在所述前向遍历方向上对所述单个NFA进行遍历的指令;并且 关联所述单个NFA的滞后节点与元数据,所述滞后节点与所述至少一个模式的所述最后元素关联,所述元数据向所述遍历器指示用于终止所述遍历并且报告在所述滞后节点的与所述至少一个模式的所述最后元素匹配的字符在所述净荷内的偏移和所述至少一个模式的最终匹配的指令。
65.根据权利要求37所述的方法,其中如果所述选择的子模式的最后元素是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的结束位置,并且如果所述选择的子模式的长度固定,则所述至少一个模式的用于生成所述至少一个NFA的所述部分是排除所述选择的子模式的所述至少一个模式,并且所述至少一个遍历方向是反向遍历方向。
66.根据权利要求65所述的方法,其中生成所述统一的DFA包括: 关联DFA节点与元数据,所述DFA节点与所述选择的子模式的所述最后元素关联,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述生成的至少一个NFA的开始节点的指针、用于转变至在反向遍历方向上对所述生成的至少一个NFA进行遍历并且报告所述选择的子模式的匹配和在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移的指令,所述生成的至少一个NFA的所述开始节点与所述部分的最后元素关联。
67.根据权利要求65所述的方法,其中生成所述至少一个NFA包括: 关联与所述部分的第一元素关联的NFA节点与元数据,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示用于终止所述遍历并且报告所述至少一个模式的最终匹配并且如果与所述至少一个模式关联的限定符需要则报告在所述NFA节点的与所述部分的所述第一元素匹配的字符在所述净荷内的偏移作为所述至少一个模式的开始偏移的指令。
68.根据权利要求37所述的方法,其中如果所述选择的子模式的最后元素是所述至少一个模式的最后元素,则所述选择的子模式的位置是所述至少一个模式的结束位置,并且如果所述选择的子模式的长度可变或者固定,则所述至少一个模式的用于生成所述至少一个NFA的所述部分是所述至少一个模式,并且所述至少一个遍历方向是反向遍历方向。
69.根据权利要求68所述的方法,其中生成所述统一的DFA包括: 关联DFA节点与元数据,所述DFA节点与所述选择的子模式的所述最后元素相对应,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示指向所述生成的至少一个NFA的开始节点的指针、用于转变至在反向遍历方向上对所述生成的至少一个NFA进行遍历并且报告所述选择的子模式的匹配和在所述DFA节点的与所述选择的子模式的所述最后元素匹配的字符在所述净荷内的偏移作为所述选择的子模式的结束偏移并且如果所述选择的子模式的长度固定则报告所述长度的指令,所述生成的至少一个NFA的所述开始节点与所述选择的子模式的最后元素关联,所述生成的至少一个NFA的净荷开始偏移与所述选择的子模式的所述结束偏移关联。
70.根据权利要求68所述的方法,其中生成所述至少一个NFA包括: 关联与所述部分的第一元素关联的NFA节点与元数据,所述元数据向被配置为用净荷对生成的所述统一的DFA和所述至少一个NFA进行遍历的遍历器指示用于终止所述遍历并且报告所述至少一个模式的最终匹配并且如果与所述至少一个模式关联的限定符需要则报告在所述NFA节点的与所述部分的所述第一元素匹配的字符在所述净荷内的偏移作为所述至少一个模式的开始偏移的指令。
71.根据权利要求37所述的方法,其中在所述至少一个存储器中存储所述生成的统一DFA和至少一个NFA包括生成包括所述生成的统一 DFA和至少一个NFA的二进制图像。
72.根据权利要求37所述的方法,其中所述至少一个处理器包括DFA协同处理器和NFA协同处理器,其被配置作为加速单元以分别分流DFA和NFA运行时间处理。
73.—种非瞬态计算机可读介质,具有在其上存储的指令序列,所述指令序列在被加载并且由处理器执行时使所述处理器: 基于至少一个试探从在一个或者多个正则表达式模式的集合中的每个模式选择子模式; 使用从在所述集合中的所有模式选择的所述子模式来生成统一的确定性有限自动机(DFA); 为在所述集合中的至少一个模式生成至少一个非确定性有限自动机(NFA),所述至少一个模式的用于生成所述至少一个NFA的部分和用于所述至少一个NFA的运行时间处理的至少一个遍历方向基于所述选择的子模式的长度是固定还是可变和所述选择的子模式在所述至少一个模式内的位置来确定;并且 在所述至少一个存储器中存储所生成的所述统一的DFA和所述至少一个NFA。
【文档编号】H04L29/06GK104426911SQ201410433321
【公开日】2015年3月18日 申请日期:2014年8月28日 优先权日:2013年8月30日
【发明者】S·L·比拉, R·戈亚尔, A·迪克西特 申请人:凯为公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1