多层协议解析方法、装置及数据匹配方法和装置与流程

文档序号:11156625阅读:364来源:国知局
多层协议解析方法、装置及数据匹配方法和装置与制造工艺

本公开涉及协议解析领域,具体地,涉及一种多层协议解析方法、装置及数据匹配方法和装置。



背景技术:

网络协议是网络通信的基础,协议解析是对网络数据包的各个部分按照协议规范进行分析,得到数据包准确且详细的信息,用于各种网络功能。

网络协议之间经常存在多层次嵌套关系,特别是网络七层协议中的应用层,随着网络应用技术不断延伸发展,属于第7层的应用层,其复杂程度早已超过前6层的总和,其中涵盖了大量RFC(Request For Comments,请求评议)规范的基础应用协议、厂商各自应用的私有协议、广泛应用的数据处理技术、开源软件库、各种文件格式规范等等。在一个网络安全检测设备中,规范协议格式和具体应用数据格式或是文件格式,都需要做解析,他们之间没有明显区别,都可以认为是一层独立的协议。

网络通信协议其固有的复杂性,使得网络协议解析得正确可靠性难以保证,协议解析工程化困难。对于一个集成数个协议解析引擎的复杂系统,在工程化的过程中,除了减少开发和维护成本之外,还需要处理好各协议解析引擎之间的耦合关系,在降低工程化难度的同时,消除运行阶段的冗余计算。

现有技术中的语法分析过程,对一段协议数据(会被词法分析器解释成终结符号序列)只能有一种解释。尝试对一段数据(终结符号序列)进行两种以上解释的文法产生式,会被视为语法冲突。而网络数据安全检测过程中,一段网络数据流在不同协议层次上有不同的含义,或是需要采用不同的检测功能进行分析,经常需要采用两种以上解析方式。

另外,语法分析只解释一种语言,如果需要在一个语法分析器中解释混合了两种协议的数据流的话,需要将两种协议的混合定义成一种语言。编译技术中的语法分析,采用上下文无关文法定义并解释输入数据流,但如果用非递归的嵌套关系混合两种语言的话,所产生的语言并不是上下文无关语言。

实际网络协议中,相邻两层协议也大多属于递归嵌套的分层关系。但新问题是,这种组合语言大大增加了语言的数量,即使只考虑常见协议的嵌套关系,仍然是不可接受的。



技术实现要素:

本公开的目的是提供一种一次数据遍历即可完成多层协议解析的多层协议解析方法、装置及数据匹配方法和装置。

为了实现上述目的,本公开提供一种多层协议解析方法,应用于第一语法分析器,所述第一语法分析器为多层协议中下层协议对应的语法分析器,所述方法包括:接收待匹配的第一协议数据;将所述下层协议的终结符号压入符号栈栈顶,将所述待匹配的第一协议数据输入至与状态栈的当前栈顶状态相对应的词法分析器,以由所述词法分析器对所述待匹配的第一协议数据进行数据匹配;接收所述词法分析器返回的匹配结果,所述匹配结果包括第一带谓词的终结符号和所述第一带谓词的终结符号对应的匹配特征,所述第一带谓词的终结符号包括所述下层协议的终结符号和所述词法分析器匹配到的模式串,所述第一带谓词的终结符号对应的匹配特征为协议字段标识;对所述第一带谓词的终结符号进行语法分析;在对所述第一带谓词的终结符号的语法分析结束时,判断状态栈的当前栈顶状态的下一可输入事件是否为上层协议的目标非终结符号;在确定所述下一可输入事件是上层协议的目标非终结符号时,将待匹配的第二协议数据发送至第二语法分析器,以由所述第二语法分析器对所述待匹配的第二协议数据进行解析,其中,所述待匹配的第二协议数据为所述第一协议数据中除已匹配的协议数据之外的剩余协议数据,所述第二语法分析器为与所述上层协议对应的语法分析器。

可选地,所述方法还包括:接收所述第二语法分析器在满足预设的协议切出条件下发送的协议切出数据,所述协议切出数据包括所述上层协议的目标非终结符号、以及待匹配的第三协议数据,所述待匹配的第三协议数据为所述第二协议数据中除已匹配的协议数据之外的剩余协议数据;对所述上层协议的目标非终结符号进行语法分析;在对所述上层协议的目标非终结符号的语法分析结束时,返回所述接收待匹配的第一协议数据的步骤,其中,再次接收的待匹配的第一协议数据为所述第三协议数据。

可选地,所述预设的协议切出条件包括以下中的一者:所述第二语法分析器在对所述第二协议数据进行解析时,获得了所述上层协议的目标非终结符号;所述第二语法分析器在对所述第二协议数据进行解析时,获得了第二带谓词的终结符号,所述第二带谓词的终结符号对应的匹配特征为协议切出标识,其中,所述协议切出标识用于指示切出到所述下层协议。

可选地,所述方法还包括:在确定所述下一可输入事件不是上层协议的目标非终结符号时,返回所述接收待匹配的第一协议数据的步骤,其中,再次接收的待匹配的第一协议数据为前次接收的所述待匹配的第一协议数据中除已匹配的协议数据之外的剩余协议数据。

本公开提供一种多层协议解析方法,应用于第二语法分析器,所述第二语法分析器为多层协议中上层协议对应的语法分析器,所述方法包括:接收待匹配的第二协议数据,其中,所述待匹配的第二协议数据初始来自于第一语法分析器,所述第一语法分析器为与下层协议对应的语法分析器;将所述上层协议的终结符号压入符号栈栈顶,将所述待匹配的第二协议数据输入至与状态栈的当前栈顶状态相对应的词法分析器,以由所述词法分析器对所述待匹配的第二协议数据进行数据匹配;接收所述词法分析器返回的匹配结果,所述匹配结果包括第二带谓词的终结符号和所述第二带谓词的终结符号对应的匹配特征,所述第二带谓词的终结符号包括所述上层协议的终结符号和所述词法分析器匹配到的模式串,所述第二带谓词的终结符号对应的匹配特征为协议字段标识或协议切出标识,其中,所述协议切出标识用于指示切出到所述下层协议;根据所述第二带谓词的终结符号和所述匹配特征,确定是否满足预设的协议切出条件;在确定满足所述协议切出条件时,向所述第一语法分析器发送协议切出数据,所述协议切出数据包括所述上层协议的目标非终结符号、以及待匹配的第三协议数据,所述待匹配的第三协议数据为所述第二协议数据中除已匹配的协议数据之外的剩余协议数据。

可选地,所述根据所述第二带谓词的终结符号和所述匹配特征,确定是否满足预设的协议切出条件,包括:在所述第二带谓词的终结符号对应的匹配特征为协议字段标识时,对所述第二带谓词的终结符号进行语法分析;在对所述第二带谓词的终结符号的语法分析结束时,判断是否产生了所述上层协议的目标非终结符号;在判定产生了所述上层协议的目标非终结符号时,确定满足所述协议切出条件。

