CN108011850B - 数据包的重组方法及装置、计算机设备及可读介质 - Google Patents

数据包的重组方法及装置、计算机设备及可读介质 Download PDF

Info

Publication number
CN108011850B
CN108011850B CN201711364418.0A CN201711364418A CN108011850B CN 108011850 B CN108011850 B CN 108011850B CN 201711364418 A CN201711364418 A CN 201711364418A CN 108011850 B CN108011850 B CN 108011850B
Authority
CN
China
Prior art keywords
tcp
stream
tcp data
data packets
packet
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201711364418.0A
Other languages
English (en)
Other versions
CN108011850A (zh
Inventor
蓝秉宸
王少岩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201711364418.0A priority Critical patent/CN108011850B/zh
Publication of CN108011850A publication Critical patent/CN108011850A/zh
Application granted granted Critical
Publication of CN108011850B publication Critical patent/CN108011850B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9057Arrangements for supporting packet reassembly or resequencing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/163In-band adaptation of TCP data exchange; In-band control procedures

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供一种数据包的重组方法及装置、计算机设备及可读介质。其方法包括:从网络的路由节点中获取预设时间周期内的所有TCP数据包;根据各TCP数据包的四元组信息,获取各TCP流中的多个TCP数据包;该四元组信息包括源端口标识、目的端口标识、源IP地址和目的IP地址;根据各TCP流中的各TCP数据包的四元组信息以及各TCP数据包的属性信息,将各TCP流中的多个TCP数据包按照发送顺序重组;将各TCP流的重组后的多个TCP数据包按照HTTP流进行重组。本本发明的技术方案可以对于任意形式的TCP流中的数据包进行重组,使用方式非常灵活,能够适用于非常多的场景中,实用性非常强。

Description

数据包的重组方法及装置、计算机设备及可读介质
【技术领域】
本发明涉及计算机应用技术领域,尤其涉及一种数据包的重组方法及装置、计算机设备及可读介质。
【背景技术】
超文本传输协议(HyperText Transfer Protocol;HTTP)是一种基于传输控制协议(Transmission Control Protocol;TCP)TCP/网际协议(Internet protocol;IP)的应用层协议,已经广泛的应用于互联网领域。
在互联网广泛普及和信息爆炸的时代,信息安全成了重要课题。通过分析数据流,重组HTTP协议数据包,将网络中传输的数据包还原成完整的应用层数据,可以帮助人们实现安全行为分析。例如,现有的HTTP流重组技术主要应用于安全审计领域,包括挖掘恶意非法用户行为(黄赌毒,刷流量),用户网站漏洞和后门挖掘,肉鸡和攻击主控的发现,网络攻击行为的检测等。但是现有技术中缺乏有效的HTTP流重组技术,例如现有技术提供的一种基于HTTP的网络数据包还原方法在TCP会话数据流重组算法的基础上,对HTTP协议中post方法提交的数据,添加通过Content-Length的值判断数据是否发送完。在接受重组的过程中,累计记录数据包的有效数据长度,其中有效数据长度即不包含TCP/IP协议头的长度,当累计的数据包的长度等于协议头部中指定的长度时,即post提交的数据已经完成;这时不用再继续等到携带tcp连接断开标志位FIN为1的报文到达,即可以分析提交的报文数据。
但是,上述现有的网络数据包还原方法处理的数据单一,只能分析和重组POST数据,无法处理GET/HEAD等请求方法,也无法处理transfer-encoding等不含content-length字段的数据包。因此,现有的HTTP流重组技术非常死板,仅能够处理较为单一的数据,实用性较差。
【发明内容】
本发明提供了一种数据包的重组方法及装置、计算机设备及可读介质,用于提高数据包的重组方案的灵活性和实用性。
本发明提供一种数据包的重组方法,所述方法包括:
从网络的路由节点中获取预设时间周期内的所有TCP数据包;
根据各所述TCP数据包的四元组信息,获取各TCP流中的多个所述TCP数据包;所述四元组信息包括源端口标识、目的端口标识、源IP地址和目的IP地址;
根据各所述TCP流中的各所述TCP数据包的所述四元组信息以及各所述TCP数据包的属性信息,将各所述TCP流中的多个所述TCP数据包按照发送顺序重组;
将各所述TCP流的重组后的多个所述TCP数据包按照HTTP流进行重组。
进一步可选地,如上所述的方法中,根据各所述TCP数据包的四元组信息,获取各TCP流中的多个所述TCP数据包,具体包括:
根据各所述TCP数据包的四元组信息,计算对应的所述TCP数据包的哈希值,使得所述四元组信息相同的所述TCP数据包具有相同的所述哈希值;
将所述所有TCP数据包中所述哈希值相同的所述TCP数据包归为同一所述TCP流的所述TCP数据包,得到各TCP流中的多个所述TCP数据包。
进一步可选地,如上所述的方法中,根据各所述TCP流中的各所述TCP数据包的所述四元组信息以及各所述TCP数据包的属性信息,将各所述TCP流中的多个所述TCP数据包按照发送顺序重组,具体包括:
根据同一所述TCP流中的各所述TCP数据包的所述四元组信息,将所述TCP流中的多个所述TCP数据包分为发送方向上的多个所述TCP数据包和响应方向上的多个所述TCP数据包;
从所述发送方向上的多个所述TCP数据包中获取作为第一握手包的所述TCP数据包、作为第一结束包的所述TCP数据包;
根据所述发送方向上的各所述TCP数据包的序列标识、以及作为所述握手包的所述TCP数据包和作为所述结束包的所述TCP数据包,对所述TCP流中的所述发送方向上的多个所述TCP数据包按照发送顺序进行重组;
从所述响应方向上的多个所述TCP数据包中获取作为第二握手包的所述TCP数据包、作为第二结束包的所述TCP数据包;
根据所述响应方向上的各所述TCP数据包的序列标识、以及作为所述第二握手包的所述TCP数据包和作为所述第二结束包的所述TCP数据包,对所述TCP流中的所述响应方向上的多个所述TCP数据包按照反馈顺序进行重组。
进一步可选地,如上所述的方法中,将各所述TCP流中的多个所述TCP数据包按照HTTP流进行重组,具体包括:
确定各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中的每个所述HTTP流的边界;
根据对应的所述TCP流中的各所述HTTP流的边界,对所述TCP流中的多个所述TCP数据包按照HTTP流进行重组。
进一步可选地,如上所述的方法中,确定同一所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中的每个所述HTTP流的边界,具体包括如下:
判断各所述TCP流中所述响应方向上重组的多个所述TCP数据包中是否包括响应状态码为1xx/204/304,若包括,将所述TCP数据包作为所述HTTP流的边界;
否则进一步判断各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中是否使用了非“identity”的编码方式,若是,则获取由“chunked”决定的消息体长度,并根据所述消息体长度确定所述HTTP流的边界;
否则进一步判断各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中是否存在“Content-Length”实体头,若存在,获取所述实体头作为消息体长度,并根据所述消息体长度确定所述HTTP流的边界;
否则进一步判断各所述TCP流中所述响应方向上重组后的最后一个所述TCP数据包中是否使用关闭连接方式代表消息体结束,若是,则确定所述HTTP流的边界。
进一步可选地,如上所述的方法中,根据各所述TCP流中的各所述TCP数据包的所述四元组信息以及各所述TCP数据包的属性信息,将各所述TCP流中的多个所述TCP数据包按照发送顺序重组,具体包括:
根据各所述TCP流的所述哈希值、预设的数个重组执行单元的标识以及预设的重组执行单元的选取策略,确定各所述TCP流对应的所述重组执行单元的标识;
根据各所述TCP流对应的所述重组执行单元的标识,控制对应的所述重组执行单元根据对应的所述TCP流中的各所述TCP数据包的所述四元组信息以及各所述TCP数据包的属性信息,将对应的所述TCP流中的多个所述TCP数据包按照发送顺序进行重组。
进一步可选地,如上所述的方法中,将各所述TCP流中的多个所述TCP数据包按照HTTP流进行重组,具体包括:
根据各所述TCP流对应的所述重组执行单元的标识,控制对应的所述重组执行单元将对应的所述TCP流的重组后的多个所述TCP数据包按照HTTP流进行重组。
本发明提供一种数据包的重组装置,所述装置包括:
获取模块,用于从网络的路由节点中获取预设时间周期内的所有TCP数据包;
所述获取模块,还用于根据各所述TCP数据包的四元组信息,获取各TCP流中的多个所述TCP数据包;所述四元组信息包括源端口标识、目的端口标识、源IP地址和目的IP地址;
TCP流重组模块,用于根据各所述TCP流中的各所述TCP数据包的所述四元组信息以及各所述TCP数据包的属性信息,将各所述TCP流中的多个所述TCP数据包按照发送顺序重组;
HTPP流重组模块,用于将各所述TCP流的重组后的多个所述TCP数据包按照HTTP流进行重组。
进一步可选地,如上所述的装置中,所述获取模块,具体用于:
根据各所述TCP数据包的四元组信息,计算对应的所述TCP数据包的哈希值,使得所述四元组信息相同的所述TCP数据包具有相同的所述哈希值;
将所述所有TCP数据包中所述哈希值相同的所述TCP数据包归为同一所述TCP流的所述TCP数据包,得到各TCP流中的多个所述TCP数据包。
进一步可选地,如上所述的装置中,所述TCP流重组模块,具体用于:
根据同一所述TCP流中的各所述TCP数据包的所述四元组信息,将所述TCP流中的多个所述TCP数据包分为发送方向上的多个所述TCP数据包和响应方向上的多个所述TCP数据包;
从所述发送方向上的多个所述TCP数据包中获取作为第一握手包的所述TCP数据包、作为第一结束包的所述TCP数据包;
根据所述发送方向上的各所述TCP数据包的序列标识、以及作为所述握手包的所述TCP数据包和作为所述结束包的所述TCP数据包,对所述TCP流中的所述发送方向上的多个所述TCP数据包按照发送顺序进行重组;
从所述响应方向上的多个所述TCP数据包中获取作为第二握手包的所述TCP数据包、作为第二结束包的所述TCP数据包;
根据所述响应方向上的各所述TCP数据包的序列标识、以及作为所述第二握手包的所述TCP数据包和作为所述第二结束包的所述TCP数据包,对所述TCP流中的所述响应方向上的多个所述TCP数据包按照反馈顺序进行重组。
进一步可选地,如上所述的装置中,所述HTPP流重组模块,具体用于:
确定各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中的每个所述HTTP流的边界;
根据对应的所述TCP流中的各所述HTTP流的边界,对所述TCP流中的多个所述TCP数据包按照HTTP流进行重组。
进一步可选地,如上所述的装置中,所述HTPP流重组模块,具体用于执行如下操作:
判断各所述TCP流中所述响应方向上重组的多个所述TCP数据包中是否包括响应状态码为1xx/204/304,若包括,将所述TCP数据包作为所述HTTP流的边界;
否则进一步判断各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中是否使用了非“identity”的编码方式,若是,则获取由“chunked”决定的消息体长度,并根据所述消息体长度确定所述HTTP流的边界;
否则进一步判断各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中是否存在“Content-Length”实体头,若存在,获取所述实体头作为消息体长度,并根据所述消息体长度确定所述HTTP流的边界;
否则进一步判断各所述TCP流中所述响应方向上重组后的最后一个所述TCP数据包中是否使用关闭连接方式代表消息体结束,若是,则确定所述HTTP流的边界。
进一步可选地,如上所述的装置中,所述TCP流重组模块包括:确定单元、控制单元以及数个重组执行单元;
所述确定单元,用于根据各所述TCP流的所述哈希值、预设的数个重组执行单元的标识以及预设的重组执行单元的选取策略,确定各所述TCP流对应的所述重组执行单元的标识;
所述控制单元,用于根据各所述TCP流对应的所述重组执行单元的标识,控制对应的所述重组执行单元根据对应的所述TCP流中的各所述TCP数据包的所述四元组信息以及各所述TCP数据包的属性信息,将对应的所述TCP流中的多个所述TCP数据包按照发送顺序进行重组。
进一步可选地,如上所述的装置中,所述HTPP流重组模块,具体用于:
根据各所述TCP流对应的所述重组执行单元的标识,控制对应的所述重组执行单元将对应的所述TCP流的重组后的多个所述TCP数据包按照HTTP流进行重组。
本发明还提供一种计算机设备,所述设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上所述的数据包的重组方法。
本发明还提供一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的数据包的重组方法。
本发明的数据包的重组方法及装置、计算机设备及可读介质,通过从网络的路由节点中获取预设时间周期内的所有TCP数据包;根据各TCP数据包的四元组信息,获取各TCP流中的多个TCP数据包;该四元组信息包括源端口标识、目的端口标识、源IP地址和目的IP地址;根据各TCP流中的各TCP数据包的四元组信息以及各TCP数据包的属性信息,将各TCP流中的多个TCP数据包按照发送顺序重组;将各TCP流的重组后的多个TCP数据包按照HTTP流进行重组。本本发明的技术方案可以对于任意形式的TCP流中的数据包进行重组,使用方式非常灵活,能够适用于非常多的场景中,实用性非常强。且本发明的技术方案,可以实现离线条件下的TCP流中的TCP数据包的重组,解决TCP流中TCP数据包乱序的问题;而且可以实现TCP长短连接条件下,HTTP流的完整还原与匹配,从而可以有效地保证重组后的数据包能够准确还原原始数据。
【附图说明】
图1为本发明的数据包的重组方法实施例一的流程图。
图2为本发明实施例提供的一种TCP流的示意图。
图3为本发明实施例提供的一种HTTP流的重组示意图。
图4为本发明的本发明的数据包的重组方法实施例二的流程图。
图5为本发明的数据包的重组装置实施例一的结构图。
图6为本发明的数据包的重组装置实施例二的结构图。
图7为本发明的计算机设备实施例的结构图。
图8为本发明提供的一种计算机设备的示例图。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
图1为本发明的数据包的重组方法实施例一的流程图。如图1所示,本实施例的数据包的重组方法,具体可以包括如下步骤:
100、从网络的路由节点中获取预设时间周期内的所有TCP数据包;
本实施例的数据包的重组方法的执行主体为数据包的重组装置,该数据包的重组装置可以对网络中的所有TCP数据包按照TCP流重组,并在每个TCP流中按照HTTP流重组。实际应用中,一个TCP流可以包括多个HTTP流,每个HTTP流中可以包括多个TCP数据包。也就是说,一个TCP流中的多个TCP数据包可以按照HTTP流分片,分成多个HTTP流,每个HTTP流对应一个HTTP数据包。从数据角度来分析,每个HTTP流可以对应一个完整的数据,在发送时,该数据可以被分成多个TCP数据包分片来发送。一个TCP流中可以包括多个HTTP流,即该TCP流对应的大数据包中可以包括多个HTTP流对应的数据。
本实施例的数据包的重组方法可以应用在安全审计领域。在互联网的数据传输中,无论是发送端如客户端(client)向接收端如服务器端(server)发送的数据,还是接收端如服务器端(server)向发送端如客户端(client)响应的数据,都需要经过网络中的路由节点,因此可以从网络节点中截取网络中的所有TCP数据包。具体地,本实施例中,可以使用数据平面开发套件(Data Plane Development Kit;DPDK)从网络的路由节点中截取的预设时间周期内的所有TCP数据包,即本实施例中是在离线旁路条件下捕获网络中的所有TCP数据包。由于TCP数据包在传输过程中,可能会乱序到达,因此,本实施例中,需要对所获取的所有离线的TCP数据包按照发送的顺序进行TCP流的重组整理和HTTP流的重组整理,才能进一步基于重组后的数据包进行安全审计方面的分析。本实施例中通过使用DPDK从网络的路由节点中捕获TCP数据包,可以有效地降低系统的性能开销。
101、根据各TCP数据包的四元组信息,获取各TCP流中的多个TCP数据包;该四元组信息包括源端口标识、目的端口标识、源IP地址和目的IP地址;
由于发送端向接收端发送TCP流的过程中,每一个TCP流都唯一对应一组四元组,其包括发送端的源IP地址、发送端的一个源端口标识、接收端的目的IP地址和接收端的一个目的端口标识。若采用同一发送端向同一接收端发送不同的TCP流,发送端会采用不同的源端口,向接收端的不同的目的端口来发送TCP数据包。也就是说,相同的发送端与相同的接收端传输不同的TCP流时,发送端的源端口标识和接收端的目的端口标识会发生变化。根据上述描述,可以知道每一个TCP流唯一对应一组TCP数据包的四元组。
由于同一TCP流不仅包括发送端向接收端发送的请求流,还包括接收端向发送端返回的响应流。这样,请求流中的TCP数据包中的发送端的源IP地址和源端口标识,可以作为响应流中的TCP数据包中的目的IP地址和目的端口标识;对应地,请求流中的TCP数据包中的接收端的目的IP地址和目的端口标识,可以作为响应流中的TCP数据包中的源IP地址和源端口标识。这样,根据各TCP数据包的四元组信息,可以将获取的所有TCP数据包归为不同的TCP流,同一TCP流的所有TCP数据包具有相同的四元组信息,这里的四元组信息中,源IP地址和目的IP地址可以互换;源端口标识和目的端口标识可以互换。
例如,该步骤101具体可以包括如下步骤:
(a1)、根据各TCP数据包的四元组信息,计算对应的TCP数据包的哈希值,使得四元组信息相同的TCP数据包具有相同的哈希值;
(b1)、将所有TCP数据包中哈希值相同的TCP数据包归为同一TCP流的TCP数据包,得到各TCP流中的多个TCP数据包。
本实施例中,每一组四元组信息中的4个参数如源IP地址、源端口标识、目的IP地址和目标端口标识都可以唯一计算出一个哈希值。即使源IP地址和目的IP地址互换、源端口标识和目标端口标识互换,四元组信息中的4个参数仍然没有发生变化,所以对应的哈希值仍然没有发生变化。所以,同一TCP流中的发送方向上的各TCP数据包的四元组信息和响应方向上的各TCP数据包的四元组信息对应的是同一个哈希值;即同一TCP流唯一对应一个哈希值。这样,根据各TCP数据包的哈希值,将哈希值相同的所有TCP数据包归为一组,对应一个TCP流;最终得到多组TCP数据包,每一组TCP数据包中包括多个TCP数据包,对应一个TCP流。
102、根据各TCP流中的各TCP数据包的四元组信息以及各TCP数据包的属性信息,将各TCP流中的多个TCP数据包按照发送顺序重组;
由于TCP数据包在传输过程种会乱序,从路由节点捕获的多个TCP数据包无法直接按照传输的时间还原发送的原始数据,进而便于对原始数据进行分析。因此,本实施例中需要对各TCP流包括的所有TCP数据包按照发送顺序重组。由于完整的TCP流才能够还原原始数据。且在一个完整的TCP流中,该TCP流中的多个TCP数据包中必然包括握手包和结束包;握手包对应的TCP数据包的属性信息中会标识该TCP数据包为握手包,握手包中包括该TCP流的初始化信息。同理,结束包对应的TCP数据包的属性信息中也会标识该TCP数据包为结束包。同一TCP流的每个TCP数据包的属性信息中还会标识有该TCP数据包的序列标识,且发送端在发送同一TCP流的多个连续的TCP数据包时,按照从小到达的顺序为多个连续的TCP数据包设置序列标识,即握手包对应的序列标识最小,结束包对应的序列标识最大。位于最小序列标识和最大序列标识之间的序列标识对应的TCP数据包包含应用层数据。对于各TCP流中的多个TCP数据包,可以根据上述的握手包的标识、结束包的标识以及发送端发送的多个连续TCP数据包的序列标识应该按照从小到大的顺序排列,可以将各TCP流中的多个TCP数据包按照发送顺序重组。该步骤也可以简称为TCP流的重组处理。
例如,该步骤102,具体可以包括如下步骤:
(a2)、根据同一TCP流中的各TCP数据包的四元组信息,将TCP流中的多个TCP数据包分为发送方向上的多个TCP数据包和响应方向上的多个TCP数据包;
同一TCP流包括发送方向上的TCP流和响应方向上的TCP流,例如,若发送方向上的TCP流中的各TCP数据包的四元组信息中源IP地址为A、源端口标识为1,目的IP地址为B、目的端口标识为2;则对应的响应方向上的TCP流中的各TCP数据包的四元组信息中源IP地址为B、源端口标识为2,目的IP地址为A、目的端口标识为1。因此,根据同一TCP流中的各TCP数据包的四元组信息,可以将TCP流中的多个TCP数据包分为发送方向上的多个TCP数据包和响应方向上的多个TCP数据包。
(b2)、从发送方向上的多个TCP数据包中获取作为第一握手包的TCP数据包、作为第一结束包的TCP数据包;
(c2)、根据发送方向上的各TCP数据包的序列标识、以及作为握手包的TCP数据包和作为结束包的TCP数据包,对TCP流中的发送方向上的多个TCP数据包按照发送顺序进行重组;
(d2)、从响应方向上的多个TCP数据包中获取作为第二握手包的TCP数据包、作为第二结束包的TCP数据包;
(e2)、根据响应方向上的各TCP数据包的序列标识、以及作为第二握手包的TCP数据包和作为第二结束包的TCP数据包,对TCP流中的响应方向上的多个TCP数据包按照反馈顺序进行重组。
步骤(b2)和(c2)对TCP流中的发送方向上的多个TCP数据包按照发送顺序进行重组。具体地,先从发送方向上的多个TCP数据包中获取作为第一握手包的TCP数据包,并获取作为第一结束包的TCP数据包;然后按照发送方向上的各TCP数据包的序列标识应该按照从小到达的顺序排列,可以将TCP流中的发送方向上的多个TCP数据包按照发送顺序进行重组。例如,重组时,可以分别为发送端(如client)和接收端(如server)的应用层数据建立缓存(buffer)。例如根据该TCP流的四元组,将TCP流中的源IP地址为A、源端口标识为1,目的IP地址为B、目的端口标识为2对应的多个TCP数据包作为发送方向上的TCP数据包,放在client的buffer中。而将TCP流中的源IP地址为B、源端口标识为2,目的IP地址为A、目的端口标识为1对应的多个TCP数据包作为响应方向上的TCP数据包,放在serve的buffer中。由于数据包可能乱序到达,并且在离线情况下,client和server数据到达的相对顺序也可能乱序,所以在建立buffer时,根据TCP流中的发送方向上的多个TCP数据包中各TCP的序列号分别为client端和server端拼接应用层数据。
步骤(d2)和(e2)对TCP流中的响应方向上的多个TCP数据包按照发送顺序进行重组,实现同理,在此不再赘述。
103、将各TCP流的重组后的多个TCP数据包按照HTTP流进行重组。
经过上述对TCP流的重组,可以将每一TCP流的所有TCP数据包按照发送顺序重组。由于同一TCP流中可以包括多个HTTP流,每个HTTP流中包括的多个TCP数据包可以还原一个大的数据包;各个HTTP流对应的大的数据包构成一个数据流。因此本实施例中,还需要在同一TCP流中的重组后的多个TCP数据包中按照HTTP流进行重组。例如,在实际应用中,发送端向接收端发送一个包括5个数据的数据序列,该数据序列对应一个TCP流,在发送过程中,假如每个数据可以被拆分成3个TCP数据包,每个数据对应的3个TCP数据包为一个HTTP流。这样,整个数据序列对应的TCP流中包括15个TCP数据包,15个TCP数据包可以被划分为5个HTTP流,每个HTTP流对应一个数据。反过来,接收端向发送端返回的响应TCP数据包同理,不再赘述。该步骤也可以简称为HTTP流的重组处理。
例如,该步骤103,具体可以包括如下步骤:确定同一TCP流中、发送方向上重组的多个TCP数据包以及响应方向上重组的多个TCP数据包中的每个HTTP流的边界;根据对应的TCP流中的各HTTP流的边界,对TCP流中的多个TCP数据包按照HTTP流进行重组。
在各TCP流中,重组后的多个TCP包是按照原始发送顺序排列的,但每个TCP数据包都是一个数据的部分分片,哪几个TCP数据包属于同一个HTTP流,可以还原为一个整体的数据并不得而知,该步骤即主要用于实现对TCP流中重组后的多个TCP数据包中的HTTP流的边界确定,从而便于实现HTTP流的重组。
例如,图2为本发明实施例提供的一种TCP流的示意图。如图2所示,上一行的TCP流为client→server的TCP流,可以称之为请求流。下一行的TCP流为server→client的TCP流,可以称之为响应流。如图2所示,可以知道,本实施例的TCP流中包括3个HTTP流,每个HTTP流可以包括上一行的一个HTTP流请求包和下一行对应位置的一个HTTP流响应包。如图2中的上一行所示,每个HTTP流请求包中可以包括多个分片的TCP数据包(图2中简称为TCP包),可以共同还原为一个整体的请求数据。如图2中的下一行所示,每个HTTP流响应包中也可以包括多个分片的TCP数据包,可以共同还原为一个整体的响应数据。如图2所示,在HTTP流重组时,首先主要需要确定图2中的HTTP流1请求包、HTTP流2请求包、HTTP流3请求包、HTTP流1响应包、HTTP流2响应包、HTTP流2响应包的边界。
由于发送请求和请求响应是对应的,所以,在TCP流的发送方向上的HTTP流的数量和TCP流的响应方向上的HTTP流的数量是相同的,可以按照先后顺序,将HTTP流请求包和对应的HTTP流响应包拼接在一起,得到TCP流中的各个HTTP流。
例如,图3为本发明实施例提供的一种HTTP流的重组示意图。如图3所示,第1行为HTTP流边界识别后的得到的发送方向上的TCP流可以包括request_1、request_2和request_3共3个HTTP流。第2行为HTTP流边界识别后的得到的响应方向上的TCP流可以包括response_1、response_2和response_3共3个HTTP流。根据TCP流中的各HTTP流的边界,对TCP流中的多个TCP数据包按照HTTP流进行重组时,可以将request_1和response_1拼接、request_2和response_2拼接以及request_3和response_3拼接,从而得到图3中第3行所示的HTTP流重组后的结果,即为本实施例的数据包重组后的最终结果。
可选地,步骤103“将各TCP流的重组后的多个TCP数据包按照HTTP流进行重组”之前,还可以包括判断TCP流是否属于HTTP协议,若属于,则进一步进行HTTP流的重组,否则直接丢弃,不做任何处理。
例如,本实施例中“确定同一TCP流中、发送方向上重组的多个TCP数据包以及响应方向上重组的多个TCP数据包中的每个HTTP流的边界”,具体可以包括如下步骤:
(a3)、判断各TCP流中响应方向上重组的多个TCP数据包中是否包括响应状态码为1xx/204/304,若包括,执行将该TCP数据包作为HTTP流的边界;否则执行步骤(b3);
HTTP流中的多个TCP数据包中的头部TCP数据包可以具有一些明显的特征,从而可以利用头部TCP数据包的明显特征实现HTTP流的前边界的确定,下一个HTTP流的前边界便是前一个HTTP流的后边界。例如,在响应方向上的HTTP流的请求包中的头部TCP数据包,可以标识有响应状态码1xx、204或者304时,此时可以确定该TCP数据包为一个HTTP响应流的头部TCP数据包,此时对应的HTTP流的body部分的消息体长度为0,可以将该TCP数据包作为一个HTTP响应流的前边界,同时由于HTTP流的body部分的消息体长度为0,所以可以同时确定当前HTTP流的后边界。这样,按照类似的方法可以得到发送方向上的每个HTTP响应流的边界。该步骤(a3)的技术方案仅适用于TCP流的响应方向上的HTTP流的边界的确定。对于TCP流中的发送方向上的HTTP流的确定,可以下述步骤来实现。
(b3)、判断各TCP流中、发送方向上重组的多个TCP数据包以及响应方向上重组的多个TCP数据包中是否使用了非“identity”的编码方式(Transfer-Encoding),若是,则获取由“chunked”决定的消息体长度,并根据消息体长度确定HTTP流的边界;否则执行步骤(c3);
该方式通过HTTP流的消息体的长度来实现HTTP流边界的确定。具体地,可以先判断该TCP流中是否标识有非“identity”的Transfer-Encoding的TCP数据包,若有,则可以确定该HTTP流的消息体长度由“chunked”,获取该消息体长度。以标识有非“identity”的Transfer-Encoding的TCP数据包,作为HTPP流的开头,根据HTTP流的body部分的消息体的长度,从前往后截取对应消息体长度的TCP数据包,可以确定HTTP流的后边界,从而得到一个完整的HTTP流。
(c3)、判断各TCP流中、发送方向上重组的多个TCP数据包以及响应方向上重组的多个TCP数据包中是否存在“Content-Length”实体头,若存在,获取实体头作为消息体长度,并根据消息体长度确定HTTP流的边界;否则执行步骤(d3);
同(b3)类似,该种方式中也通过HTTP流的消息体的长度来实现HTTP流边界的确定,与步骤(b3)不同的是,该种实现方式中,是通过判断TCP流中是否存在“Content-Length”实体头的TCP数据包,若存在,该实体头可以作为HTTP流的消息体长度,然后以“Content-Length”实体头的TCP数据包作为HTTP流的开头,从前向后截取对应消息体长度的TCP数据包,可以确定HTTP流的后边界,从而得到一个完整的HTTP流。
(d3)、判断各TCP流中响应方向上重组后的最后一个TCP数据包中是否使用关闭连接方式代表消息体结束,若是,则确定最后一个HTTP流的边界。
该种实现方式,仅适用于对TCP流中的最后一个HTTP流进行处理,具体地,TCP流的最后一个HTTP流为响应方向上的最后一个HTTP流。若该TCP流中的最后一个HTTP流中没有定义消息体长度,则可以判断重组后的最后一个TCP数据包是否使用关闭连接方式代表消息体结束,若是,则确定该TCP数据包为最后一个HTTP流的后边界,以保证最后一个HTTP流的完整性,对应的原始数据能够被还原。
经过上述步骤(a3)-(d3)的处理,可以实现对TCP流中的所有HTPP流的边界的确定。
需要说明的是,本实施例中以递进的方式包括上述步骤(a3)-(d3)中至少一种方式来确定TCP流中的各个HTTP流的边界。实际应用中,(a3)-(d3)的四个步骤中也可以采用其他递进顺序来实现,在此不再一一举例赘述。
本实施例的数据包的重组方法,通过从网络的路由节点中获取预设时间周期内的所有TCP数据包;根据各TCP数据包的四元组信息,获取各TCP流中的多个TCP数据包;该四元组信息包括源端口标识、目的端口标识、源IP地址和目的IP地址;根据各TCP流中的各TCP数据包的四元组信息以及各TCP数据包的属性信息,将各TCP流中的多个TCP数据包按照发送顺序重组;将各TCP流的重组后的多个TCP数据包按照HTTP流进行重组。本实施例的技术方案可以对于任意形式的TCP流中的数据包进行重组,使用方式非常灵活,能够适用于非常多的场景中,实用性非常强。且本实施例的技术方案,可以实现离线条件下的TCP流中的TCP数据包的重组,解决TCP流中TCP数据包乱序的问题;而且可以实现TCP长短连接条件下,HTTP流的完整还原与匹配,从而可以有效地保证重组后的数据包能够准确还原原始数据。
图4为本发明的本发明的数据包的重组方法实施例二的流程图。如图4所示,本实施例的数据包的重组方法在上述图1所示实施例的基础上,进一步更加详细地介绍本发明的技术方案。如图4所示,本实施例的数据包的重组方法,具体可以包括如下步骤:
200、从网络的路由节点中获取预设时间周期内的所有TCP数据包;
201、根据各TCP数据包的四元组信息,计算对应的TCP数据包的哈希值,使得四元组信息相同的TCP数据包具有相同的哈希值;
202、将所有TCP数据包中哈希值相同的TCP数据包归为同一TCP流的TCP数据包,得到各TCP流中的多个TCP数据包;
步骤200-202可以参考上述图1所示实施例的相关记载,在此不再赘述。
203、根据各TCP流的哈希值、预设的数个重组执行单元的标识以及预设的重组执行单元的选取策略,确定各TCP流对应的重组执行单元的标识;
本实施例中可以预先设置数个重组执行单元,也可以称之为worker单元,来执行各TCP流的数据包重组。如果TCP流较少时,每个重组执行单元可以执行一个TCP流的数据包重组,而若TCP较多的时候,每个重组执行单元可以执行多个TCP流的数据包重组,以均衡各个重组执行单元的负载,提高整体的重组效率。
例如,若重组执行单元有100个,TCP流有600个时,可以将每个TCP流的标识对100求余,并根据求余结果为该TCP流分配对应的重组执行单元。例如求余等于1的TCP流都由第1个重组执行单元处理,求余等于2的TCP流都由第2个重组执行单元处理,依次类推,求余等于n的TCP流都由第n个重组执行单元处理,求余等于0的TCP流都由第100个重组执行单元处理。或者也可以采用其他的重组执行单元的选取策略,例如,TCP流中的第一组的6个TCP流由第1个重组执行单元处理,第2组的6个TCP流由第2个重组执行单元处理,以此类推,直到第100组的6个TCP流由第100个重组执行单元处理。或者实际应用中也可以采用其他的重组执行单元的选取策略方式,实现确定各TCP流对应的重组执行单元,只要重组执行单元的选取策略能够均衡各重组执行单元的负载即可。
204、根据各TCP流对应的重组执行单元的标识,控制对应的重组执行单元根据对应的TCP流中的各TCP数据包的四元组信息以及各TCP数据包的属性信息,将对应的TCP流中的多个TCP数据包按照发送顺序进行重组;
本实施例与上述图1所示实施例的区别在于:上述图1所示实施例中的所有重组处理由数据包的重组装置来执行。而本实施例中,可以预先设置有多个重组执行单元,在重组处理时,可以按照各TCP流对应的哈希值为该TCP流分配重组执行单元,以由该重组执行单元执行该TCP流中的TCP数据包的重组。具体地重组执行单元实现的TCP流的重组过程,可以参考上述图1所示实施例中的数据包的重组装置执行的TCP流的重组过程,在此不再赘述。
205、根据各TCP流对应的重组执行单元的标识,控制对应的重组执行单元将对应的TCP流的重组后的多个TCP数据包按照HTTP流进行重组。
对应地,在重组执行单元执行完TCP流的重组后,还继续执行该TCP流的重组后的多个TCP数据包的HTTP流的重组。重组执行单元执行HTTP流的重组过程,可以参考上述图1所示实施例中的数据包的重组装置执行的HTTP流的重组过程,在此不再赘述。
与上述图1所示实施例相比,本实施例可以将各个TCP流分配给多个重组执行单元来处理,可以有效地提高数据包的重组装置的并发度,有效地缩短所有TCP流的重组时间,提高重组效率。
本实施例的数据包的重组方法,通过采用上述技术方案可以对于任意形式的TCP流中的数据包进行重组,使用方式非常灵活,能够适用于非常多的场景中,实用性非常强。且本实施例的技术方案,可以保证重组后的数据包能够准确还原原始数据,数据包重组的准确性以及效率都非常高。
图5为本发明的数据包的重组装置实施例一的结构图。如图5所示,本实施例的数据包的重组装置,具体可以包括:
获取模块10用于从网络的路由节点中获取预设时间周期内的所有TCP数据包;
获取模块10还用于根据各TCP数据包的四元组信息,获取各TCP流中的多个TCP数据包;四元组信息包括源端口标识、目的端口标识、源IP地址和目的IP地址;
TCP流重组模块11用于根据获取模块10获取的各TCP流中的各TCP数据包的四元组信息以及各TCP数据包的属性信息,将各TCP流中的多个TCP数据包按照发送顺序重组;
HTPP流重组模块12用于将TCP流重组模块11处理后的各TCP流的重组后的多个TCP数据包按照HTTP流进行重组。
例如,本实施例的数据包的重组装置中,获取模块10具体用于:
根据各TCP数据包的四元组信息,计算对应的TCP数据包的哈希值,使得四元组信息相同的TCP数据包具有相同的哈希值;
将所有TCP数据包中哈希值相同的TCP数据包归为同一TCP流的TCP数据包,得到各TCP流中的多个TCP数据包。
进一步可选地,本实施例的数据包的重组装置中,TCP流重组模块11具体用于:
根据获取模块10获取的同一TCP流中的各TCP数据包的四元组信息,将TCP流中的多个TCP数据包分为发送方向上的多个TCP数据包和响应方向上的多个TCP数据包;
从发送方向上的多个TCP数据包中获取作为第一握手包的TCP数据包、作为第一结束包的TCP数据包;
根据发送方向上的各TCP数据包的序列标识、以及作为握手包的TCP数据包和作为结束包的TCP数据包,对TCP流中的发送方向上的多个TCP数据包按照发送顺序进行重组;
从响应方向上的多个TCP数据包中获取作为第二握手包的TCP数据包、作为第二结束包的TCP数据包;
根据响应方向上的各TCP数据包的序列标识、以及作为第二握手包的TCP数据包和作为第二结束包的TCP数据包,对TCP流中的响应方向上的多个TCP数据包按照反馈顺序进行重组。
进一步可选地,本实施例的数据包的重组装置中,HTPP流重组模块12具体用于:
确定TCP流重组模块11处理后得到的各TCP流中、发送方向上重组的多个TCP数据包以及响应方向上重组的多个TCP数据包中的每个HTTP流的边界;
根据对应的TCP流中的各HTTP流的边界,对TCP流中的多个TCP数据包按照HTTP流进行重组。
进一步可选地,本实施例的数据包的重组装置中,HTPP流重组模块12具体用于执行如下操作:
判断各TCP流中响应方向上重组的多个TCP数据包中是否包括响应状态码为1xx/204/304,若包括,将TCP数据包作为HTTP流的边界;
否则进一步判断各TCP流中、发送方向上重组的多个TCP数据包以及响应方向上重组的多个TCP数据包中是否使用了非“identity”的编码方式,若是,则获取由“chunked”决定的消息体长度,并根据消息体长度确定HTTP流的边界;
否则进一步判断各TCP流中、发送方向上重组的多个TCP数据包以及响应方向上重组的多个TCP数据包中是否存在“Content-Length”实体头,若存在,获取实体头作为消息体长度,并根据消息体长度确定HTTP流的边界;
否则进一步判断各TCP流中响应方向上重组后的最后一个TCP数据包中是否使用关闭连接方式代表消息体结束,若是,则确定HTTP流的边界。
本实施例的数据包的重组装置,通过采用上述模块实现数据包的重组的实现原理以及技术效果与上述相关方法实施例的实现相同,详细可以参考上述相关方法实施例的记载,在此不再赘述。
图6为本发明的数据包的重组装置实施例二的结构图。如图6所示,本实施例的数据包的重组装置,在上述图6所示实施例的技术方案的基础上,进一步更加详细地描述本发明的技术方案。
如图6所示,本实施例的数据包的重组装置中,TCP流重组模块11可以包括:确定单元111、控制单元112以及数个重组执行单元113;
确定单元111用于根据获取模块10获取的各TCP流的哈希值、预设的数个重组执行单元113的标识以及预设的重组执行单元113的选取策略,确定各TCP流对应的重组执行单元113的标识;
控制单元113用于根据各TCP流对应的重组执行单元113的标识,控制对应的重组执行单元113根据对应的TCP流中的各TCP数据包的四元组信息以及各TCP数据包的属性信息,将对应的TCP流中的多个TCP数据包按照发送顺序进行重组。
进一步可选地,本实施例的数据包的重组装置中,控制单元113控制对应的重组执行单元113根据对应的TCP流中的各TCP数据包的四元组信息以及各TCP数据包的属性信息,将对应的TCP流中的多个TCP数据包按照发送顺序进行重组之后,触发HTPP流重组模块12启动。HTPP流重组模块12具体用于在根据各TCP流对应的重组执行单元113的标识,控制对应的重组执行单元113将对应的TCP流的重组后的多个TCP数据包按照HTTP流进行重组。
本实施例的数据包的重组装置,通过采用上述模块实现数据包的重组的实现原理以及技术效果与上述相关方法实施例的实现相同,详细可以参考上述相关方法实施例的记载,在此不再赘述。
图7为本发明的计算机设备实施例的结构图。如图7所示,本实施例的计算机设备,包括:一个或多个处理器30,以及存储器40,存储器40用于存储一个或多个程序,当存储器40中存储的一个或多个程序被一个或多个处理器30执行,使得一个或多个处理器30实现如上图1-图4所示实施例的数据包的重组方法。图7所示实施例中以包括多个处理器30为例。
例如,图8为本发明提供的一种计算机设备的示例图。图8示出了适于用来实现本发明实施方式的示例性计算机设备12a的框图。图8显示的计算机设备12a仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,计算机设备12a以通用计算设备的形式表现。计算机设备12a的组件可以包括但不限于:一个或者多个处理器16a,系统存储器28a,连接不同系统组件(包括系统存储器28a和处理器16a)的总线18a。
总线18a表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机设备12a典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12a访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28a可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30a和/或高速缓存存储器32a。计算机设备12a可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34a可以用于读写不可移动的、非易失性磁介质(图8未显示,通常称为“硬盘驱动器”)。尽管图8中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18a相连。系统存储器28a可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明上述图1-图6各实施例的功能。
具有一组(至少一个)程序模块42a的程序/实用工具40a,可以存储在例如系统存储器28a中,这样的程序模块42a包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42a通常执行本发明所描述的上述图1-图6各实施例中的功能和/或方法。
计算机设备12a也可以与一个或多个外部设备14a(例如键盘、指向设备、显示器24a等)通信,还可与一个或者多个使得用户能与该计算机设备12a交互的设备通信,和/或与使得该计算机设备12a能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22a进行。并且,计算机设备12a还可以通过网络适配器20a与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20a通过总线18a与计算机设备12a的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备12a使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理器16a通过运行存储在系统存储器28a中的程序,从而执行各种功能应用以及数据处理,例如实现上述实施例所示的数据包的重组方法。
本发明还提供一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上述实施例所示的数据包的重组方法。
本实施例的计算机可读介质可以包括上述图8所示实施例中的系统存储器28a中的RAM30a、和/或高速缓存存储器32a、和/或存储系统34a。
随着科技的发展,计算机程序的传播途径不再受限于有形介质,还可以直接从网络下载,或者采用其他方式获取。因此,本实施例中的计算机可读介质不仅可以包括有形的介质,还可以包括无形的介质。
本实施例的计算机可读介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

Claims (16)

1.一种数据包的重组方法,其特征在于,所述方法包括:
采用DPDK,从网络的路由节点中获取预设时间周期内的所有TCP数据包,所述所有TCP数据包为离线数据包;
根据各所述TCP数据包的四元组信息,获取各TCP流中的多个所述TCP数据包;所述四元组信息包括源端口标识、目的端口标识、源IP地址和目的IP地址;所述各TCP流被并发执行,对应各TCP流执行:根据各所述TCP流中的各所述TCP数据包的所述四元组信息以及各所述TCP数据包的属性信息,将各所述TCP流中的多个所述TCP数据包按照发送顺序重组;
将各所述TCP流的重组后的多个所述TCP数据包按照HTTP流进行重组。
2.根据权利要求1所述的方法,其特征在于,根据各所述TCP数据包的四元组信息,获取各TCP流中的多个所述TCP数据包,具体包括:
根据各所述TCP数据包的四元组信息,计算对应的所述TCP数据包的哈希值,使得所述四元组信息相同的所述TCP数据包具有相同的所述哈希值;
将所述所有TCP数据包中所述哈希值相同的所述TCP数据包归为同一所述TCP流的所述TCP数据包,得到各TCP流中的多个所述TCP数据包。
3.根据权利要求1或2所述的方法,其特征在于,根据各所述TCP流中的各所述TCP数据包的所述四元组信息以及各所述TCP数据包的属性信息,将各所述TCP流中的多个所述TCP数据包按照发送顺序重组,具体包括:
根据同一所述TCP流中的各所述TCP数据包的所述四元组信息,将所述TCP流中的多个所述TCP数据包分为发送方向上的多个所述TCP数据包和响应方向上的多个所述TCP数据包;
从所述发送方向上的多个所述TCP数据包中获取作为第一握手包的所述TCP数据包、作为第一结束包的所述TCP数据包;
根据所述发送方向上的各所述TCP数据包的序列标识、以及作为所述握手包的所述TCP数据包和作为所述结束包的所述TCP数据包,对所述TCP流中的所述发送方向上的多个所述TCP数据包按照发送顺序进行重组;
从所述响应方向上的多个所述TCP数据包中获取作为第二握手包的所述TCP数据包、作为第二结束包的所述TCP数据包;
根据所述响应方向上的各所述TCP数据包的序列标识、以及作为所述第二握手包的所述TCP数据包和作为所述第二结束包的所述TCP数据包,对所述TCP流中的所述响应方向上的多个所述TCP数据包按照反馈顺序进行重组。
4.根据权利要求3所述的方法,其特征在于,将各所述TCP流中的多个所述TCP数据包按照HTTP流进行重组,具体包括:
确定各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中的每个所述HTTP流的边界;
根据对应的所述TCP流中的各所述HTTP流的边界,对所述TCP流中的多个所述TCP数据包按照HTTP流进行重组。
5.根据权利要求4所述的方法,其特征在于,确定各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中的每个所述HTTP流的边界,具体包括如下:
判断各所述TCP流中所述响应方向上重组的多个所述TCP数据包中是否包括响应状态码为1xx/204/304,若包括,将所述TCP数据包作为所述HTTP流的边界;
否则进一步判断各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中是否使用了非“identity”的编码方式,若是,则获取由“chunked”决定的消息体长度,并根据所述消息体长度确定所述HTTP流的边界;
否则进一步判断各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中是否存在“Content-Length”实体头,若存在,获取所述实体头作为消息体长度,并根据所述消息体长度确定所述HTTP流的边界;
否则进一步判断各所述TCP流中所述响应方向上重组后的最后一个所述TCP数据包中是否使用关闭连接方式代表消息体结束,若是,则确定所述HTTP流的边界。
6.根据权利要求2所述的方法,其特征在于,根据各所述TCP流中的各所述TCP数据包的所述四元组信息以及各所述TCP数据包的属性信息,将各所述TCP流中的多个所述TCP数据包按照发送顺序重组,具体包括:
根据各所述TCP流的所述哈希值、预设的数个重组执行单元的标识以及预设的重组执行单元的选取策略,确定各所述TCP流对应的所述重组执行单元的标识;
根据各所述TCP流对应的所述重组执行单元的标识,控制对应的所述重组执行单元根据对应的所述TCP流中的各所述TCP数据包的所述四元组信息以及各所述TCP数据包的属性信息,将对应的所述TCP流中的多个所述TCP数据包按照发送顺序进行重组。
7.根据权利要求6所述的方法,其特征在于,将各所述TCP流中的多个所述TCP数据包按照HTTP流进行重组,具体包括:
根据各所述TCP流对应的所述重组执行单元的标识,控制对应的所述重组执行单元将对应的所述TCP流的重组后的多个所述TCP数据包按照HTTP流进行重组。
8.一种数据包的重组装置,其特征在于,所述装置包括:
获取模块,用于采用DPDK,从网络的路由节点中获取预设时间周期内的所有TCP数据包,所述所有TCP数据包为离线数据包;
所述获取模块,还用于根据各所述TCP数据包的四元组信息,获取各TCP流中的多个所述TCP数据包;所述四元组信息包括源端口标识、目的端口标识、源IP地址和目的IP地址;所述各TCP流被并发执行,对应各TCP流采用下述模块执行;
TCP流重组模块,用于根据各所述TCP流中的各所述TCP数据包的所述四元组信息以及各所述TCP数据包的属性信息,将各所述TCP流中的多个所述TCP数据包按照发送顺序重组;
HTPP流重组模块,用于将各所述TCP流的重组后的多个所述TCP数据包按照HTTP流进行重组。
9.根据权利要求8所述的装置,其特征在于,所述获取模块,具体用于:
根据各所述TCP数据包的四元组信息,计算对应的所述TCP数据包的哈希值,使得所述四元组信息相同的所述TCP数据包具有相同的所述哈希值;
将所述所有TCP数据包中所述哈希值相同的所述TCP数据包归为同一所述TCP流的所述TCP数据包,得到各TCP流中的多个所述TCP数据包。
10.根据权利要求8或9所述的装置,其特征在于,所述TCP流重组模块,具体用于:
根据同一所述TCP流中的各所述TCP数据包的所述四元组信息,将所述TCP流中的多个所述TCP数据包分为发送方向上的多个所述TCP数据包和响应方向上的多个所述TCP数据包;
从所述发送方向上的多个所述TCP数据包中获取作为第一握手包的所述TCP数据包、作为第一结束包的所述TCP数据包;
根据所述发送方向上的各所述TCP数据包的序列标识、以及作为所述握手包的所述TCP数据包和作为所述结束包的所述TCP数据包,对所述TCP流中的所述发送方向上的多个所述TCP数据包按照发送顺序进行重组;
从所述响应方向上的多个所述TCP数据包中获取作为第二握手包的所述TCP数据包、作为第二结束包的所述TCP数据包;
根据所述响应方向上的各所述TCP数据包的序列标识、以及作为所述第二握手包的所述TCP数据包和作为所述第二结束包的所述TCP数据包,对所述TCP流中的所述响应方向上的多个所述TCP数据包按照反馈顺序进行重组。
11.根据权利要求10所述的装置,其特征在于,所述HTPP流重组模块,具体用于:
确定各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中的每个所述HTTP流的边界;
根据对应的所述TCP流中的各所述HTTP流的边界,对所述TCP流中的多个所述TCP数据包按照HTTP流进行重组。
12.根据权利要求11所述的装置,其特征在于,所述HTPP流重组模块,具体用于执行如下操作:
判断各所述TCP流中所述响应方向上重组的多个所述TCP数据包中是否包括响应状态码为1xx/204/304,若包括,将所述TCP数据包作为所述HTTP流的边界;
否则进一步判断各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中是否使用了非“identity”的编码方式,若是,则获取由“chunked”决定的消息体长度,并根据所述消息体长度确定所述HTTP流的边界;
否则进一步判断各所述TCP流中、所述发送方向上重组的多个所述TCP数据包以及所述响应方向上重组的多个所述TCP数据包中是否存在“Content-Length”实体头,若存在,获取所述实体头作为消息体长度,并根据所述消息体长度确定所述HTTP流的边界;
否则进一步判断各所述TCP流中所述响应方向上重组后的最后一个所述TCP数据包中是否使用关闭连接方式代表消息体结束,若是,则确定所述HTTP流的边界。
13.根据权利要求9所述的装置,其特征在于,所述TCP流重组模块包括:确定单元、控制单元以及数个重组执行单元;
所述确定单元,用于根据各所述TCP流的所述哈希值、预设的数个重组执行单元的标识以及预设的重组执行单元的选取策略,确定各所述TCP流对应的所述重组执行单元的标识;
所述控制单元,用于根据各所述TCP流对应的所述重组执行单元的标识,控制对应的所述重组执行单元根据对应的所述TCP流中的各所述TCP数据包的所述四元组信息以及各所述TCP数据包的属性信息,将对应的所述TCP流中的多个所述TCP数据包按照发送顺序进行重组。
14.根据权利要求13所述的装置,其特征在于,所述HTPP流重组模块,具体用于:
根据各所述TCP流对应的所述重组执行单元的标识,控制对应的所述重组执行单元将对应的所述TCP流的重组后的多个所述TCP数据包按照HTTP流进行重组。
15.一种计算机设备,其特征在于,所述设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的方法。
16.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的方法。
CN201711364418.0A 2017-12-18 2017-12-18 数据包的重组方法及装置、计算机设备及可读介质 Active CN108011850B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711364418.0A CN108011850B (zh) 2017-12-18 2017-12-18 数据包的重组方法及装置、计算机设备及可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711364418.0A CN108011850B (zh) 2017-12-18 2017-12-18 数据包的重组方法及装置、计算机设备及可读介质

Publications (2)

Publication Number Publication Date
CN108011850A CN108011850A (zh) 2018-05-08
CN108011850B true CN108011850B (zh) 2021-08-17

Family

ID=62059558

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711364418.0A Active CN108011850B (zh) 2017-12-18 2017-12-18 数据包的重组方法及装置、计算机设备及可读介质

Country Status (1)

Country Link
CN (1) CN108011850B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109600379B (zh) * 2018-12-19 2021-08-17 锐捷网络股份有限公司 Https重定向的降噪方法及装置
CN112583936B (zh) * 2020-12-29 2022-09-09 上海阅维科技股份有限公司 重组传输会话流的方法
CN113438176B (zh) * 2021-05-17 2022-08-23 翱捷科技股份有限公司 一种处理分片ip数据包的方法及装置
CN113297577B (zh) * 2021-06-16 2024-05-28 深信服科技股份有限公司 一种请求处理方法、装置、电子设备及可读存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101247395A (zh) * 2008-03-13 2008-08-20 武汉理工大学 一种Session ID全透明传递的ISAPI访问控制系统
CN101795230A (zh) * 2010-02-23 2010-08-04 西安交通大学 一种网络流量还原方法
CN103888449A (zh) * 2014-03-05 2014-06-25 亿赞普(北京)科技有限公司 一种报文重组方法和装置
WO2014173521A1 (en) * 2013-04-23 2014-10-30 Gurulogic Microsystems Oy Two-way real-time communication system utilizing http
CN206498428U (zh) * 2016-11-11 2017-09-15 中华通信系统有限责任公司 基于tcp重组的审计系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101247395A (zh) * 2008-03-13 2008-08-20 武汉理工大学 一种Session ID全透明传递的ISAPI访问控制系统
CN101795230A (zh) * 2010-02-23 2010-08-04 西安交通大学 一种网络流量还原方法
WO2014173521A1 (en) * 2013-04-23 2014-10-30 Gurulogic Microsystems Oy Two-way real-time communication system utilizing http
CN103888449A (zh) * 2014-03-05 2014-06-25 亿赞普(北京)科技有限公司 一种报文重组方法和装置
CN206498428U (zh) * 2016-11-11 2017-09-15 中华通信系统有限责任公司 基于tcp重组的审计系统

Also Published As

Publication number Publication date
CN108011850A (zh) 2018-05-08

Similar Documents

Publication Publication Date Title
US10862871B2 (en) Hardware-accelerated payload filtering in secure communication
CN108011850B (zh) 数据包的重组方法及装置、计算机设备及可读介质
CN107911237B (zh) 一种基于dpdk的用户空间内数据包快速检测方法
US9356844B2 (en) Efficient application recognition in network traffic
US10284460B1 (en) Network packet tracing
CN110719215B (zh) 虚拟网络的流信息采集方法及装置
CN104021069A (zh) 基于分布式虚拟机系统的软件性能测试的管理方法和系统
CN114153778A (zh) 跨网络桥接
CN113574841A (zh) 一种信息处理方法及装置、设备、存储介质
US8948020B2 (en) Detecting and isolating dropped or out-of-order packets in communication networks
CN110545230B (zh) 用于转发vxlan报文的方法和装置
US11487442B1 (en) Data storage interface for protocol-agnostic storage services
KR101880705B1 (ko) 인터넷을 이용하여 장치정보를 수집하는 시스템 및 그 방법
CN108460044B (zh) 数据的处理方法和装置
EP3767882A1 (en) Network traffic monitoring device
CN115361455B (zh) 一种数据传输存储方法、装置以及计算机设备
CN108289117B (zh) 一种基于fpga的多方接入系统及处理方法
CN105610639A (zh) 全量日志抓取方法及装置
CN114828140A (zh) 业务流量报文转发方法及装置、存储介质及电子设备
US10623338B2 (en) Information processing device, information processing method and non-transitory computer-readable storage medium
CN113422699A (zh) 数据流处理方法、装置、计算机可读存储介质及电子设备
Get’man et al. Data representation model for in-depth analysis of network traffic
CN116318808A (zh) 一种http业务侧的拟态裁决方法、装置、设备及介质
US11709607B2 (en) Storage block address list entry transform architecture
CN117255096A (zh) 在交换机上实现区块链系统的方法、电子设备和程序产品

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant