一种应用层协议解析方法及装置与流程

文档序号:12493583阅读:177来源:国知局
一种应用层协议解析方法及装置与流程

本发明涉及互联网技术领域,尤其涉及一种应用层协议解析方法及装置。



背景技术:

网络协议解码作为现代防火墙、路由设备以及诸多其他网络安全产品的核心功能,主要应用于个人信息防护和企业网安全,业务涉及网络取证分析、入侵检测与防御、数据过滤与防泄漏、用户行为审计与监控、网络故障分析等。

近年来,随着互联网规模的扩大和网络应用数量激增,针对网站、邮件、聊天软件、微博社交以及文件传输等上层应用,它们都各自遵循一种或多种协议规范来与远端的服务器进行数据交互。每个应用的协议解码过程都对应于各自的状态,使得大多数解码实现都是采用硬编码方式。硬编码方式虽然保证了解码的准确性,但是面临开发周期、后期维护成本和扩展难度大问题。

因此,部分厂商和学者提出了基于模版技术的解码方案。但是这些方案基本上都是针对web应用的,即底层协议采用HTTP协议,对普通TCP/UDP之上的IM聊天软件、文件传输等非Web应用却无能为力。因此,如果能够实现一种web应用和非web应用的通用解码方案,将节省应用开发及后期维护的成本。



技术实现要素:

本发明所提供的一种应用层协议解析方法及装置,用以解决现有技术的解解码方案无法同时支持web应用和非web应用的问题。

为了实现上述发明目的,本发明采用下述的技术方案:

依据本发明的一个方面,提供一种应用层协议解析方法,包括:

配置解析模块中预先配置事务处理规则、输入字段关系表以及输出字段关系表;其中,所述事务处理规则根据事务类型分为HTTP、TCP以及UDP三种;

在进行解析时,字段映射模块将外部输入字段根据所述输入字段关系表映射为解码所需的内部字段;

事务分发模块根据所述内部字段所属的事务类型将所述内部字段分发至事务处理模块;

事务处理模块根据所述内部字段所属类型获取相应的事务处理规则,并根据所述事务处理规则解析出所述内部字段所对应的输出字段;

事务输出模块根据所述输出字段关系表获取所述输出字段所映射的预定义字段并输出。

可选的,所述字段映射模块将外部输入字段根据所述输入字段关系表映射为解码所需的内部字段,具体包括:

根据所述输入字段关系表判断所述外部输入字段是否为关心字段;

当判断为关心字段时,则输出所述外部输入字段所映射的内部字段;

当判断不是所关心的字段时,则丢弃所述外部输入字段。

可选的,所述事务处理规则包括过滤规则和处理规则;在事务分发模块根据所述事务处理规则解析出所述内部字段所对应的输出字段,具体包括:

根据所述过滤规则确定所述内部字段所属的事务;

根据所述处理规则对所述内部字段进行解析,获取所述输出字段。

可选的,所述根据所述处理规则对所述内部字段进行解析,获取所述输出字段,具体包括。

判断所述内部字段是否满足入口条件;

当满足时,则判断所述内部字段是否满足当前事务处理状态,当判断满足时,判断是否存在嵌套状态;

当判断存在嵌套状态时,则对嵌套状态进行处理,待处理完毕后,则获取当前状态所对应的解码动作为输出字段或者缓存字段;

当判断不存在嵌套状态时,则获取当前状态所对应的解码动作为输出字段或者缓存字段。

可选的,所述事务输出模块根据所述输出字段关系表获取所述输出字段所映射的预定义字段并输出,具体包括:

判断所述输出字段在所述输出字段关系表中是否存在映射的预定义字段;当存在时,则将所述预定义字段进行输出,当不存在时,则直接将所述输出字段进行输出。

依据本发明的一个方面,提供一种应用层协议解析装置,包括:

配置解析模块,用于预先配置事务处理规则、输入字段关系表以及输出字段关系表;其中,所述事务处理规则根据事务类型分为HTTP、TCP以及UDP三种;

字段映射模块,用于在进行解析时,将外部输入字段根据所述输入字段关系表映射为解码所需的内部字段;

事务分发模块,用于根据所述内部字段所属的事务类型将所述内部字段分发至事务处理模块;

事务处理模块,用于根据所述内部字段所属类型获取相应的事务处理规则,并根据所述事务处理规则解析出所述内部字段所对应的输出字段;

事务输出模块,用于根据所述输出字段关系表获取所述输出字段所映射的预定义字段并输出。

可选的,所述字段映射模块,具体用于:

根据所述输入字段关系表判断所述外部输入字段是否为关心字段;

当判断为关心字段时,则输出所述外部输入字段所映射的内部字段;

当判断不是所关心的字段时,则丢弃所述外部输入字段。

