一种流量解析场景下快速拆分HTTP请求与响应的方法转让专利

申请号 : CN202010573606.X

文献号 : CN111740996B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 龚致

申请人 : 四川长虹电器股份有限公司

摘要 :

本发明公开了一种流量解析场景下快速拆分HTTP请求与响应的方法,属于网络安全技术领域。该方法具体步骤如下:TCP流量预处理:处理TCP层数据重组并提取HTTP内容,针对HTTP协议版本和特征形成指纹库,接收到TCP流量后先进行指纹比对;HTTP流量预处理:对同TCP会话下HTTP请求和响应的类型快速识别,并与TCP的方向进行关联,根据不同HTTP协议版本进行不同流处理;HTTP请求与响应快速处理:对HTTP包内容对HTTP协议请求行或响应行预处理,针对HTTP长连接仅将使用探针获取到的TCP包快速查找请求行或响应行,利用不同请求拆分不同TCP包内容的特性,快速将多个HTTP请求和HTTP响应拆分。本发明解决在流量解析场景下对TCP会话下的HTTP请求和HTTP响应进行拆分以及请求、响应对应效率低下的问题。

权利要求 :

1.一种流量解析场景下快速拆分HTTP请求与响应的方法,其特征在于,具体步骤如下:TCP流量预处理:处理TCP层数据重组并提取HTTP内容,针对HTTP协议版本和特征形成指纹库,接收到TCP流量后先进行指纹比对;

HTTP流量预处理:对同TCP会话下HTTP请求和响应的类型快速识别,并与TCP的方向进行关联 ,根据不同HTTP协议版本进行不同流处理;

HTTP请求与响应快速处理:对HTTP包内容中HTTP协议请求行或响应行预处理,针对HTTP长连接仅将使用探针获取到的TCP包快速查找请求行或响应行,利用不同请求拆分不同TCP包内容的特性 ,快速将多个HTTP请求和HTTP响应拆分;

所述HTTP流量预处理,还包括:HTTP短连接无需进行HTTP请求和响应拆分,HTTP长连接才需要进行拆分,对TCP会话下的多个HTTP请求和响应进行HTTP会话重组和保存;

HTTP请求方法特征预处理 ,包括:在该TCP会话上对于TCP三次握手的发起者sip=10.0.0.1、sport=8888,检测其TCP负荷中是否以HTTP请求方法GET/HEAD/POST/OPTIONS/PUT/DELETE/TRACE/CONNECT开头;

如果不是该TCP会话的HTTP会话不进行解析;

如果符合HTTP请求的特征则进行生成HTTP会话;

所述生成HTTP会话,包括:

通过sip=10.0.0.1、sport=8888、dip=10.0.0.2、dport=80以及该TCP会话上的HTTP会话计数器count=1进行哈希,得到该HTTP会话sessionid=sid1;并且关联HTTP会话的请求和响应相关元信息 ,并将当前TCP负荷设置成HTTP负荷并进行HTTP 0.9请求方法特征预处理;

所述HTTP 0.9请求方法特征预处理,包括:判断该HTTP负荷中HTTP请求的方法是否为GET,如果不是则设置该HTTP会话为长连接,如果是GET则进行下一步;

判断该HTTP负荷中HTTP请求第一个请求行标志\r\n,是否\r\n就是HTTP请求的结尾,且\r\n前无HTTP版本信息,判断结果为是,则该HTTP会话为短连接,否则设置该HTTP会话为长连接;

设置该HTTP会话为长连接后,进行等待HTTP负荷,判断HTTP会话是否长连接;

所述等待HTTP负荷,判断HTTP会话是否长连接,包括:该HTTP会话为短连接:通过HTTP会话sessionid=sid1查找到对应的存储位置 ,并通过HTTP会话的方向确定目前的HTTP包是请求还是响应分别进行存储,存储完毕后进行判断当前TCP会话是否已经结束;

该HTTP会话为长连接:对当前HTTP负荷进行请求行或响应行标志\r\n查找,用于判断当前HTTP负荷是否为下一个HTTP会话的请求行或者响应行,不对HTTP请求或响应进行全量解析,仅部分字符串查找,如果查找到请求行或响应行标志\r\n,表明前一个HTTP负荷已经是上一个HTTP会话的最后一个TCP包,上一个HTTP会话处理完毕,根据HTTP请求/响应类型存储到对应会话 ,在HTTP会话哈希表删除当前HTTP会话sessionid=sid1相关信息,并生成新的会话sessionid=sid2,当前HTTP负荷为新会话的第一个TCP包,进行判断当前TCP会话是否已经结束;如果未查找到则根据HTTP请求/响应类型将当前HTTP负荷追加到当前HTTP会话数据存储中,然后进行判断当前TCP会话是否已经结束。

2.根据权利要求1所述的一种流量解析场景下快速拆分HTTP请求与响应的方法,其特征在于,所述处理TCP层数据重组并提取HTTP内容,针对HTTP协议版本和特征形成指纹库,接收到TCP流量后先进行指纹比对,包括:进行TCP流量的捕获;

进行TCP包的重组和TCP负荷提取。

3.根据权利要求2所述的一种流量解析场景下快速拆分HTTP请求与响应的方法,其特征在于,所述进行TCP流量的捕获,包括:通过Linux内核AF_PACKET实现TCP流量的捕获;

所述进行TCP包的重组和TCP负荷提取,包括:通过IP分片重组提取对应的TCP报文,通过TCP报文的重组提取TCP负荷;

针对Linux内核tcp fastopen,检查tcp syn包是否携带tcp fastopen的cookie,如果是进行校验,如果校验正确则提取TCP负荷;

通过判断TCP三次握手的发起者,假定TCP三次握手syn包sip=10.0.0.1、sport=8888,那么接收端就是dip=10.0.0.2、dport=80,如果该syn包为TCP三次握手发起者则进行HTTP请求方法特征预处理,如果该syn包不为TCP三次握手发起者则进行HTTP响应特征预处理。

4.根据权利要求3所述的一种流量解析场景下快速拆分HTTP请求与响应的方法,其特征在于,所述HTTP响应特征预处理,包括:检测其TCP负荷中是否以HTTP/1.开头,如果是则认为HTTP1.0/1.1版本响应内容;

通过dip=10.0.0.1、dport=8888、sip=10.0.0.2、sport=80哈希查找是否有对应的请求发起,并且请求版本为HTTP0.9,如果是则认为该响应为HTTP 0.9正常响应,如果未找到对应信息或者版本内容非HTTP0.9,则认为该TCP会话有异常不进行解析,如果哈希查找到且HTTP版本信息正常,将当前TCP负荷设置成HTTP负荷,进行等待HTTP负荷,判断HTTP会话是否长连接。

5.根据权利要求1所述的一种流量解析场景下快速拆分HTTP请求与响应的方法,其特征在于,所述判断当前TCP会话是否已经结束,包括:当前TCP会话已经结束,则进行释放当前TCP会话、以及该TCP会话上的HTTP会话相关资源,结束当前TCP会话的处理;

当前TCP会话还未结束,则进行等待HTTP负荷,判断HTTP会话是否长连接,继续等待TCP包提取HTTP负荷。

说明书 :

一种流量解析场景下快速拆分HTTP请求与响应的方法

技术领域

[0001] 本发明属于网络安全领域,应用于流量解析方向,尤其是一种流量解析场景下快速拆分HTTP请求与响应的方法。

背景技术

[0002] 目前在流量解析场景下该技术领域采用的方法一是完整解析HTTP请求与响应内容,具体流程是通过流量探针获取到TCP流量后,将TCP流量放入HTTP流量解析器进行解析,
该技术方案存在的缺陷是解析效率低和兼容性差,缺陷是由于以下原因导致:
[0003] (1)未进行预处理,将所有捕获的流量解析HTTP请求与响应内容解析;
[0004] (2)获取到HTTP请求和响应流量后,对HTTP请求和响应进行完整解析,包括解析请求行、请求头、请求体、响应行、响应头、响应体;
[0005] (3)未对新技术进行适配导致相关流量无法解析,如TFO(TCP fast open)技术;
[0006] 目前在流量解析场景下该技术领域采用的方法二是单独解析TCP会话中的请求和响应不同的方向,具体流程是通过流量探针获取TCP流量后,将TCP流量分成进出两个方向
直接进行请求和响应的拆分,而不处理具体HTTP内容,该技术方案存在的缺陷是无法拆分
多个HTTP请求和响应和会话对应,缺陷是由于以下原因导致:
[0007] (1)未进行HTTP请求或响应内容的完整解析;
[0008] (2)未对新技术进行适配导致相关流量无法解析,如TFO(TCP fast open)技术;
[0009] 该专利申请针对的问题是在HTTP流量解析场景下需要快速对TCP会话下的HTTP请求和HTTP响应进行拆分以及请求、响应对应,以便对同一HTTP请求和响应进行会话存储、使
用;问题缺陷的技术实质是在进行完整的HTTP请求和响应解析的方案下能够达到HTTP请求
和HTTP响应进行拆分以及请求、响应对应,但是解析效率极低。

