发明内容
为解决上述问题,本发明提出了一种基于模式匹配的HTTP请求报文识别方法,所述HTTP请求报文包括GET、Host、Referer三个字段,所述方法包括如下步骤:
步骤一:预先定义HTTP请求报文的分类及其对应的分类名,每个分类下有至少一条表达式组,每个表达式组包括Host匹配算法表达式、Referer匹配算法表达式、GET匹配算法表达式。
步骤二:选中一条待识别HTTP请求报文,进行如下操作:
S2.1:选择一个没有对所述HTTP请求报文进行过匹配计算的表达式组。
S2.2:利用S2.1选择的表达式组对HTTP请求报文的Host字段进行Host匹配运算,如果匹配算法字段为空或匹配成功则进行步骤S2.3,否则返回S2.1。
S2.3:对HTTP请求报文的Referer字段进行匹配运算,如果匹配算法字段为空或匹配成功则进行步骤S2.4,否则返回S2.1。
S2.4:对HTTP请求报文的GET字段进行匹配运算,如果匹配成功则识别出HTTP请求报文对应的分类名,否则返回S2.1。
S2.5:重复执行步骤S2.1- S2.4,直到遇到匹配的表达式组,如遍历完所有表达式组后不能匹配,则丢弃该HTTP请求报文。
步骤三:重复步骤二,直到遍历完所有待识别的HTTP请求报文。
2. 如权利要求1所述的基于模式匹配的HTTP请求报文识别方法,其特征在于,GET匹配算法包括的逻辑操作有or、^、and。
3. 如权利要求1或2所述的基于模式匹配的HTTP请求报文识别方法,其特征在于,每个表达式组还包括HASH运算表达式,HASH运算算法具有三种操作符,分别为>、<、FileName,分别用于从左到右边截取GET字段字符串、从右到左边截取GET字段字符串、截取GET字段中的文件名。
4.如权利要求3所述的基于模式匹配的HTTP请求报文识别方法,其特征在于,在S2.5中,如果遇到匹配的表达式组,则根据需要截取GET字段的字符串,将其与步骤S2.4对应的分类名进行字符串拼接,之后进行HASH运算得到HASH值。
具体实施方式
本发明的设计构思为:将HTTP请求报文进行分类,利用表达式组对HTTP请求报文包含的3个重要字段:GET、Host、Referer分别GET、Host、Referer算法匹配,当GET、Host、Referer三个字段都成功匹配后,认为HTTP请求报文匹配成功,并将其识别为一种分类。
在对详细步骤进行说明前,对本发明涉及到的算法进行说明。
1. GET匹配算法
GET匹配为多模匹配,其分为操作逻辑、模式串两部份。
操作逻辑有两种:与(and)、或(or),表明了模式串的操作逻辑。
模式串:以空格为分隔的几个字符串,字符串前的非(^)符号,表示不能匹配该串。
下面对不同操作逻辑的情况进行说明。
a.操作逻辑是or(或)时:
没有^(非)逻辑的:字符串A 字符串B 字符串C
GET字段中,包含A或包含B或包含C,匹配成功。
包括^(非)逻辑的:^字符串A 字符串B 字符串C
GET字段中,不包含A,但包含B或包含C,匹配成功。
b.操作逻辑是and(与)的:
没有^(非)逻辑的:字符串A 字符串B 字符串C
GET字段中,包含A且包含B且包含C,匹配成功。
c.包括^(非)逻辑的:^字符串A 字符串B 字符串C
GET字段中,不包含A,但包含B且包含C,匹配成功。
2. Referer匹配算法
Referer匹配算法用于对Referer字段进行单模匹配。
3. Host匹配算法
Host匹配算法用于对Host字段进行单模匹配。
4. HASH算法
用于从GET字段中截取关键字符串,作为进行HASH运算的部分字段,HASH运算具有三种操作符,分别为>、<、FileName,作用分别如下:
>:从左至右运算,截取从左边字符串到右边字符串之间的内容,作为备HASH字符串。
<:从右至左运算,截取从右边字符串到左边字符串之间的内容,作为备HASH字符串。
FileName:截取GET字段中包含的文件名,作为备HASH字符串。HASH算法将取到的“分类名”和“备HASH字符串”进行字符串拼接,之后进行HASH化,计算为HASH值,备后期查询。
下面对本发明的工作步骤进行说明。
本发明包括如下步骤:
步骤一:预先定义HTTP请求报文的分类及其对应的分类名,每个分类下有至少一条表达式组(可为多个,因为一种分类下很可能含有若干种同源但不相同的HTTP请求包,需要分别有对应的表达式组进行匹配),每个表达式组包括Host匹配算法表达式、Referer匹配算法表达式、GET匹配算法表达式。
步骤二:选中一条待识别HTTP请求报文,进行如下操作:
S2.1:选择一个没有对所述HTTP请求报文进行过匹配计算的表达式组;
S2.2:利用S2.1选择的表达式组对HTTP请求报文的Host字段进行Host匹配运算,如果匹配算法字段为空或匹配成功则进行步骤S2.3,否则返回S2.1;
S2.3:对HTTP请求报文的Referer字段进行匹配运算,如果匹配算法字段为空或匹配成功则进行步骤S2.4,否则返回S2.1;
S2.4:对HTTP请求报文的GET字段进行匹配运算,如果匹配成功则识别出HTTP请求报文对应的分类名,否则返回S2.1;
S2.5:重复执行步骤S2.1- S2.4,直到遇到匹配的表达式组,如遍历完所有表达式组后不能匹配,则丢弃该HTTP请求报文;
步骤三:重复步骤二,直到遍历完所有待识别的HTTP请求报文。
在上述方法的基础上,本发明还有进一步的优化方案。即每个表达式组还包括HASH运算表达式,在S2.5中,如果遇到匹配的表达式组,则根据需要截取GET字段的字符串,将其与步骤S2.4对应的分类名进行字符串拼接,之后进行HASH运算得到HASH值,备后期查询。
下面结合图1的应用实例对本发明进行说明。
步骤一:接收到一个淘宝jpg图片的HTTP请求报文,该报文Host: www.tbcdn.cn。
步骤二:先将请求报文解释为HTTP字段,包括:Host、Referer、GET。
步骤三:用Host匹配算法,对Host字段进行匹配,如匹配失败则继续匹配下一条接收到的请求报文。如匹配成功则执行步骤四。
步骤四:用Referer匹配算法,对Referer字段进行匹配。匹配规则为空,视为匹配成功:进入下一步。
步骤五:用Get匹配算法,匹配GET字段。GET中,包含.jpg或者.png字符串的,视为匹配成功,进入步骤六。
步骤六:将该请求报文识别为分类“taobao”。
步骤七:根据HASH算法,将该请求报文中的请求文件名提取出来。
步骤八:根据六、步骤七的结果生成“taobao>文件名”的字符串,然后将该串进行HASH,得到的HASH值,作为该请求的唯一查询码。
本发明与现有正则表达式方法相比,实现了如下有益效果:
1.有针对性,专用于HTTP请求报文的识别。
2.充分考虑程序处理效率的情况下,满足“HTTP请求报文识别”的灵活性。针对HTTP请求的特点,采用自定义的表达式进行识别,一方面避免了正规表达式过于庞大,程序处理效率低的问题。一方面又可以满足目前HTTP请求报文识别的所有需求。
3.扩展灵活,随时支持除Host、Referer、GET外其它字段。例如:需要匹配HTTP协议的User-Agent字段,可以直接添加一个User-Agent匹配算法。
4.识别精确,如果需要提高精确性,可将GET匹配算法应用到其它字段。例如:需要精确匹配HTTP协议的User-Agent字段,可以直接添加一个User-Agent匹配算法,并完全采用GET匹配算法的“操作逻辑”“模式串”。
5.结构简单,表达方式简单。
6.高执行效率,针对程序算法进行优化,执行效率高。
7.高查询效率,将HTTP请求报文按算法进行HASH化,查询效率高。