可选的,所述事务处理规则包括过滤规则和处理规则;所述事务处理模块,具体用于:

根据所述过滤规则确定所述内部字段所属的事务;

根据所述处理规则对所述内部字段进行解析,获取所述输出字段。

可选的,所述事务处理模块,具体用于:

判断所述内部字段是否满足入口条件;

当满足时,则判断所述内部字段是否满足当前事务处理状态,当判断满足时,判断是否存在嵌套状态;

当判断存在嵌套状态时,则对嵌套状态进行处理,待处理完毕后,则获取当前状态所对应的解码动作为输出字段或者缓存字段;

当判断不存在嵌套状态时,则获取当前状态所对应的解码动作为输出字段或者缓存字段。

可选的,所述事务输出模块,具体用于:

判断所述输出字段在所述输出字段关系表中是否存在映射的预定义字段;当存在时,则将所述预定义字段进行输出,当不存在时,则直接将所述输出字段进行输出。

本发明具有以下技术效果:

本发明所提供的应用层协议解析方法及装置,将应用层的解码过程进行统一的抽象描述,并以事务处理规则形式预先保存,在进行解码时,根据不同应用层协议获取指定的事务处理规则对报文进行解码。本发明将解码过程的实现与逻辑描述相分离,大大提升了应用解码引擎通用性和扩展性,缩减了维护成本和解码开发周期。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中应用层协议解析方法的流程图;

图2为本发明实施例中配置解析模块配置的事务层次模型图;

图3为本发明一具体实施例中配置解析模块配置的事务处理规则示意图;

图4为本发明实施例中事务处理模块的处理流程图;

图5为本发明实施例中应用层协议解析装置的结构框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明所提供的应用层协议解析方法及装置,将应用层的解码过程进行统一的抽象描述,并以事务处理规则形式预先保存,在进行解码时,根据不同应用层协议获取指定的事务处理规则对报文进行解码。本发明将解码过程的实现与逻辑描述相分离,大大提升了应用解码引擎通用性和扩展性,缩减了维护成本和解码开发周期。

本发明实施例提供一种应用层协议解析方法,如图1所示,包括:

步骤101,配置解析模块中预先配置事务处理规则、输入字段关系表以及输出字段关系表;其中,事务处理规则根据事务类型分为HTTP、TCP以及UDP三种;输入字段关系表中定义了外部输入字段和解码所需的内部字段之间的映射关系;输出字段关系表中定义了输出字段与外部预定义字段的映射关系。

在该步骤中,预先配置的事务处理规则包括过滤规则和处理规则。具体地,在本实施例中,如图2所示,配置的事务层次的模型。其中,<transaction>为应用的一个事务,通常一个应用可包含多个事务;<filter>表示当前事务的过滤规则,对应于事务处理模块中的过滤器,只有当过滤条件匹配时候才会进行事务的后续处理,一个事务如包含多个<filter>表示有多个入口匹配条件;<processor>对应的是事务处理模块中的处理器,一个事务可包含多个<processor>处理器:每个处理器针对的是当前事务中一个内部字段的处理;每个处理器都包含三个子标签:<preprocess>、<processes>和<postprocess>;<preprocess>是针对内部字段的预处理,<processes>为内部字段中核心解码状态的处理的集合,其包含多个解码状态块<process>;<process>解码状态内可包含嵌套的子状态处理<proc>。<process>和<proc>的处理过程是一致的。

在系统启动阶段时,将配置信息进行加载并进行预编译。在进行事务编译时,获取配置数据,并对配置数据编译处理,为运行阶段的解析引擎提供高效快速运行提供必要的条件。这里编译内容涉及运行阶段依赖的输入字段关系表建立、解码字段扩展表编译、多模式匹配算法对事务中各模式串编译、编译的结果与具体的事务关系建立以及各解码依赖的动态库打开。经过编译之后生成全局解码信息,提供给运行阶段的各模块使用。

步骤102,在进行解析时,字段映射模块将外部输入字段根据输入字段关系表映射为解码所需的内部字段。

在该步骤中,外部输入字段为HTTP协议字段、TCP数据字段抽象、UDP字段的抽象。

具体地,在根据字段关系表映射为解码所需的内部字段,具体包括:

根据输入字段关系表判断外部输入字段是否为关心字段;

当判断为关心字段时,则输出外部输入字段所映射的内部字段;

当判断不是所关心的字段时,则丢弃该外部输入字段即可。

步骤103,事务分发模块根据内部字段所属的事务类型将内部字段分发至事务处理模块。

在该步骤中,事务分发模块实现内部字段逻辑分发,主要依据内部字段所属事务类型进行分发,而事务主要分为三类:HTTP、TCP和UDP。事务分发模块根据输入的字段所属类型把各个字段送入到后续不同的事务解析过程中进行解析。