可选地,所述方法还包括:在确定不满足所述协议切出条件时,返回所述接收待匹配的第二协议数据的步骤,其中,再次接收的待匹配的第二协议数据为前次接收的所述待匹配的第二协议数据中除已匹配的协议数据之外的剩余协议数据。

可选地,所述根据所述第二带谓词的终结符号和所述匹配特征,确定是否满足预设的协议切出条件,包括:在所述第二带谓词的终结符号对应的匹配特征为协议切出标识时,确定满足所述协议切出条件;以及,所述方法还包括:在向所述第一语法分析器发送协议切出数据之前,查询预设的协议目标非终结符号表,以获取所述上层协议的目标非终结符号。

可选地,所述方法还包括:在确定不满足所述协议切出条件时,对所述第二带谓词的终结符号进行语法分析,并在对所述第二带谓词的终结符号的语法分析结束时,返回所述接收待匹配的第二协议数据的步骤,其中,再次接收的待匹配的第二协议数据为前次接收的所述待匹配的第二协议数据中除已匹配的协议数据之外的剩余协议数据。

本公开提供一种数据匹配方法,应用于词法分析器,包括:将待匹配的协议数据与所述词法分析器中的模式串集合进行匹配,所述模式串集合中的每个模式串具有对应的匹配特征,所述匹配特征包括协议字段标识和协议切出标识;在所述词法分析器匹配到匹配特征为所述协议字段标识或所述协议切出标识的模式串时终止匹配,并输出匹配结果,其中,所述匹配结果包括:带谓词的终结符号和所述带谓词的终结符号对应的匹配特征,其中,所述带谓词的终结符号包括协议的终结符号、和匹配的相应模式串,所述带谓词的终结符号对应的匹配特征为所述带谓词的终结符号包括的匹配的模式串的匹配特征。

本公开提供一种多层协议解析装置,应用于第一语法分析器,所述第一语法分析器为多层协议中下层协议对应的语法分析器,所述装置包括:第一接收模块,用于接收待匹配的第一协议数据;第一输入模块,用于将所述下层协议的终结符号压入符号栈栈顶,将所述待匹配的第一协议数据输入至与状态栈的当前栈顶状态相对应的词法分析器,以由所述词法分析器对所述待匹配的第一协议数据进行数据匹配;第二接收模块,用于接收所述词法分析器返回的匹配结果,所述匹配结果包括第一带谓词的终结符号和所述第一带谓词的终结符号对应的匹配特征,所述第一带谓词的终结符号包括所述下层协议的终结符号和所述词法分析器匹配到的模式串,所述第一带谓词的终结符号对应的匹配特征为协议字段标识;第一语法分析模块,用于对所述第一带谓词的终结符号进行语法分析;第一判断模块,用于在对所述第一带谓词的终结符号的语法分析结束时,判断状态栈的当前栈顶状态的下一可输入事件是否为上层协议的目标非终结符号;第一数据发送模块,用于在确定所述下一可输入事件是上层协议的目标非终结符号时,将待匹配的第二协议数据发送至第二语法分析器,以由所述第二语法分析器对所述待匹配的第二协议数据进行解析,其中,所述待匹配的第二协议数据为所述第一协议数据中除已匹配的协议数据之外的剩余协议数据,所述第二语法分析器为与所述上层协议对应的语法分析器。

本公开提供一种多层协议解析装置,应用于第二语法分析器,所述第二语法分析器为多层协议中上层协议对应的语法分析器,所述装置包括:第四接收模块,用于接收待匹配的第二协议数据,其中,所述待匹配的第二协议数据初始来自于第一语法分析器,所述第一语法分析器为与下层协议对应的语法分析器;第二输入模块,用于将所述上层协议的终结符号压入符号栈栈顶,将所述待匹配的第二协议数据输入至与状态栈的当前栈顶状态相对应的词法分析器,以由所述词法分析器对所述待匹配的第二协议数据进行数据匹配;第五接收模块,用于接收所述词法分析器返回的匹配结果,所述匹配结果包括第二带谓词的终结符号和所述第二带谓词的终结符号对应的匹配特征,所述第二带谓词的终结符号包括所述上层协议的终结符号和所述词法分析器匹配到的模式串,所述第二带谓词的终结符号对应的匹配特征为协议字段标识或协议切出标识,其中,所述协议切出标识用于指示切出到所述下层协议;确定模块,用于根据所述第二带谓词的终结符号和所述匹配特征,确定是否满足预设的协议切出条件;第二数据发送模块,用于在确定满足所述协议切出条件时,向所述第一语法分析器发送协议切出数据,所述协议切出数据包括所述上层协议的目标非终结符号、以及待匹配的第三协议数据,所述待匹配的第三协议数据为所述第二协议数据中除已匹配的协议数据之外的剩余协议数据。

本公开提供一种数据匹配装置,应用于词法分析器,包括:匹配模块,用于将待匹配的协议数据与所述词法分析器中的模式串集合进行匹配,所述模式串集合中的每个模式串具有对应的匹配特征,所述匹配特征包括协议字段标识和协议切出标识;输出模块,用于在所述词法分析器匹配到匹配特征为所述协议字段标识或所述协议切出标识的模式串时终止匹配,并输出匹配结果,其中,所述匹配结果包括:带谓词的终结符号和所述带谓词的终结符号对应的匹配特征,其中,所述带谓词的终结符号包括协议的终结符号、和匹配的相应模式串,所述带谓词的终结符号对应的匹配特征为所述带谓词的终结符号包括的匹配的模式串的匹配特征。

通过上述技术方案,可以实现一次数据遍历完成多层协议数据解析,减少协议数据的遍历次数,提高协议数据的解析效率。同时,本公开中不同的状态对应不同的词法分析器,可以减少词法分析器中的模式串的数量,降低词法分析的复杂度,从而提高协议数据解析的效率。

本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1是根据本公开的一种实施方式提供的多层协议解析方法的流程图;

图2是根据本公开的另一种实施方式提供的多层协议解析方法的对第一带谓词的终结符号进行语法分析的步骤的流程图;

图3是根据本公开的另一种实施方式提供的多层协议解析方法的流程图;

图4是根据本公开的一种实施方式提供的数据匹配方法的流程图;

图5是SMTP协议语法分析器在输入事件下的状态转换图;

图6是MIME协议语法分析器在输入事件下的状态转换图;

图7是根据本公开的一种实施方式提供的多层协议解析装置的框图;

图8是根据本公开的另一种实施方式提供的多层协议解析装置的框图;

图9是根据本公开的一种实施方式提供的数据匹配装置的框图。

具体实施方式

以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。

在公开中的多层协议解析系统分为系统开发阶段和系统运行阶段。在系统开发阶段中,首先介绍协议的模块化开发部分。

每个协议的解析规则是用带谓词的上下文无关文法定义的,格式如下:

G={VT,VN,S,R,P}。

其中,VT为终结符号集,即代表每层协议待匹配的数据的终结符号集合;VN为非终结符号集,即每层协议解析产生的各个协议字段的抽象事件对应的非终结符号集合;S是目标文法符号,即每层协议解析的目标非终结符号集合,规约到S中的符号则表示当前层协议的解析完成;R是文法的产生式集,P是文法的谓词集。