发明内容

[0010] 本发明提供一种流量解析场景下快速拆分HTTP请求与响应的方法,以期解决背景技术中存在的:采用HTTP协议特征预处理和TCP进出方向识别的方法,解决在流量解析场景
下对TCP会话下的HTTP请求和HTTP响应进行拆分以及请求、响应对应效率低下的问题。该专
利申请解决问题的方法技术本质是在不对HTTP请求和响应进行完整解析的情况下能够达
到HTTP请求和HTTP响应进行拆分以及请求、响应对应。
[0011] 为了实现上述目的,本发明采用以下技术方案:
[0012] 一种流量解析场景下快速拆分HTTP请求与响应的方法,具体步骤如下:
[0013] TCP流量预处理:处理TCP层数据重组并提取HTTP内容,针对HTTP协议版本和特征形成指纹库,接收到TCP流量后先进行指纹比对;
[0014] HTTP流量预处理:对同TCP会话下HTTP请求和响应的类型快速识别,并与TCP的方向进行关联,根据不同HTTP协议版本进行不同流处理;
[0015] HTTP请求与响应快速处理:对HTTP包内容对HTTP协议请求行或响应行预处理,针对HTTP长连接仅将使用探针获取到的TCP包快速查找请求行或响应行,利用不同请求拆分
不同TCP包内容的特性,快速将多个HTTP请求和HTTP响应拆分。
[0016] 所述处理TCP层数据重组并提取HTTP内容,针对HTTP协议版本和特征形成指纹库,接收到TCP流量后先进行指纹比对,包括:
[0017] 进行TCP流量的捕获;
[0018] 进行TCP包的重组和TCP负荷提取。
[0019] 所述进行TCP流量的捕获,包括:
[0020] 通过Linux内核AF_PACKET实现TCP流量的捕获;
[0021] 所述进行TCP包的重组和TCP负荷提取,包括:
[0022] 通过IP分片重组提取对应的TCP报文,通过TCP报文的重组提取TCP负荷;
[0023] 针对Linux内核tcp fastopen,检查tcp syn包是否携带tcp fastopen的cookie,如果是进行校验,如果校验正确则提取TCP负荷;
[0024] 通过判断TCP三次握手的发起者,假定TCP三次握手syn包sip=10.0.0.1、sport=8888,那么接收端就是dip=10.0.0.2、dport=80,如果该syn包为TCP三次握手发起者则进
行HTTP请求方法特征预处理,如果该syn包不为TCP三次握手发起者则进行HTTP响应特征预
处理。
[0025] 所述HTTP流量预处理,还包括:HTTP短连接无需进行HTTP请求和响应拆分,HTTP长连接才需要进行拆分,对TCP会话下的多个HTTP请求和响应进行HTTP会话重组和保存。
[0026] 所述HTTP请求方法特征预处理,包括:
[0027] 在该TCP会话上对于TCP三次握手的发起者sip=10.0.0.1、sport=8888,检测其TCP负荷中是否以HTTP请求方法
[0028] GET/HEAD/POST/OPTIONS/PUT/DELETE/TRACE/CONNECT开头;
[0029] 如果不是该TCP会话不是HTTP会话不进行解析;
[0030] 如果符合HTTP请求的特征则进行生成HTTP会话。
[0031] 所述生成HTTP会话,包括:
[0032] 通过sip=10.0.0.1、sport=8888、dip=10.0.0.2、dport=80以及该TCP会话上的HTTP会话计数器count=1进行哈希,得到该HTTP会话sessionid=sid1;并且关联该会话
的请求和响应相关元信息,并将当前TCP负荷设置成HTTP负荷并进行HTTP0.9请求方法特征
预处理。
[0033] 所述HTTP 0.9请求方法特征预处理,包括:
[0034] 判断该HTTP负荷中HTTP请求的方法是否为GET,如果不是则设置该HTTP会话为长连接,如果是GET则进行下一步;
[0035] 判断该HTTP负荷中HTTP请求第一个请求行标志\r\n是否内容结尾,且\r\n前无HTTP版本信息,则该HTTP会话为短连接,否则设置该HTTP会话为长连接;
[0036] 设置该HTTP会话为长连接后,进行等待HTTP负荷,判断HTTP会话是否长连接。
[0037] 所述HTTP响应特征预处理,包括:
[0038] 检测其TCP负荷中是否以HTTP/1.开头,如果是则认为HTTP1.0/1.1版本响应内容;
[0039] 通过dip=10.0.0.1、dport=8888、sip=10.0.0.2、sport=80哈希查找是否有对应的请求发起,并且请求版本为HTTP0.9,如果是则认为该响应为HTTP 0.9正常响应,如果
未找到该信息或者版本内容非HTTP0.9则认为该TCP会话有异常不进行解析,如果哈希查找
到且HTTP版本信息正常,将当前TCP负荷设置成HTTP负荷,进行等待HTTP负荷,判断HTTP会
话是否长连接。
[0040] 所述等待HTTP负荷,判断HTTP会话是否长连接,包括:
[0041] 该HTTP会话为短连接:通过HTTP会话sessionid=sid1查找到对应的存储位置,并通过HTTP会话的方向确定目前的HTTP包是请求还是响应分别进行存储,存储完毕后进行判
断当前TCP会话是否已经结束;
[0042] 该HTTP会话为长连接:对当前HTTP负荷进行请求行或响应行标志\r\n查找,用于判断当前HTTP负荷是否为下一个HTTP会话的请求行或者响应行,不对HTTP请求或响应进行
全量解析,仅部分字符串查找,如果查找到请求行或响应行标志\r\n,表明前一个HTTP负荷
已经是上一个HTTP会话的最后一个TCP包,上一个HTTP会话处理完毕,根据HTTP请求/响应
类型存储到对应会话,在HTTP会话哈希表删除当前HTTP会话sessionid=sid1相关信息,并
生成新的会话sessionid=sid2,当前HTTP负荷为新会话的第一个TCP包,进行判断当前TCP
会话是否已经结束;如果未查找到则根据HTTP请求/响应类型将当前HTTP负荷追加到当前
HTTP会话数据存储中,然后进行判断当前TCP会话是否已经结束。
[0043] 所述判断当前TCP会话是否已经结束,包括:
[0044] 当前TCP会话已经结束,则进行释放当前TCP会话、以及该TCP会话上的HTTP会话相关资源,结束当前TCP会话的处理;
[0045] 当前TCP会话还未结束,则进行等待HTTP负荷,判断HTTP会话是否长连接,继续等待TCP包提取HTTP负荷。
[0046] 本发明与现有技术相比具有的有益效果是:
[0047] 通过技术方案内的TCP流量预处理模块、HTTP流量预处理模块、HTTP请求与响应快速处理模块三个模块,达到不对HTTP请求(包括请求行、请求头、请求体)、HTTP响应(包括响
应行、响应头、响应体)进行完整解析,就能够对同TCP会话下的多个HTTP请求和响应进行快
速拆分,针对原有方案提升较大的分析效率。

附图说明

[0048] 图1是本发明的一种流量解析场景下快速拆分HTTP请求与响应的方法的实施流程图。

具体实施方式

[0049] 下面结合实施例对本发明作进一步的描述,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。基于本发明中的实施例,本领域的普通技术人员在没有做出
创造性劳动前提下所获得的其他所用实施例,都属于本发明的保护范围。
[0050] 实施例1:
[0051] 如图1所示,
[0052] S1:进行TCP流量的捕获:通过Linux内核AF_PACKET技术实现TCP流量的捕获;
[0053] S2:进行TCP包的重组和TCP负荷提取:
[0054] S21:通过IP分片重组提取对应的TCP报文,通过TCP报文的重组提取TCP负荷;
[0055] S22:针对Linux内核tcp fastopen技术,检查tcp syn包是否携带tcp fastopen的cookie,如果是进行校验,如果校验正确则提取TCP负荷;
[0056] S23:通过判断TCP三次握手的发起者,假定TCP三次握手syn包sip=10.0.0.1、sport=8888,那么接收端就是dip=10.0.0.2、dport=80,如果该syn包为TCP三次握手发
起者则进行S3,如果该syn包不为TCP三次握手发起者则进行S6;syn包是tcp包里面带有syn
标记的包。
[0057] S3:HTTP请求方法特征预处理:在该TCP会话上对于TCP三次握手的发起者sip=10.0.0.1、sport=8888,检测其TCP负荷中是否以HTTP请求方法GET/HEAD/POST/OPTIONS/
PUT/DELETE/TRACE/CONNECT开头,如果不是该TCP会话不是HTTP会话不进行解析;如果符合
HTTP请求的特征则进行S4;
[0058] S4:生成HTTP会话:通过sip=10.0.0.1、sport=8888、dip=10.0.0.2、dport=80以及该TCP会话上的HTTP会话计数器count=1进行哈希,得到目前该HTTP会话sessionid=
sid1;并且关联该会话的请求和响应相关元信息,并将当前TCP负荷设置成HTTP负荷并进行
S5;
[0059] S5:HTTP 0.9请求方法特征预处理:
[0060] S51:首先判断该HTTP负荷中HTTP请求的方法是否为GET,如果不是则设置该HTTP会话为长连接,如果是GET则进行下一步;
[0061] S52:判断该HTTP负荷中HTTP请求第一个请求行标志\r\n是否内容结尾,且\r\n前无HTTP版本信息,则该HTTP会话为短连接,否则设置该HTTP会话为长连接;
[0062] S53:上述处理完后进行S7;
[0063] S6:HTTP响应特征预处理:
[0064] S61:检测其TCP负荷中是否以HTTP/1.开头,如果是则认为HTTP1.0/1.1版本响应内容;
[0065] S62:通过dip=10.0.0.1、dport=8888、sip=10.0.0.2、sport=80哈希查找是否有对应的请求发起,并且请求版本为HTTP0.9,如果是则认为该响应为HTTP 0.9正常响应,
如果未找到该信息或者版本内容非HTTP0.9则认为该TCP会话有异常不进行解析,如果哈希
查找到且HTTP版本信息正常,将当前TCP负荷设置成HTTP负荷,进行S7;
[0066] S7:等待HTTP负荷,判断HTTP会话是否长连接:
[0067] S71:该HTTP会话为短连接:通过HTTP会话sessionid=sid1查找到对应的存储位置,并通过HTTP会话的方向确定目前的HTTP包是请求还是响应分别进行存储,存储完毕后
进行S10;
[0068] S72:该HTTP会话为长连接:对当前HTTP负荷进行请求行或响应行标志\r\n查找,用于判断当前HTTP负荷是否为下一个HTTP会话的请求行或者响应行,不对HTTP请求或响应
进行全量解析,仅部分字符串查找,如果查找到请求行或响应行标志\r\n则进行S8,如果未
查找到则进行S9;
[0069] S8:查找到请求行或响应行标志\r\n,表明前一个HTTP负荷已经是上一个HTTP会话的最后一个TCP包,上一个HTTP会话处理完毕,根据HTTP请求/响应类型存储到对应会话,
在HTTP会话哈希表删除当前HTTP会话sessionid=sid1相关信息,并生成新的会话
sessionid=sid2,当前HTTP负荷为新会话的第一个TCP包,然后进行S10;
[0070] S9:未查找到请求行或响应行标志\r\n,根据HTTP请求/响应类型将当前HTTP负荷追加到当前HTTP会话数据存储中,然后进行S10;
[0071] S10:判断当前TCP会话是否已经结束:
[0072] S101:当前TCP会话已经结束,则进行S11;
[0073] S102:当前TCP会话还未结束,则进行S7,继续等待TCP包提取HTTP负荷;
[0074] S11:释放当前TCP会话、以及该TCP会话上的HTTP会话相关资源,结束当前TCP会话的处理。
[0075] 本发明提供的流量解析场景下快速拆分HTTP请求与响应的方法,该方法主要用于网络流量解析领域,针对HTTP协议流量的解析,旨在提高HTTP协议流量解析的高效性。该项
发明属于一种在网络流量解析领域中的一种HTTP协议流量解析效率方法策略,该方法策略
在业务产品中使用,该项发明通过HTTP协议特征库,对TCP流量进行协议预分析,通过判断
tcp fastopen标志和cookie,对tcp fastopen流量进行支持,过TCP三次握手发起者,快速
判断HTTP请求和响应的归属方,通过HTTP请求方向与五元组进行结合的方式进行HTTP会话
快速查找,通过字符串查找HTTP请求行和HTTP响应行结束标志,快速判定HTTP请求和响应
的内容。
[0076] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。