步骤104,事务处理模块根据内部字段所属类型获取相应的事务处理规则,并根据事务处理规则解析出内部字段所对应的输出字段。

在该步骤中,事务处理模块是解码的核心模块,负责事务的精确定位和事务解码。在进行解析时,接收事务分发模块传入的内部字段,由内部的过滤器根据过滤规则确定内部字段所属的事务,实现对事务精确定位。由处理器根据处理规则对内部字段进行解析,获取输出字段。在解析过程中引擎需经过模式串匹配、动态库函数调用、内部字段缓存以及条件判断、字段输出等一系列执行过程。具体地,通过获取事务中定义的动态<function>标签,action中的<cache>标签,入口条件<condition>标签等来确定执行的内容。

其中,事务处理模块,根据处理规则对内部字段进行解析,获取输出字段包括:

判断内部字段是否满足入口条件:

当不满足时,则执行下一内部字段的处理;

当满足时,判断内部字段是否满足当前事务处理状态,当判断满足时,判断当前状态是否存在嵌套状态;

当判断存在嵌套状态时,则对嵌套状态进行处理,待处理完毕后,则获取当前状态所对应的解码动作为输出字段或者缓存字段;

当判断不存在嵌套状态时,则获取当前状态所对应的解码动作为输出字段或者缓存字段。

其中,字段入口条件是为了跨事务处理时候避免字段重复解码或者错误解码。例如,在文件多事务下载场景中首个事务中解码出了文件名称,但是文件的内容跨事务了,此时需要在事务结束的时候新建一个内部字段,当下个事务来的时候,判断新建的内部是否存在,如果存在,则在解析包含文件名称的外部字段时候就直接跳过,直接处理和文件内容相关的字段。

事务处理状态是由事务处理模块自己维护,根据具体解码配置信息确定事务解码过程中都有哪些状态,比如邮件类解析中,报文中一次可以包含收件人、发件人、标题、正文等,在解码时,就需要记住当前解码到哪个状态了,是收件人还是发件人,下个数据包来的时候,首先获取解码到哪个状态了,之后继续之前未完成的状态解码。

步骤105,事务输出模块根据输出字段关系表获取输出字段所映射的预定义字段并输出。

在该步骤中,事务输出模块是给外部提供解码字段查询功能。字段可以为事务处理过程中通过<action>动作直接输出的,也可以是通过<action>动作根据输出字段关系表映射出的预定义字段。

这里的预定义字段定义的为外部映射的大类的字段,例如BBS类的标题字段定位bbs.title,邮件类的收件人定义为mail.receiver,文件类的文件名称被定义为file.name等;另外大类还支持IM聊天、网盘等,支持扩展。

下面结合一具体实施例对配置解析模块和事务处理模块进行介绍。

如图3所示,配置解析模块中配置的某论坛发帖事务的具体解析规则。事务<transaction>100为一个http事务,其包含一个按序的过滤条件集合<filters>101和一个方向为上行的字段处理集合<processors>105;对于事务的<filter>102表示为第一个内部字段中包含关键字POST即为命中,<filter>103表示第二个内部字段从头部偏移长度为4开始包含关键字commit则命中;处理器<processor>106对应的是内部字段3的处理,并且当前处理无入口条件;预处理器<preprocess>107是内部字段的预处理,内含一个类型为百分号解码配置项<decoder>108,主要是完成对字段内容的前期处理;<processes>110是事务状态处理的合集,示例中含2个string类型状态块<process>111的处理,每个状态块描述都含有<begin>112和<end>113模式组,<begin>代表的为状态块的开始模式串,<end>则表示的为状态块的结束模式串;<end>标签中的jump属性用来表示是否跳过当前的模式串,用来处理多个<process>状态块处理时候模式重叠问题,如<end>113所示,如果jump为true时候,下个状态块的处理就会跳过模式串"&";<postprocess>126为字段的后处理描述,在一个内部字段完整结束时候执行;在字段处理<processor>下的每层处理中默认都会包含cond属性和<action>114动作,cond值为true时候,其下必然存在一个<condition>子标签来描述入口条件,<action>处理的动作主要有两种:<output>115和<cache>,<output>描述的为输出字段,<cache>描述的为缓存字段。

基于上述可知,配置解析模块采用标签及属性的形式定义一套完整的语法规则。其中,以事务的形式对应用的多个动作进行划分,对事务本身进行多层级的抽象表示,能够准确的描述事务的特征进而区分事务,描述各层次解码条件以及应用解码中各种算数运算。不同的协议按照此语法规则实现不同的配置文件,在解析时只需要按照语法规则进行配置解析和动作实现,从而实现协议解析引擎和协议解析逻辑的分离。