每个协议的解析规则包括基础产生式和扩展产生式,分别生成协议的基础的协议字段和更抽象、更大数据描述范围的协议字段,实现协议字段描述的灵活分层。具体如下:

协议解析基础产生式为:VNm:VT1(p1);

表示输入事件为终结符号VT1的数据,匹配命中模式串p1的数据匹配时,能识别出非终结符号VNm表示的一个协议字段。

协议解析扩展产生式:VNn:VN1…VNk;或者VNn:VN1…VNk|VN1…VNt

扩展产生式表示的多个解析完成的协议字段可以抽象表示成更大数据描述范围的协议字段,可以实现协议的分层描述,产生式的左部和右部都是表示协议字段的非终结符号,事件关系符号“|”表示逻辑或,产生式规约符号式“:”,表示产生式右边的事件序列能生成产生式左部,且产生式左部能够用于其他产生式,作为其他产生式右部的一个非终结符号,用来表示更大数据描述范围协议字段的一个组成部分。

如果协议的数据包可能传输上层协议的数据内容,则在本协议的扩展产生式上定义一个代表上层协议数据的抽象的非终结符号,出现产生式右部的事件序列中,描述了一段未解析的上层协议内容在本协议内容中出现的位置。经过这种简化处理,每个协议即使传输其他协议的数据内容,其文法产生式也是只关注自己协议的字段生成方法,便于协议规则的模块化开发。

协议的层次关系定义如下:

为描述协议的层次关系,定义子协议产生式:_sub_Target→VNk

其中,_sub_Target是系统预定义保留事件对应的非终结符号,VNk是协议的目标非终结符号,表示整个协议的数据,产生式规约符号“→”表示产生式的左部生成后不能再用于其他产生式,仅表示VNk是一个子协议,其数据是被下层协议的数据包传输的。

协议输入事件切换的产生式定义:Virtual_VTn:VT1

即协议的输入终结符号是虚拟终结符号,在切入到该协议的解析时输入事件由VT1(上层协议的输入终结符号)变更为Virtual_VTm,也表明了协议的下层协议是VT1所在的协议。

协议目标非终结符号的产生式定义:

若协议有自己的结束条件:VNn:VN1…VNk-1VNk且VNk:VT1(p2);

即协议目标非终结符号VNn的结束条件是VT1(p2)。

若协议没有自己的结束条件:VNn:VN1…VNk-1Virtual_VTn

即协议目标非终结符号VNn的结束事件是不带谓词的终结符号,即终结符号没有描述协议结束的条件。

以SMTP协议传输MIME协议的数据为例,SMTP协议解析的产生式定义如下:SMTP_Target:SMTP_Multi SMTP_Fin;

其中,SMTP协议的目标非终结符号是SMTP_Target,代表整个SMTP数据的顶层抽象事件,是由代表若干个SMTP命令应答对的抽象事件的非终结符号SMTP_Multi和代表SMTP结束的抽象事件的非终结符号SMTP_Fin规约而成。由于SMTP_Fin的抽象事件存在,也就是说SMTP协议存在自己的结束条件,不需要下层协议给出结束条件。

SMTP_Multi:SMTP_One|SMTP_Multi SMTP_One;

SMTP_One:SMTP_Data_Cmd SMTP_Data_Reply SMTP_MIME|SMTP_Other_Cmd SMTP_Other_Reply;

其中,SMTP_One是一个SMTP命令和应答对,且即SMTP的DATA命令和应答对之后传输的是MIME的数据,为描述简单,省略其他SMTP命令和应答,将其定义为SMTP_Other_Cmd和SMTP_Other_Reply。

SMTP_Data_Cmd:smtp_atom_stream($1~/^data.*\r\n/i);

基础产生式中,SMTP的DATA命令行是由终结符号smtp_atom_stream带上正则表达式谓词“^data.*\r\n”。

SMTP_Data_Reply:smtp_atom_stream($1~/^[0-9]{3}.*\r\n/i);

基础产生式中,SMTP的DATA应答行是由终结符号smtp_atom_stream带上正则表达式谓词“^[0-9]{3}.*\r\n”。

SMTP_MIME:MIME_Target smtp_atom_stream($1~/(^|\n)\.\r\n/i);

SMTP_MIME是一个表示SMTP传输MIME协议数据的抽象事件的非终结符号,且SMTP协议给出了MIME协议的结束条件”(^|\n)\.\r\n”。

为了表示MIME协议是SMTP协议的上层协议,给出协议分层的产生式定义:_sub_Target→MIME_Target;

其中,_sub_Target是系统预定义保留事件,表示产生式右部的非终结符号MIME_Target是MIME协议的目标非终结符号,且是当前协议SMTP的上层协议,其数据被SMTP协议的数据包传输。

MIME协议输入事件切换的产生式定义:

Virtual_mime_atom_stream:smtp_atom_stream;

即协议的输入终结符号是虚拟终结符号,在切入到该协议的解析时输入事件由smtp_atom_stream变更为Virtual_mime_atom_stream。

为了描述简单,不考虑MIME的正文包含Boundary的情况,MIME协议的目标非终结符号的定义如下:

MIME_Target:MIME_Headers Virtual_mime_atom_stream;

即MIME的协议的目标非终结符号MIME_Target是由代表MIME所有首部的抽象事件的非终结符号MIME_Headers和代表剩余MIME正文数据的终结符号Virtual_mime_atom_stream构成,不带谓词的终结符号Virtual_mime_atom_stream表示MIME的正文数据没有自己的结束条件,需要依赖与下层协议SMTP给出结束条件。

MIME_Headers:MIME_Header_Multi MIME_Header_End;

MIME所有首部的抽象事件的非终结符号是由代表多个MIME首部的抽象事件的非终结符号MIME_Header_Multi和代表MIME首部结束的抽象事件的非终结符号MIME_Header_End规约而成。

MIME_Header_From:Virtual_mime_atom_stream($1~/^From:.*\r\n/i);

基础产生式中,代表MIME的From首部的事件的非终结符号MIME_Header_From是由即终结符号Virtual_mime_atom_stream带正则表达式谓词”^From:.*\r\n”即带谓词的终结符号规约而成,代表邮件的发件人的数据匹配范围。

MIME_Header_End:Virtual_mime_atom_stream($1~/(^|\n)\r\n/i);

基础产生式中,代表MIME的From首部结束的事件的非终结符号MIME_Header_End是由终结符号Virtual_mime_atom_stream带谓词“(^|\n)\r\n”,即带谓词的终结符号规约而成,表示空行是MIME首部的结尾。

另外,可以定义一种数据的引用方法描述跨词法分析器的词法匹配,即通过采用引用栈的方式以实现动态存储和动态引用。

例如以MIME协议为例,邮件正文可以由多部分组成:

Content-Type:multipart/related;boundary=\"=====003_Dragon236671608472_=====\"

…...

--=====003_Dragon236671608472_=====

Content-Type:multipart/related;boundary=\"=====002_Dragon236671608472_=====\"

…...

--=====002_Dragon236671608472_=====

…...

--=====002_Dragon236671608472_=====--

--=====003_Dragon236671608472_=====

…...

--=====003_Dragon236671608472_=====--

如上所示的邮件正文是由两部分组成,两部分由边界字符串分割,且边界字符串由“boundary=”定义,然后边界“=====002_Dragon236671608472_=====\”包围的正文嵌套在边界“=====003_Dragon236671608472_=====”包围的内容之内。对边界字符串的引用符合先入后出的顺序,所以可以采用引用栈扩展表达式的方式实现。

首先在邮件的头部定义边界字符串的名称:

MIME_Header_Boundary:mime_atom_stream($1~/boundary=[“]?([^\n]+)[“]\r\n~dynref_push(“boundary”,\1)/i);

即“dynref_push”是动态存储表达式的关键词,即词法分析器匹配命中模式串第1个分组的数据被当做边界字符串存储到引用栈的栈顶且命名为“boundary”。

邮件正文中每部分由边界头和边界尾分割,分别由动态引用表达式定义:

MIME_Body_Boundary_Start:mime_atom_stream($1~/--([^\n]+)\r\n~dynref_top(“boundary”,\1)/i);

MIME_Body_Boundary_End:mime_atom_stream($1~/--([^\n]+)--\r\n~dynref_top(“boundary”,\1)/i)

{dynref_pop(“boundary”);…};

即“dynref_top”是动态引用表达式的关键词,即词法分析器匹配命中模式串第1个分组的数据只能是存储在引用栈栈顶且命名为“boundary”的数据。为了配合对引用栈中存储数据的操作,在产生式的动作部分定义可选的dynref_pop函数以实现引用栈的栈顶数据出栈的操作,即通过动态存储表达式和动态引用表达式实现引用数据在多个产生式谓词上的引用。

协议解析产生式的各个抽象事件,代表各个协议字段或者协议字段的组合;安全检测规则可以定义带谓词的非终结符号,表示在某些特定的协议字段上匹配安全检测标识,其中,安全检测产生式规约的抽象事件不需要再往上层规约,因此规约符号由“:”替换成“→”以便于区分;协议数据的安全检测模式串谓词匹配范围需要暂时保存,其数据范围不代表协议字段,不对协议数据流产生分割;安全检测产生式规约是需要执行规约动作,该规约动作是指需要执行对匹配到安全检测标识模式串的协议字段进行相应的安全管理操作。因为安全功能检测有对应的处理操作,例如产生日志、报警或系统调度等处理。

应用层协议可以集成安全检测功能,例如入侵防护IPS,反垃圾邮件或病毒防护AV等功能可以定义规则,例如:

Proto_IPS→FTP_Upload_Cmd($1~/ips_regexp_filename/i){Proto_IPS_Schedule(...);}

上述文法规则表示,FTP上传的文件名满足特征“ips_regexp_filename”则调用处理函数Proto_IPS_Schedule($1),“$1”传入的是上传命令行上的数据,其数据范围由协议数据解析在生成FTP_Upload_Cmd时确定;且Proto_IPS规约生成后无后续的进一步规约。

另外,在协议上可以针对同一安全检测功能在同一协议字段上书写多条规则,方法是:

Proto_IPS→FTP_Upload_Cmd($1~/ips_regexp1/i){Proto_IPS_Schedule(...);}

Proto_IPS→FTP_Upload_Cmd($1~/ips_regexp2/i){Proto_IPS_Schedule(...);}

……

Proto_IPS→FTP_Upload_Cmd($1~/ips_regexpn/i){Proto_IPS_Schedule(...);}

也可以在同一协议字段上书写多个安全检测功能的规则,例如增加规则:

Proto_AV→FTP_Upload_Cmd($1~/av_regexp_filetype/i){Proto_AV_Schedule(...);}

即FTP上传的文件类型满足“av_regexp_filetype”则调用防病毒处理函数Proto_AV_Schedule($1)。

如上所述,由于协议解析规则和安全检测规则中定义不同的产生式语法和符号,协议解析和安全检测可以有不同的处理操作,使得扩充安全功能不会影响已开发完成的协议解析器的正确执行,因而安全管理模块可以独立开发。另外,安全管理模块也无需考虑有其他功能检测同一块数据,系统会在预处理阶段将相似功能自动完成整合,可以提升系统开发和扩展的效率,缩小工程化周期。

由于上述规则都是采用上下文无关文法的,因此需要生成用于词法分析过程的词法分类器和用于语法分析过程的语法分析器,且语法分析器包含一个使用LALR语法分析方法生成的自动机。为了实现一次数据分析,用于词法分析过程的词法分析器需要进行事件谓词归集。

以下详细介绍系统的运行阶段内容。在系统的运行阶段包括预处理部分和解析部分。其中,预处理部分内容如下:

根据系统功能需要,对于需要解析的协议规则,将协议解析目标非终结符号加入文法目标符号集合表示协议生效,所有规约的最终目标为该解析目标的产生式都被激活。通过建立表示协议生效的文法目标非终结符号集可以实现不同协议解析规则的即配即用。不同协议的多个语法分析器可以灵活选择,通过加载必要的解析器完成解析功能,降低协议数据解析时间和空间复杂度,减少冗余。

分析已生效的协议解析规则文法、协议的层次和协议切换关系;检查每个协议的结束条件,如果协议的目标非终结符号产生式没有给出协议的结束条件,则查找包含该协议目标非终结符号的上层协议解析产生式,确定上层协议给出的该协议结束条件,则提取协议的结束条件,改写对应的上层协议产生式和该协议目标非终结符号产生式;

仍以SMTP和MIME的协议解析规则为例,由于MIME协议的结束条件是由SMTP协议给出的,为此需要将该结束条件提取出来,对相关的产生式进行改写:

改写前:SMTP_MIME:MIME_Target smtp_atom_stream($1~/(^|\n)\.\r\n/i);

_sub_Target→MIME_Target;

MIME_Target:MIME_headers Virtual_mime_atom_stream;

改写后:SMTP_MIME:MIME_Target;

_sub_Target→MIME_Target;

MIME_Target:MIME_headers Virtual_mime_atom_stream($1~/(^|\n)\.\r\n/i);

提取协议结束条件“(^|\n)\.\r\n”,用于后续MIME协议规则的文法分析。

对于每个协议的所有规则文法,根据改写后的产生式,生成语法分析器。语法分析器包含一个分析语法状态的自动机,且自动机是由控制器、状态栈和符号栈、自动机状态跳转表和动作表、输入和输出构成。控制器负责自动机调度,状态栈保存自动机状态,符号栈保存输入事件,动作表保存文法产生式的动作,输入的是协议终结符号和数据,输出的是协议的各个字段。

根据语法分析器的不同语法状态生成词法分析器,包含模式串集合和对应的多模匹配算法。其中,模式串集合既归集了该协议分析产生式中事件谓词的模式串,给予协议字段标识;也归集了协议结束条件,给予协议切出标识,具有最高匹配优先级。

