发明内容
本发明的目的是提供一种能够克服上述缺陷的基于DFA引擎的协议解析方法。
本发明提供了一种基于DFA的协议解析方法,包括:获取待解析协议内容中的字段名称和字段分割符;将所述字段名称和所述字段分割符作为模式串,根据所述模式串构建模式查找树;将所述模式查找树和待解析协议内容作为有限状态自动机的输入,利用所述DFA在待解析协议内容中对所述模式串进行匹配;以及根据匹配结果将待解析协议中的协议字段值提取出来。
优选地,所述模式查找树的根节点不包含字符,除根节点之外的其他节点至少包含一个字符,每个节点的所有子节点包含的字符都不相同。
优选地,根据所述模式串构建模式查找树的步骤包括:对所述模式查找树进行优化压缩,在优化压缩后的模式查找树中,除根节点之外的其他节点包含一个或多个字符。
优选地,所述模式串在所述查找树中是从根节点到其他任一节点的路径上的所有节点中包含的字符的顺序组合。
优选地,所述模式查找树的各个节点对应于所述DFA的各个状态,当所述匹配中出现失配时,所述DFA状态从所述模式查找树中对应DFA当前状态的节点跳转到下一节点。
优选地,所述利用所述DFA在待解析协议内容中对所述模式串进行匹配的步骤包括:通过利用DFA在待解析协议内容中匹配所述字段名称,得到所述字段名称在待解析协议内容中的字段名称位置;通过利用DFA在待解析协议内容中所述字段名称位置开始匹配所述字段分割符,得到与所述字段名称对应的字段分割符的位置;以及根据所述字段名称位置及其对应的字段分割符的位置,提取出与所述字段名称对应的协议字段值。
优选地,所述字段名称和所述字段分割符的获取是通过待解析协议的扩展巴克斯范式ABNF实现的。
优选地,所述模式串中包含一个或多个字段名称和一个字段分割符。
本发明一方面使用字符串多模式匹配构建模式查找树,另一方面使用DFA引擎,构建的模式查找树中的各个节点作为DFA中的各个状态,通过DFA引擎实现了字符串的快速匹配,大大提高了协议解析速度。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
本发明提出了一种使用DFA引擎的协议快速解析方法,首先根据待解析协格式中的模式串构建模式匹配查找树,将查找树的各个节点作为DFA状态机的不同状态,使用DFA引擎对原始文本进行快速匹配查找,找到协议中相应的模式串后给出协议内容的定位信息,进一步可解析得到相应的协议内容。本发明通过将多模式匹配与DFA引擎相结合,大大提高了协议解析速度。
图1是根据本发明实施例的基于DFA的协议解析方法的流程图。
在步骤101,获取待解析协议中的字段名称和字段分割符。
在接收到待解析协议内容后,可根据待解析协议的扩展巴克斯范式(AngmentedBackusNaurForm,ABNF)等格式得到待解析协议中的各个字段名称和字段分割符。
在步骤102,形成待查找模式串。
根据上面得到的待解析协议中的字段名称和字段分割符来形成待查找模式串,每个模式串中可以包含一个或多个字符。一般来说,待解析协议中可以有多个不同的字段名称,每个字段名称可以对应于形式上相同的多个字段分割符。
在步骤103,根据查找模式串构建出模式查找树。
首先构建一个空节点作为查找树的根。然后,依次遍历待查找模式串集合,其中,对每个待查找模式串,再依次遍历其中的每个字符。最后,根据每个模式串中的每个字符依次在根节点下构建新的节点,新的节点将作为子节点插入到查找树中。优选地,在查找树中插入子节点的过程遵循下面的原则。每个节点都至少包含一个字符;每个节点的所有子节点包含的字符都不相同;如果发现某个字符对应的节点已存在,则不插入子节点。
应当理解,最终形成的模式查找树应该具有这样的特征,即将从根节点到树中任一节点的路径上经过的节点上的字符连接起来,应该构成该任一节点对应的模式串。在某些特殊情况下,节点中也可以包含多余一个的字符,比如将常见的字段分割符\r\n包含在一个节点中。
在步骤104,将模式查找树和待解析的协议内容作为DFA引擎的输入。
具体而言,将查找树的各个节点作为DFA状态机的不同状态,用DFA引擎对原始文本/待解析协议内容中的字符串进行快速匹配查找。当出现失配时,DFA状态会从查找树中的一个节点跳转到下一个节点,而每次跳转都将离下一个匹配位置更近。模式查找树上各个边代表DFA中状态之间的跳变,将模式查找树与DFA引擎结合起来,可以加快匹配查找的速度。
在步骤105,通过DFA匹配得到字段名称的位置。
当通过DFA引擎在模式查找树中成功匹配到一个字段名称之后,即可得到该字段名称的位置。另外,该字段名称的匹配位置的下一个字符即为该字段名称对应的协议字段值的开始位置。
在步骤106,通过DFA引擎匹配得到步骤105中字段名称后的第一个字段分割符,从而计算出该字段分割符的位置。
本领域技术人员应当理解,在待解析协议内容中,通过一对模式串(包括字段名称和字段分割符)匹配成功,以及这一对模式串之间的协议内容的匹配不成功,可以通过简单计算并结合计数器等其他形式得到该协议字段值的起止位置。
在步骤107,根据对应的字段名称和字段分割符的位置,解析得到对应的协议字段值。
在步骤108,在得到待解析协议内容中的所有协议字段值后,完成该协议内容的解析。
通过DFA引擎对每对模式串的匹配,可以得到与各对模式串对应的协议字段在待解析协议内容的字符串中的位置。重复执行步骤105和步骤106,可以将每个协议字段解析出来,从而完成该协议内容的解析。
图2是根据本发明实施例的模式查找树的示意图。
图3是根据本发明实施例的模式查找树在压缩后的示意图。
下面,结合图2和图3对根据本发明实施例的模式查找树的创建及其形式进行详细描述。
在模式查找树的示例中,root节点为查找树的根节点,不包含任何字符,she、he、his和her为4个模式查找串。
首先,创建不包含字符的根节点root,然后遍历模式查找串。首先,遍历模式查找串she中的字符,依次在根节点下创建层级依次降低的三个子节点,该三个子节点分别包含字符s、h和e;接下来,遍历模式查找串he中的字符,依次在根节点下创建层级依次降低两个子节点,该两个子节点分别包含字符h和e;继续遍历模式查找串his中的字符,由于查找树中已经存在包含字符h的节点,因此只需在包含字符h的节点下创建两个子节点,该两个子节点分别包含字符i和s;最后遍历模式查找串her中的字符,由于查找树中已经存在包含字符h的节点及其包含字符e的子节点,因此只需在包含字符e的节点下创建一个子节点,该子节点包含字符r。至此,根据查找字符串she、he、his和her的模式查找树初步创建完毕。在模式查找树的初步创建完成之后,还可以对模式查找树进行优化压缩,将叶子路径上的各个节点合并成一个节点,如图3所示。
应当指出,图2和图3示出的模式查找树和模式查找串只是为了说明模式查找树和模式查找串在构建查找树中的关系,并不意在限制模式查找串和模式查找树的数量和形式。
应当指出,还可以对上述得到的模式书进行优化压缩,压缩后的模式树如图3所示。可见,在压缩后的模式树中,每个节点中包括一个或多个字符。
图4是根据本发明实施例的基于DFA的匹配示意图。
如图4所示,为模式查找树匹配过程示例,从根节点到树中任一节点的路径经过的节点上的字符连接起来,构成该节点对应的模式串。例如,匹配模式串she,从root开始逐层顺序匹配。在匹配到字符s后在树的下一层匹配到字符h,在匹配到字符h后在树的下一层匹配到字符e。对于字符数量超过1个的节点,在匹配到该节点上的第一个字符后,后续下一个字符与该节点的第二个字条进行匹配,依次完成该节点上所有字符的匹配后,再移动下一层节点进行匹配。可以看出,模式串she在查找树中体现为从根节点到包含字符e的节点的路径。
图5是根据本发明实施例的根据匹配位置获取字段值的示意图。
如图5所示,为一个RTSP协议内容解析结果,每个协议字段匹配位置和其后最近的字段分割符位置之间的部分为该协议字段对应的值。假设该协议内容中之前的模式串对应的协议字段值已经获取完毕,以最后的字符串User-agent:VLCmediaplayer\r\n的协议字段值的查找为例进行说明。
匹配到模式串User-agent:,其中的字符U的位置为位置1,其字段长度p(在此为11),距离该位置1最近的字段分割符\r的位置为位置1。然后,匹配到距离模式串User-agent:的下一个字段分割符\r\n,其中的\r的位置为对应的字段分割符的开始位置,令其为位置2。
在待解析协议内容中,通过一对模式串(包括字段名称和字段分割符)匹配成功,以及这一对模式串之间的协议内容的匹配不成功,可以通过简单计算并结合计数器等其他形式得到协议字段值的起止位置。进一步,以上一对模式串的位置为基础,可以得出下一对模式串的位置。
显而易见,位置1+p则应该为模式串User-agent:对应的协议字段VLCmediaplayer的开始位置;另外,位置2-(位置1+p)即为对应该模式串的协议字段值的长度。根据该协议字段的开始位置及其字段长度,可以将该协议字段值从待解析的协议内容中提取出来,从而完成该协议字段的解析。
待解析协议内容中的其他协议字段值的解析与上面举例描述的协议字段值的过程相似,因此不再赘述。
因此,通过对图5的待解析的协议内容中的每个协议字段值的依次解析,最终完成对待解析协议内容的协议解析。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。