上述提到,涉及处理器的标签包括<processor>、<preprocess>、<postprocess>、<process>、<proc>以及<action>。各个标签中都包含一个cond属性,当cond值为true时候,需判断其下<condition>对象所包含的条件是否满足,只有满足条件才会往下执行。

如图4所示,事务处理模块在进行事务处理过程,具体包括如下:

步骤401,当输入内部字段后,根据过滤器的过滤规则判断是否命中事务;

步骤402,当事务未命中时,对传入的内部字段的条件进行匹配,直到命中为止;匹配条件为<filter>对象,由于一个事务可能包含多个<filter>且每个<filter>所涉及条件也可能跨字段,所以过滤器处理也会跨越不同的字段;另外,不同事务的<filter>有重叠时候,过滤器需要处理事务之间的优先级问题。

步骤403,当事务命中时,获取字段入口条件,判断字段是否满足cond属性是否满足;当满足时,则执行步骤404,否则,处理下一字段;

步骤404,获取事务处理状态,并判断是否满足cond属性;当满足时,则执行步骤405;当不满足时,则跳过当前状态,并循环处理状态;

步骤405,判断嵌套状态是否存在,当存在时,则对子状态进行处理,处理完毕后,执行步骤406;当不存在时,则执行步骤406;

步骤406,获取状态action动态,并判断动作cond属性是否满足,当满足时,则执行步骤407;否则,跳过当前动作,循环处理下个动作;

步骤407,action处理,并判断字段是否结果,当没有结束时,则处理下一字段,直至事务处理结束。

其中,事务状态处理<processor>是对一个完整的内部字段而言的。<processor>中的cond值为true时,则表示字段入口条件存在,则根据<condition>对象判断是否满足条件即可。<processor>中包含多个事务处理状态块<process>,每个<process>内部可能包含嵌套的子状态<proc>,<process>和<proc>对应的处理过程是一致的;<action>可以位于处理器的各个层次上,而且各层次支持多个<action>动作,即<process>、<proc>中都可涉及<action>动作。动作包含<output>和<cache>,分别用来输出字段和缓存内部字段,每个事务的处理的各阶段都可能包含<action>动作。

本发明实施例还提供了一种应用层协议解析装置,如图5所示,包括:

配置解析模块51,用于预先配置事务处理规则、输入字段关系表以及输出字段关系表;其中,事务处理规则根据事务类型分为HTTP、TCP以及UDP三种;

字段映射模块52,用于在进行解析时,将外部输入字段根据输入字段关系表映射为解码所需的内部字段;

事务分发模块53,用于根据内部字段所属的事务类型将内部字段分发至事务处理模块;

事务处理模块54,用于根据内部字段所属类型获取相应的事务处理规则,并根据事务处理规则解析出内部字段所对应的输出字段;

事务输出模块55,用于根据输出字段关系表获取输出字段所映射的预定义字段并输出。

进一步地,字段映射模块52,具体用于:

根据输入字段关系表判断外部输入字段是否为关心字段;

当判断为关心字段时,则输出外部输入字段所映射的内部字段;

当判断不是所关心的字段时,则丢弃外部输入字段。

进一步地,事务处理规则包括过滤规则和处理规则;事务处理模块54,具体用于:

根据过滤规则确定内部字段所属的事务;

根据处理规则对内部字段进行解析,获取输出字段。

进一步地,事务处理模块54,具体用于:

判断内部字段是否满足入口条件;

当满足时,则判断内部字段是否满足当前事务处理状态,当判断满足时,判断是否存在嵌套状态;

当判断存在嵌套状态时,则对嵌套状态进行处理,待处理完毕后,则获取当前状态所对应的解码动作为输出字段或者缓存字段;

当判断不存在嵌套状态时,则获取当前状态所对应的解码动作为输出字段或者缓存字段。

进一步地,事务输出模块55,具体用于:

判断输出字段在输出字段关系表中是否存在映射的预定义字段;当存在时,则将预定义字段进行输出,当不存在时,则直接将输出字段进行输出。

本发明所提供的应用层协议解析方法及装置,通过配置应用层协议解析中的层级及各层级的动作,来实现承载于http/tcp/udp的应用层协议,适应当前大流量下应用解码的扩展性,缩减了单个应用的解码开发周期;深层次的事务描述可以大大提升解码的准确性,同时可以快速适应协议变更,降低维护成本。此外,本发明采用高效的状态机作为匹配核心,在多核硬件平台下多解码事务实例并行运行实现整体匹配性能的线性增长;缓存字段、预定义字段、内部算数运算以及丰富的语法标签,给用户的自定义配置提供了很大灵活性。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。并且,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

另外,本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等,该程序在执行时,可包括如上述各方法的实施例的流程。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1