以下部分详细介绍系统运行阶段的解析部分。需要说明的是,在本公开中,MIME协议数据被SMTP协议的数据包传输的多层协议数据分析中,形如MIME协议的协议为相应的上层协议,形如SMTP协议的协议为相应的下层协议。其中,上层协议和下层协议是一个相对的概念,例如MIME协议可以作为SMTP协议的上层协议,也可以作为其他协议的下层协议。

本公开提供一种多层协议解析方法。图1是根据本公开的一种实施方式提供的多层协议解析方法的流程图。如图1所示,该方法应用于第一语法分析器,所述第一语法分析器为多层协议中下层协议对应的语法分析器,包括:

在步骤S11中,接收待匹配的第一协议数据。

在步骤S12中,将所述下层协议的终结符号压入符号栈栈顶,将所述待匹配的第一协议数据输入至与状态栈的当前栈顶状态相对应的词法分析器,以由所述词法分析器对所述待匹配的第一协议数据进行数据匹配,其中,该下层协议终结符号为在系统开发阶段中的定义的下层协议的终结符号。

其中,该词法分析器是通过上述系统运行阶段中的预处理部分中根据语法分析中的状态对应生成的,该词法分析器中为归集当前栈顶状态下的所有模式串的模式串集合,包括协议字段标识和协议切出标识对应的模式串结合。

该词法分析器的词法分析过程为:如果当前栈顶符号为非终结符号或是带谓词的终结符号,则词法分析器返回该符号本身,词法分析完成;如果当前栈顶符号为终结符号,则将待匹配的协议数据与该词法分析器中的模式串集合用多模匹配算法进行匹配,在发现第一个模式串命中时判断模式串标识:若标识为动态存储标识,则将命中的数据内容存储到引用栈,返回带谓词的终结符号和数据匹配范围并终止匹配;若标识为动态引用标识则将命中的数据内容与引用栈的栈顶数据比较,若相等则返回带谓词的终结符号和数据匹配范围,否则忽略当前命中的模式串继续匹配;若为匹配特征对应的标识,则终止匹配并返回带谓词的终结符号和带谓词的终结符号的对应的匹配特征,词法分析完成。另外,词法分析器的模式串匹配过程还可以使得每个词法分析器可以根据模式串的特点选择最适宜的模式串匹配算法,提升词法分析的效率。

在步骤S13中,接收所述词法分析器返回的匹配结果,所述匹配结果包括第一带谓词的终结符号和所述第一带谓词的终结符号对应的匹配特征,所述第一带谓词的终结符号包括所述下层协议的终结符号和所述词法分析器匹配到的模式串,该第一带谓词的终结符号对应的匹配特征为协议字段标识。

在步骤S14中,对所述第一带谓词的终结符号进行语法分析。

图2是根据本公开的另一种实施方式提供的多层协议解析方法的对第一带谓词的终结符号进行语法分析的步骤的流程图,该方法可以包括:

在步骤S21中,将根据状态栈的当前栈顶状态和带谓词的终结符号确定的自动机的下一跳转状态压入状态栈栈顶,将带谓词的终结符号压入符号栈的栈顶,其中,在语法分析器的输入符号为带谓词的终结符号时,通过查询动作表确定的自动机的下一跳转状态,该动作表是通过在预处理阶段生成语法分析器时,根据系统开发阶段编写的协议解析规则文法生成的。

在步骤S22中,将从符号栈取出的当前栈顶符号输入至与当前栈顶状态相对应的词法分析器。

在步骤S23中,接收所述词法分析器的返回结果,所述返回结果包括非终结符号或带谓词的终结符号。

在步骤S24中,在所述返回结果为带谓词的终结符号时,执行规约操作,并返回所述将从符号栈取出的当前栈顶符号输入至与当前栈顶状态相对应的词法分析器的步骤S22。

其中,规约操作包括:输出规约后产生的非终结符号所表示的协议字段,利用所述非终结符号替换当前所述符号栈中与所述规约事件有关的符号,并将当前所述状态栈中、与所述规约事件有关的符号所对应的状态弹出。在执行完移进操作或是规约操作后,需要将待匹配的第一协议数据的起始位置移动到当前已匹配的数据之后的位置之后。

可选地,所述第一带谓词的终结符号进行语法分析的步骤还可以包括:

在所述返回结果为非终结符号时,根据当前栈顶状态和所述非终结符号确定产生规约事件或是移进事件或是接受事件。

其中,根据当前栈顶状态和该非终结符号查询动作表或跳转表以确定下一步的操作,动作表和跳转表是根据系统开发阶段预定义的产生式生成的。

在确定产生移进事件时,执行移进操作,其中,移进操作为将根据状态栈的当前栈顶状态和所述词法分析器的返回结果确定的下一状态压入状态栈的栈顶,将所述词法分析器的返回结果压入所述符号栈的栈顶。

根据当前栈顶状态和所述非终结符号,判断能否继续产生规约事件;

在判定能继续产生规约事件时,返回所述将从符号栈取出的当前栈顶符号输入至与当前栈顶状态相对应的词法分析器的步骤。

在判定不能继续产生规约事件时,返回所述接收待匹配的第一协议数据的步骤,其中,再次接收的待匹配的第一协议数据是前次接收的待匹配的第一协议数据中除去前次已匹配完成的数据部分后剩余的数据部分。

在确定产生规约事件时,进行规约操作,并返回所述根据当前栈顶状态和所述符号栈,判断能否继续产生规约事件的步骤。

在确定产生接受事件时,获得协议的目标非终结符号。

在该实施例中,在词法分析器的返回结果为非终结符号时,在执行完相应的操作后,要根据当前栈顶状态和符号栈判断下一步要执行的操作,从而判断下一步要跳转的步骤。通过上述技术方案,在输入符号为非终结符号时,对下一步要执行的操作进行预判,可以准确地判定下一步跳转的步骤,可以提高协议解析的效率和准确性。

在步骤S15中,在对所述第一带谓词的终结符号的语法分析结束时,判断状态栈的当前栈顶状态的下一可输入事件是否为上层协议的目标非终结符号。

在步骤S16中,在确定所述下一可输入事件是上层协议的目标非终结符号时,将待匹配的第二协议数据发送至第二语法分析器,以由所述第二语法分析器对所述待匹配的第二协议数据进行解析,其中,所述待匹配的第二协议数据为所述第一协议数据中除已匹配的协议数据之外的剩余协议数据,所述第二语法分析器为与所述上层协议对应的语法分析器。

下层协议切入到上层协议的条件为确定下层协议当前状态下的下一可输入事件是上层协议的目标非终结符号,因此,词法分析器的返回的匹配结果中带谓词的终结符号对应的匹配特征为协议字段标识。

可选地,在确定所述下一可输入事件不是上层协议的目标非终结符号时,返回所述接收待匹配的第一协议数据的步骤,其中,再次接收的待匹配的第一协议数据为前次接收的所述待匹配的第一协议数据中除已匹配的协议数据之外的剩余协议数据。

在上述技术方案中,本公开提供的实施例将多个独立开发的语法分析器通过切入和切出的方式相互关联,在判定当前状态下的下一可输入事件为上层协议的目标非终结符号时,可以切入到相应的上层协议,从而可以继续进行协议数据的解析过程。通过上述技术方案,可以实现一次数据遍历完成多层协议解析,减少协议数据的遍历次数,提高协议数据的解析效率。同时,本公开中不同的状态对应不同的词法分析器,可以减少词法分析器中的模式串的数量,降低词法分析的复杂度,从而提高协议数据解析的效率。

可选地,该方法还可以包括:

接收所述第二语法分析器在满足预设的协议切出条件下发送的协议切出数据,所述协议切出数据包括所述上层协议的目标非终结符号、以及待匹配的第三协议数据,所述待匹配的第三协议数据为所述第二协议数据中除已匹配的协议数据之外的剩余协议数据。

其中,所述预设的协议切出条件包括以下中的一者:所述第二语法分析器在对所述第二协议数据进行解析时,获得了所述上层协议的目标非终结符号;所述第二语法分析器在对所述第二协议数据进行解析时,获得了第二带谓词的终结符号,所述第二带谓词的终结符号对应的匹配特征为协议切出标识,其中,所述协议切出标识用于指示切出到所述下层协议。

对所述上层协议的目标非终结符号进行语法分析,对于下层协议的语法分析器而言,对所述上层协议的目标非终结符号的语法分析与对接收的该下层协议的词法分析器返回的非终结符号的语法分析过程相同,在此不再赘述。

在对所述上层协议的目标非终结符号的语法分析结束时,返回所述接收待匹配的第一协议数据的步骤,其中,再次接收的待匹配的第一协议数据为所述第三协议数据。

在该实施例中,由于系统的开发阶段定义如果协议的数据包可能传输上层协议的数据内容,则在下层协议的扩展产生式上定义一个代表上层协议数据的上层协议的目标非终结符号,出现产生式右部的事件序列中,描述了一段未解析的上层协议内容在下层协议内容中出现的位置。因此,下层协议在接收到上层协议的目标非终结符号时,对该上层协议的目标非终结符号的语法分析与对下层协议的非终结符号的语法分析相同,该上层协议的目标非终结符号是指上层协议解析结束时,向下层协议返回的该上层协议的目标非终结符号。经过这种简化处理,每个协议即使传输其他协议的数据内容,其文法产生式也是只关注自己协议的字段生成方法,便于协议规则的模块化开发。

另外,本公开还支持局部的多线索分析。在系统运行阶段的预处理部分,通过分析加载的带谓词的上下文无关文法描述规则,识别对局部数据的处理差异,生成局部多个解析逻辑串行执行的解析器,即在上层协议没有规约到目标非终结符号且上层协议解析没有结束时,保存上层协议当前解析的状态,以待上层协议的下一个数据输入。通过局部的多线索分析,可以适应不同功能的检测需求。

可选地,所述匹配特征还包括安全检测标识,该方法还可以包括:

在所述带谓词的终结符号对应的匹配特征包括安全检测标识时,将所述带谓词的终结符号所对应的数据匹配范围内的数据输入至安全管理模块,以由所述安全管理模块进行安全管理。

安全检测标识对应的模式串在同一协议字段上可以命中多个,且在协议字段标识对应的模式串命中的数据范围内,执行安全检测模式串产生式的管理动作后不会再参与状态跳转,即在语法分析器解析过程中,不参与移进和规约的过程;协议字段标识对应的模式串在同一协议字段上只有一个,参与状态跳转,在语法分析器的协议字段解析过程中,需要执行相应的移进、规约操作,直至获得协议的目标非终结符号。

在词法分析器的匹配模式串集合中归集安全检测标识的模式串,可以在待匹配的协议数据进行多模匹配时,将可以保存记录协议数据中的需要进行安全检测功能的数据范围,减少待匹配的协议数据的匹配次数,提升检测效率。语法分析器可以在进行协议数据解析的同时,将带有安全检测标识的协议字段输入到相应的安全管理模块,实现一次数据分析可以同时进行协议数据解析和多个安全功能检测。同时,由于在系统开发阶段中,协议解析规则和安全检测规则定义了不同的产生式语法和符号,有不同的处理操作,安全管理模块可以独立开发,提升系统开发和扩展的效率,方便系统维护。

图3所示,是根据本公开的另一种实施方式提供的多层协议解析方法的流程图。该方法应用于第二语法分析器,所述第二语法分析器为多层协议中上层协议对应的语法分析器。如图3所示,所述方法包括:

在步骤S31中,接收待匹配的第二协议数据,其中,所述待匹配的第二协议数据初始来自于第一语法分析器,所述第一语法分析器为与下层协议对应的语法分析器;

在步骤S32中,将所述上层协议的终结符号压入符号栈栈顶,将所述待匹配的第二协议数据输入至与状态栈的当前栈顶状态相对应的词法分析器,以由所述词法分析器对所述待匹配的第二协议数据进行数据匹配,其中,该上层协议终结符号为在系统开发阶段中的定义的上层协议的终结符号,上层协议中的词法分析器的分析过程与下层协议中的词法分析器的分析过程相同,在此不再赘述。

在步骤S33中,接收所述词法分析器返回的匹配结果,所述匹配结果包括第二带谓词的终结符号和所述第二带谓词的终结符号对应的匹配特征,所述第二带谓词的终结符号包括所述上层协议的终结符号和所述词法分析器匹配到的模式串,所述第二带谓词的终结符号对应的匹配特征为协议字段标识或协议切出标识,其中,所述协议切出标识用于指示切出到所述下层协议;

在步骤S34中,根据所述第二带谓词的终结符号和所述匹配特征,确定是否满足预设的协议切出条件,在所述根据所述第二带谓词的终结符号,确定满足预设的协议切出条件时,转入步骤S35。

可选地,所述根据所述第二带谓词的终结符号和所述匹配特征,确定是否满足预设的协议切出条件,包括:在所述第二带谓词的终结符号对应的匹配特征为协议字段标识时,对所述第二带谓词的终结符号进行语法分析;在对所述第二带谓词的终结符号的语法分析结束时,判断是否产生了所述上层协议的目标非终结符号;在判定产生了所述上层协议的目标非终结符号时,确定满足所述协议切出条件。

其中,上层协议中对第二带谓词的终结符号的语法分析过程与下层协议中对第一带谓词的终结符号的语法分析过程相同,在此不再赘述。在第二带谓词的终结符号的语法分析结束产生接受事件时,获得上层协议的目标非终结符号。此时,上层协议数据分析完成,切出到下层协议。

在步骤S35中,在确定满足所述协议切出条件时,向所述第一语法分析器发送协议切出数据,所述协议切出数据包括所述上层协议的目标非终结符号、以及待匹配的第三协议数据,所述待匹配的第三协议数据为所述第二协议数据中除已匹配的协议数据之外的剩余协议数据。

在上述技术方案中,本公开提供的实施例将多个独立开发的语法分析器通过切入和切出的方式相互关联。上层协议在满足协议切出条件时,可以切出至对应的下层协议,从而可以继续进行协议数据的解析过程。通过上述技术方案,可以实现一次数据遍历中完成多层协议数据解析,减少协议数据的遍历次数,提高协议数据的解析效率。同时,本公开中不同的状态对应不同的词法分析器,可以减少词法分析器中的模式串的数量,降低词法分析的复杂度,从而提高协议数据解析的效率。

可选地,在这种通过判断是否产生上层协议的目标非终结符号的方式来判断是否满足协议切出条件的实施方式中,该方法还可以包括:如果根据所述第二带谓词的终结符号和所述匹配特征,确定不满足所述协议切出条件时,返回所述接收待匹配的第二协议数据的步骤S31,再次接收的待匹配的第二协议数据为前次接收的所述待匹配的第二协议数据中除已匹配的协议数据之外的剩余协议数据。上层协议中对第二带谓词的终结符号的语法分析过程与下层协议中对第一带谓词的终结符号的语法分析过程相同,在此不再赘述。

可选地,所述根据所述第二带谓词的终结符号和所述匹配特征,确定是否满足预设的协议切出条件,包括:在所述第二带谓词的终结符号对应的匹配特征为协议切出标识时,确定满足所述协议切出条件;以及,所述方法还包括:在向所述第一语法分析器发送协议切出数据之前,查询预设的协议目标非终结符号表,以获取所述上层协议的目标非终结符号。

其中,上层协议没有自身的结束条件,需要依靠协议切出标识来表示上层协议完成语法分析。在第二带谓词的终结符号对应的匹配特征为协议切出标识时,此时,在上层协议的语法分析过程中,不能产生接受事件,无法获得上层协议的目标非终结符号。因此,上层协议需要查询预设的协议目标非终结符号表,根据上层协议的类型以获取所述上层协议的目标非终结符号。

可选地,在这种通过协议切出标识来判断是否满足协议切出条件的实施方式中,所述方法还包括:在确定不满足所述协议切出条件时,对所述第二带谓词的终结符号进行语法分析,并在对所述第二带谓词的终结符号的语法分析结束时,返回所述接收待匹配的第二协议数据的步骤,其中,再次接收的待匹配的第二协议数据为前次接收的所述待匹配的第二协议数据中除已匹配的协议数据之外的剩余协议数据。其中,上层协议中对第二带谓词的终结符号的语法分析过程与下层协议中对第一带谓词的终结符号的语法分析过程相同,在此不再赘述。

本公开还提供一种数据匹配方法。图4是根据本公开的一种实施方式提供的数据匹配方法的流程图。如图4所示,该方法应用于词法分析器,包括:

在步骤S41中,将待匹配的协议数据与所述词法分析器中的模式串集合进行匹配,所述模式串集合中的每个模式串具有对应的匹配特征,所述匹配特征包括协议字段标识和协议切出标识;

在步骤S42中,在所述词法分析器匹配到匹配特征为所述协议字段标识或所述协议切出标识的模式串时终止匹配,并输出匹配结果,其中,所述匹配结果包括:带谓词的终结符号和所述带谓词的终结符号对应的匹配特征,其中,所述带谓词的终结符号包括协议的终结符号、和匹配的相应模式串,所述带谓词的终结符号对应的匹配特征为所述带谓词的终结符号包括的匹配的模式串的匹配特征。

在检测过程中,词法分析器采用对应的多模匹配算法对数据进行匹配,得到匹配命中的协议字段模式串和协议切出模式串。通过上述技术方案,在词法分析器的匹配模式串集合中归集协议切出标识的模式串,可以在待匹配的协议数据进行多模匹配时,匹配到协议切出模式串,可以实现一次数据分析完成多层协议数据分析。

可选地,所述匹配特征还包括安全检测标识,其中,在匹配到匹配特征为安全检测标识的模式串的情况下,保存匹配到的匹配特征为安全检测标识的模式串对应的数据匹配范围,并且,所述匹配结果还包括所述安全检测标识。在该实施例中,安全检测产生式规约的非终结符号是需要执行规约动作的结果,不需要进一步的规约。

通过上述技术方案,在词法分析器的匹配模式串集合中归集安全检测标识的模式串,可以在待匹配的协议数据进行多模匹配时,保存并记录协议数据中的需要进行安全检测的协议数据,减少待匹配的协议数据的匹配次数,提升检测效率。

可选地,所述词法分析器匹配到的模式串是所述词法分析器自身自带的模式串集合中的一者,或者是所述词法分析器根据引用标识从引用栈获取到的模式串,其中,所述引用栈中存储有至少一个模式串,所述引用栈能够被其他词法分析器访问。

在该实施例中,该词法分析器中匹配到的模式串可以是根据自动机的状态归集的该状态下的所有模式串的集合,也可以包括从引用栈获取的模式串。其中,如上所述,在系统开发阶段的协议解析规则文法中,对产生式词法展开方式构造的产生式要编写特征引用规则和引用匹配规则,为每一组引用关系命名,其中特征引用规则用来动态提取新的分词特征,引用匹配规则使用新的分词特征进行分词匹配。在系统运行阶段的预处理步骤中,词法分析器对特征引用规则的分词特征建立动态存储标识,对引用匹配规则的分词特征建立动态引用标识,每组引用关系使用给定栈名的引用栈,由规则编写者根据协议特性指定栈名,通过栈名查找相应的引用栈。在协议解析步骤中,词法分析器中带有动态存储标识的分词特征匹配到某一段数据,则将匹配的数据存储到相应的引用栈中。词法分析器中对于带有动态引用标识的分词特征,取得引用栈栈顶的数据替换该分词特征,参与后续的分词匹配过程。

在上述技术方案中,通过采用引用栈存储模式串的方式,可以通过动态存储标识和动态引用标识实现数据引用在多个产生式谓词上的引用,实现跨词法分析器的模式串匹配,从而可以对文法产生式进行扩展,简化复杂模式串的匹配方式,节省资源。

图5所示,为SMTP协议语法分析器在输入事件下的状态转换图。图6所示,为MIME协议语法分析器在输入事件下的状态转换图。

在图5中,当SMTP协议的语法分析器在状态栈的栈顶状态S10可输入事件为Mime_Target时,当前去除已识别为SMTP协议各字段的数据的待匹配的协议数据作为MIME的协议数据,切入MIME的语法分析器,MIME的语法分析器调用词法分析器进行匹配,重复执行解析的过程。在图6中,当MIME协议的语法分析器在状态栈的栈顶状态S1下规约得到MIME协议的目标非终结符号时,切回SMTP协议的语法分析器,并返回可输入事件MIME_Target。

本公开还提供一种多层协议解析装置。图7是根据本公开的一种实施方式提供的多层协议解析装置的框图。图7所示,该装置10应用于第一语法分析器,该第一语法分析器为多层协议中下层协议对应的语法分析器,包括:

第一接收模块101,用于接收待匹配的第一协议数据;

第一输入模块102,用于将所述下层协议的终结符号压入符号栈栈顶,将所述待匹配的第一协议数据输入至与状态栈的当前栈顶状态相对应的词法分析器,以由所述词法分析器对所述待匹配的协议数据进行数据匹配;

第二接收模块103,用于接收所述词法分析器返回的匹配结果,所述匹配结果包括第一带谓词的终结符号和所述第一带谓词的终结符号对应的匹配特征,所述第一带谓词的终结符号包括所述下层协议的终结符号和所述词法分析器匹配到的模式串,所述第一带谓词的终结符号对应的匹配特征为协议字段标识;

第一语法分析模块104,用于对该第一带谓词的终结符号进行语法分析;

第一判断模块105,用于在对所述第一带谓词的终结符号的语法分析结束时,判断状态栈的当前栈顶状态的下一可输入事件是否为上层协议的目标非终结符号;

第一数据发送模块106,用于在确定所述下一可输入事件是上层协议的目标非终结符号时,将待匹配的第二协议数据发送至第二语法分析器,以由所述第二语法分析器对所述待匹配的第二协议数据进行解析,其中,所述待匹配的第二协议数据为所述第一协议数据中除已匹配的协议数据之外的剩余协议数据,所述第二语法分析器为与所述上层协议对应的语法分析器。

可选地,该装置10还可以包括:

第三接收模块,用于接收所述第二语法分析器在满足预设的协议切出条件下发送的协议切出数据,所述协议切出数据包括所述上层协议的目标非终结符号、以及待匹配的第三协议数据,所述待匹配的第三协议数据为所述第二协议数据中除已匹配的协议数据之外的剩余协议数据;

第二语法分析模块,用于对所述上层协议的目标非终结符号进行语法分析;在对所述上层协议的目标非终结符号的语法分析结束时,重新触发所述第一接收模块101接收待匹配的第一协议数据,其中,再次接收的待匹配的第一协议数据为所述第三协议数据。

可选地,所述预设的协议切出条件包括以下中的一者:

所述第二语法分析器在对所述第二协议数据进行解析时,获得了所述上层协议的目标非终结符号;

所述第二语法分析器在对所述第二协议数据进行解析时,获得了第二带谓词的终结符号,所述第二带谓词的终结符号对应的匹配特征为协议切出标识,其中,所述协议切出标识用于指示切出到所述下层协议。

可选地,所述第一判断模块105还用于:

在确定所述下一可输入事件不是上层协议的目标非终结符号时,重新触发所述第一接收模块101接收待匹配的第一协议数据,其中,再次接收的待匹配的第一协议数据为前次接收的所述待匹配的第一协议数据中除已匹配的协议数据之外的剩余协议数据。

图8所示,为根据本公开的一种实施方式提供的多层协议解析装置的框图。如图8所示,该装置10应用于第二语法分析器,所述第二语法分析器为多层协议中上层协议对应的语法分析器,包括:

第四接收模块201,用于接收待匹配的第二协议数据,其中,所述待匹配的第二协议数据初始来自于第一语法分析器,所述第一语法分析器为与下层协议对应的语法分析器;

第二输入模块202,用于将所述上层协议的终结符号压入符号栈栈顶,将所述待匹配的第二协议数据输入至与状态栈的当前栈顶状态相对应的词法分析器,以由所述词法分析器对所述待匹配的第二协议数据进行数据匹配;

第五接收模块203,用于接收所述词法分析器返回的匹配结果,该匹配结果包括第二带谓词的终结符号和该第二带谓词的终结符号对应的匹配特征,该第二带谓词的终结符号包括所述上层协议的终结符号和所述词法分析器匹配到的模式串,该第二带谓词的终结符号对应的匹配特征为协议字段标识或协议切出标识,其中,该协议切出标识用于指示切出到所述下层协议;

确定模块204,用于根据所述第二带谓词的终结符号和所述匹配特征,确定是否满足预设的协议切出条件;

第二数据发送模块205,用于在确定满足所述协议切出条件时,向所述第一语法分析器发送协议切出数据,所述协议切出数据包括所述上层协议的目标非终结符号、以及待匹配的第三协议数据,所述待匹配的第三协议数据为所述第二协议数据中除已匹配的协议数据之外的剩余协议数据。

可选地,所述确定模块204可以包括:

第三语法分析子模块,用于在所述第二带谓词的终结符号对应的匹配特征为协议字段标识时,对所述第二带谓词的终结符号进行语法分析;

第二判断子模块,用于在对所述第二带谓词的终结符号的语法分析结束时,判断是否产生了所述上层协议的目标非终结符号;

第一确定子模块,用于在判定产生了所述上层协议的目标非终结符号时,确定满足所述协议切出条件。

可选地,所述确定模块204还用于:

在确定不满足所述协议切出条件时,重新触发所述第四接收模块接收待匹配的第二协议数据,其中,再次接收的待匹配的第二协议数据为前次接收的所述待匹配的第二协议数据中除已匹配的协议数据之外的剩余协议数据。

可选地,所述确定模块204可以包括:

第二确定子模块,用于在所述第二带谓词的终结符号对应的匹配特征为协议切出标识时,确定满足所述协议切出条件;以及,所述装置还包括:

查询模块,用于在向所述第一语法分析器发送协议切出数据之前,查询预设的协议目标非终结符号表,以获取所述上层协议的目标非终结符号。

可选地,该装置10还可以包括:

第三语法分析模块,用于在确定不满足所述协议切出条件时,对所述第二带谓词的终结符号进行语法分析,并在对所述第二带谓词的终结符号的语法分析结束时,重新触发所述第四接收模块201接收待匹配的第二协议数据,其中,再次接收的待匹配的第二协议数据为前次接收的所述待匹配的第二协议数据中除已匹配的协议数据之外的剩余协议数据。

本公开还提供一种数据匹配装置。图9是根据本公开的一种实施方式提供的数据匹配装置的框图。图9所示,该装置20应用于词法分析器,包括:

匹配模块301,用于将待匹配的协议数据与所述词法分析器中的模式串集合进行匹配,所述模式串集合中的每个模式串具有对应的匹配特征,所述匹配特征包括协议字段标识和协议切出标识;

输出模块302,用于在该词法分析器匹配到匹配特征为协议字段标识或协议切出标识的模式串时终止匹配,并输出匹配结果,该匹配结果包括:带谓词的终结符号和该带谓词的终结符号对应的匹配特征,该带谓词的终结符号包括协议的终结符号、和匹配的相应模式串,该带谓词的终结符号对应的匹配特征为该带谓词的终结符号包括的匹配的模式串的匹配特征。

可选地,所述匹配特征还包括安全检测标识,其中,在匹配到匹配特征为安全检测标识的模式串的情况下,保存匹配到的匹配特征为安全检测标识的模式串对应的数据匹配范围,并且,所述匹配结果还包括所述安全检测标识和安全检测标识对应的模式串。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。

此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

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