掌桥专利:专业的专利平台
掌桥专利
首页

一种数据包检测处理方法与设备

文献发布时间:2023-06-19 11:45:49


一种数据包检测处理方法与设备

技术领域

本申请涉及信息技术领域,尤其涉及一种数据包检测处理技术。

背景技术

随着互联网的迅猛发展,目前很多公司采用CDN(Content Delivery Network,内容分发网络)、高防IP、安全代理网关来加速访问,解决DDoS攻击和应用层安全的问题。在应用系统中采用这类技术时,客户端会通过代理服务器来访问业务,通过反向代理的形式将访问转发到后端源服务器。但此场景下,后端源服务器获取的客户端IP地址是代理服务器的地址,而无法获取到客户端的真实IP地址。这导致后端的一些依赖客户端真实IP的业务(如线上运营监控和业务评估)无法正常展开。

为获取客户端真实IP,现有的技术方案大致可分为两类:(1)在源服务器中安装内核插件,以钩子函数的形式处理TCP头部扩展字段,以此获取真实IP。(2)在源服务器中安装网络驱动,针对报文里的特殊字段建立哈希映射,后续查询映射关系获取真实IP。

现有技术方案的缺陷主要在于:(1)上述两类方案都需要在系统内核中安装内核插件或驱动,对内核插件和驱动的稳定性和兼容性要求非常高,且内核插件或驱动作用于系统全局,一旦出现问题,轻则不能正确获取真实IP,重则系统崩溃,影响面广。(2)上述两类方案都存在通用性不足的问题,只能运行在Windows或者Linux系统之上,无法同时支持两种系统。

发明内容

本申请的一个目的是提供一种数据包检测处理方法与设备。

根据本申请的一个方面,提供了一种数据包检测处理方法,其中,所述方法包括:

检测目标端口接收到的TCP数据包,其中,所述TCP数据包包括SYN数据包;

当所述目标端口接收到所述SYN数据包,解析所述SYN数据包得到它的源IP和端口以及客户端的真实IP和端口,将所述源IP和端口以及所述真实IP和端口作为键值对(key-value)存入哈希表,其中,所述源IP和端口作为关键字(key);

基于目标应用的调用指令,根据所述源IP和端口从所述哈希表中获取所述真实IP和端口。

根据本申请的另一个方面,还提供了一种数据包检测处理设备,其中,所述设备包括:

检测模块,用于检测目标端口接收到的TCP数据包,其中,所述TCP数据包包括SYN数据包;

存储模块,用于当所述目标端口接收到所述SYN数据包,解析所述SYN数据包得到它的源IP和端口以及客户端的真实IP和端口,将所述源IP和端口以及所述真实IP和端口作为键值对(key-value)存入哈希表,其中,所述源IP和端口作为关键字(key);

调用模块,用于基于目标应用的调用指令,根据所述源IP和端口从所述哈希表中获取所述真实IP和端口。

根据本申请的又一个方面,还提供了一种计算设备,其中,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行所述的数据包检测处理方法。

根据本申请的又一个方面,还提供了一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现所述的数据包检测处理方法。

本申请提供的方案中,检测目标端口接收到的TCP数据包,当所述目标端口接收到SYN类型的TCP数据包,解析所述SYN数据包得到它的源IP和端口以及客户端的真实IP和端口,将所述源IP和端口以及所述真实IP和端口分别作为关键字(key)和对应的值(value)存入哈希表中,然后基于目标应用的调用指令,根据所述源IP和端口从所述哈希表中获取所述客户端的真实IP和端口。与现有技术相比,本申请提供的技术方案操作简单,不需要修改服务端程序代码,完全运行在用户态,通用性强,稳定性好,同时支持Windows、Linux等系统。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其他特征、目的和优点将会变得更明显:

图1是根据本申请实施例的一种数据包检测处理方法流程图;

图2是一种TCP数据包格式示意图;

图3是根据本申请实施例的一种数据包检测处理系统结构图;

图4是根据本申请实施例的一种数据包检测处理设备示意图。

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的装置或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。

本申请实施例提供了数据包检测处理方法,以便于目标应用获取客户端真实IP,其中,所述客户端包括但不限于智能手机、平板电脑、个人计算机(PC)等终端设备。所述目标应用是运行于服务端(即为客户端提供服务)的应用程序,因业务(如线上运营监控和业务评估)需要,而获取客户端真实IP。该方法将获取客户端真实IP的过程完全放在用户态,应用层即可获取客户端真实IP,操作简单,不需要修改服务端程序代码,通用性强,稳定性好,同时支持Windows、Linux等系统。

在实际场景中,执行该方法的设备可以是用户设备、网络设备或者用户设备与网络设备通过网络相集成所构成的设备。其中,所述用户设备包括但不限于个人计算机(PC)等终端设备,所述网络设备包括但不限于网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。

图1是根据本申请实施例的一种数据包检测处理方法流程图,该方法包括步骤S101、步骤S102和步骤S103。

步骤S101,检测目标端口接收到的TCP数据包,其中,所述TCP数据包包括SYN数据包。

例如,所述TCP数据包即TCP报文,所述TCP数据包可以是图2所示的格式,由TCP头部和数据组成。所述TCP数据包的类型包括:SYN(表示建立连接)、FIN(表示关闭连接)、ACK(表示响应)、PSH(表示有数据传输)、RST(表示连接重置)。在建立TCP连接的三次握手中,客户端真实IP被放在SYN数据包中。

本方案可利用pcap工具包来实现。当然,本领域技术人员应能理解上述pcap工具包仅为举例,其他现有的或今后可能出现的技术如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

在一个实施例中,所述方法还包括:从若干个端口中过滤出所述目标应用开启的端口,将所述目标应用开启的端口作为所述目标端口。例如,若利用pcap工具包,因为pcap获取的数据包是系统全局的,需要根据目标应用的端口过滤出目标应用的数据包。具体地,可以开启一个端口监听线程,该线程可检测目标应用开启的所有端口,并将端口列表输出给pcap目标线程,以此作为过滤条件,只分析目标应用的数据包。

在一个实施例中,所述TCP数据包还包括FIN数据包和/或RST数据包。其中,所述FIN数据包表示关闭连接,所述RST数据包表示连接重置,根据这两种类型的数据包,可以知道TCP连接什么时候被关闭。

在一个实施例中,步骤S101包括:检测目标端口接收到的TCP数据包,过滤出所述SYN数据包或所述FIN数据包或所述RST数据包。例如,可以生成报文过滤规则,过滤出所述目标端口接收到的所述SYN数据包或所述FIN数据包或所述RST数据包,并对其进行处理。

在一个实施例中,所述方法还包括:初始化哈希表,用于存储键值对(key-value)。其中,该哈希表的关键字(key)为所述目标端口接收到的数据包的源IP和端口,该哈希表的值(value)为客户端真实IP和端口。其中,所述源IP和端口可能是代理服务器的IP和端口。例如,若采用CDN(Content Delivery Network,内容分发网络)、高防IP等技术方案,客户端会通过代理服务器来访问业务,所述目标端口接收到的数据包的源IP和端口即CDN或者高防IP的IP和端口。

步骤S102,当所述目标端口接收到所述SYN数据包,解析所述SYN数据包得到它的源IP和端口以及客户端的真实IP和端口,将所述源IP和端口以及所述真实IP和端口作为键值对(key-value)存入哈希表,其中,所述源IP和端口作为关键字(key)。

例如,如图2所示,客户端真实IP被放在所述SYN数据包的TCP头部的“选项”(options)字段中,可根据该字段解析出客户端真实IP。所述SYN数据包的源IP和端口也可以从该数据包的TCP头部的“源端口”(Source Port)字段中获取。

在具体的应用场景中,将所述客户端的真实IP和端口保存在哈希表中直到该客户端真实IP和端口对应的TCP连接被关闭或者半连接超时。当对应的TCP连接断开后,从所述哈希表中删除该TCP连接对应的键值对(key-value)。

在一个实施例中,所述方法还包括:当所述目标端口接收到所述FIN数据包或所述RST数据包,解析出所述FIN数据包或所述RST数据包的源IP和端口,根据所述源IP和端口从所述哈希表中删除对应的键值对。例如,当接收到所述FIN数据包或所述RST数据包时,说明对应的TCP连接断开,端口号可能被新的TCP连接使用,因此需要使所述哈希表中旧的key失效,根据所述FIN数据包或所述RST数据包解析出的源IP和端口生成key,从所述哈希表中删除对应的键值对(key-value)。

在一个实施例中,所述方法还包括:定期扫描所述哈希表,计算所述哈希表的各个关键字的缓冲时间,若超过所述缓冲时间,则从所述哈希表中删除对应的键值对。例如,当对应的TCP连接断开后,需要从所述哈希表中删除该TCP连接对应的键值对(key-value),但可能出现两种异常情况:(1)服务端只收到所述SYN数据包,TCP连接没有正确建立;(2)TCP连接可能会异常断开,也可能收不到所述FIN数据包或所述RST数据包。为应对这两种异常情况,可以设置一个定时器,定期扫描所述哈希表,计算各个key的缓冲时间,若超过所述缓冲时间,则从所述哈希表中删除对应的键值对,防止资源残留。

在一个实施例中,步骤S102还包括:当所述目标端口接收到所述SYN数据包,记录当前的时间戳,将所述时间戳存入所述哈希表。例如,以所述SYN数据包的源IP和端口作为关键字(key),存储所述客户端的真实IP和端口的同时,将所述时间戳一并存入所述哈希表。当TCP连接出现异常情况(例如TCP连接没有正确建立或者TCP连接异常断开)时,根据该时间戳,定时器线程可以确定什么时候清除所述哈希表中异常TCP连接对应的键值对。

步骤S103,基于目标应用的调用指令,根据所述源IP和端口从所述哈希表中获取所述真实IP和端口。

例如,所述调用指令包括调用getpeername函数,此函数在被所述目标应用调用时返回客户端的真实IP。具体地,所述目标应用调用getpeername函数,先获取到数据包的源IP和端口,根据此源IP和端口生成key,从所述哈希表中获取到value,即为所述客户端的真实IP和端口。

图3是根据本申请实施例的一种数据包检测处理系统结构图。在一个实施例中,如图3所示,往待获取客户端真实IP的服务端进程(如所述目标应用,如图3中的“上层网络服务”)中注入一段可执行代码,通过该段可执行代码可实现本申请的方法和/或技术方案。首先,通过该段可执行代码开启报文捕获线程(如图3中的pcap旁路线程),因为报文捕获是针对网卡的,但网卡工作在数据链路层,获取的数据包(即数据报文)是系统全局的,而本方案只需要分析特定服务进程(如所述目标应用)的数据包,因此需要根据所述目标应用的端口过滤出所述目标应用的数据包。具体地,可以开启一个端口监听线程,该线程可检测目标应用开启的所有端口,并将端口列表输出给pcap目标线程,以此作为过滤条件,只分析所述目标应用的数据包。在本实施例中,通过该段可执行代码可以生成报文过滤规则,过滤出所述目标端口接收到的所述SYN数据包/所述FIN数据包/所述RST数据包,并对其进行处理。而且通过该段可执行代码还可以初始化哈希表,用于存储键值对(key-value),其中,该哈希表的关键字(key)为所述目标端口接收到的数据包的源IP和端口,该哈希表的值(value)为客户端真实IP和端口。当所述目标端口接收到所述SYN数据包,根据所述SYN数据包的特定字段解析出客户端真实IP和端口,将所述客户端真实IP和端口作为value存入该哈希表,并将所述SYN数据包的源IP和端口作为所述哈希表中该value对应的关键字(key)。当所述目标端口接收到所述FIN数据包/所述RST数据包,解析出所述FIN数据包/所述RST数据包的源IP和端口,根据所述源IP和端口从所述哈希表中删除对应的键值对(key-value)。此外,通过该段可执行代码还可以设置一个定时器,定期扫描所述哈希表,计算各个key的缓冲时间,若超过所述缓冲时间,则从所述哈希表中删除对应的键值对(key-value)。当需要获取所述客户端真实IP时,所述目标应用调用getpeername函数,先获取到数据包的源IP和端口(例如高防IP或者CDN节点的IP和端口),根据此源IP和端口生成key,从所述哈希表中获取到value,即为所述客户端真实IP和端口。

图4是根据本申请实施例的一种数据包检测处理设备示意图,该设备包括检测模块401、存储模块402和调用模块403。

检测模块401,用于检测目标端口接收到的TCP数据包,其中,所述TCP数据包包括SYN数据包。

例如,所述TCP数据包即TCP报文,所述TCP数据包可以是图2所示的格式,由TCP头部和数据组成。所述TCP数据包的类型包括:SYN(表示建立连接)、FIN(表示关闭连接)、ACK(表示响应)、PSH(表示有数据传输)、RST(表示连接重置)。在建立TCP连接的三次握手中,客户端真实IP被放在SYN数据包中。

本方案可利用pcap工具包来实现。当然,本领域技术人员应能理解上述pcap工具包仅为举例,其他现有的或今后可能出现的技术如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

在一个实施例中,该设备从若干个端口中过滤出所述目标应用开启的端口,将所述目标应用开启的端口作为所述目标端口。例如,若利用pcap工具包,因为pcap获取的数据包是系统全局的,需要根据目标应用的端口过滤出目标应用的数据包。具体地,可以开启一个端口监听线程,该线程可检测目标应用开启的所有端口,并将端口列表输出给pcap目标线程,以此作为过滤条件,只分析目标应用的数据包。

在一个实施例中,所述TCP数据包还包括FIN数据包和/或RST数据包。其中,所述FIN数据包表示关闭连接,所述RST数据包表示连接重置,根据这两种类型的数据包,可以知道TCP连接什么时候被关闭。

在一个实施例中,检测模块401用于:检测目标端口接收到的TCP数据包,过滤出所述SYN数据包或所述FIN数据包或所述RST数据包。例如,可以生成报文过滤规则,过滤出所述目标端口接收到的所述SYN数据包或所述FIN数据包或所述RST数据包,并对其进行处理。

在一个实施例中,该设备初始化哈希表,用于存储键值对(key-value)。其中,该哈希表的关键字(key)为所述目标端口接收到的数据包的源IP和端口,该哈希表的值(value)为客户端真实IP和端口。其中,所述源IP和端口可能是代理服务器的IP和端口。例如,若采用CDN(Content Delivery Network,内容分发网络)、高防IP等技术方案,客户端会通过代理服务器来访问业务,所述目标端口接收到的数据包的源IP和端口即CDN或者高防IP的IP和端口。

存储模块402,用于当所述目标端口接收到所述SYN数据包,解析所述SYN数据包得到它的源IP和端口以及客户端的真实IP和端口,将所述源IP和端口以及所述真实IP和端口作为键值对(key-value)存入哈希表,其中,所述源IP和端口作为关键字(key)。

例如,如图2所示,客户端真实IP被放在所述SYN数据包的TCP头部的“选项”(options)字段中,可根据该字段解析出客户端真实IP。所述SYN数据包的源IP和端口也可以从该数据包的TCP头部的“源端口”(Source Port)字段中获取。

在具体的应用场景中,将所述客户端真实IP和端口保存在哈希表中直到该客户端真实IP和端口对应的TCP连接被关闭或者半连接超时。当对应的TCP连接断开后,从所述哈希表中删除该TCP连接对应的键值对(key-value)。

在一个实施例中,该设备当所述目标端口接收到所述FIN数据包或所述RST数据包,解析出所述FIN数据包或所述RST数据包的源IP和端口,根据所述源IP和端口从所述哈希表中删除对应的键值对。例如,当接收到所述FIN数据包或所述RST数据包时,说明对应的TCP连接断开,端口号可能被新的TCP连接使用,因此需要使所述哈希表中旧的key失效,根据所述FIN数据包或所述RST数据包解析出的源IP和端口生成key,从所述哈希表中删除对应的键值对(key-value)。

在一个实施例中,该设备定期扫描所述哈希表,计算所述哈希表的各个关键字的缓冲时间,若超过所述缓冲时间,则从所述哈希表中删除对应的键值对。例如,当对应的TCP连接断开后,需要从所述哈希表中删除该TCP连接对应的键值对(key-value),但可能出现两种异常情况:(1)服务端只收到所述SYN数据包,TCP连接没有正确建立;(2)TCP连接可能会异常断开,也可能收不到所述FIN数据包或所述RST数据包。为应对这两种异常情况,可以设置一个定时器,定期扫描所述哈希表,计算各个key的缓冲时间,若超过所述缓冲时间,则从所述哈希表中删除对应的键值对,防止资源残留。

在一个实施例中,存储模块402还用于:当所述目标端口接收到所述SYN数据包,记录当前的时间戳,将所述时间戳存入所述哈希表。例如,以所述SYN数据包的源IP和端口作为关键字(key),存储所述客户端的真实IP和端口的同时,将所述时间戳一并存入所述哈希表。当TCP连接出现异常情况(例如TCP连接没有正确建立或者TCP连接异常断开)时,根据该时间戳,定时器线程可以确定什么时候清除所述哈希表中异常TCP连接对应的键值对。

调用模块403,用于基于目标应用的调用指令,根据所述源IP和端口从所述哈希表中获取所述真实IP和端口。

例如,所述调用指令包括调用getpeername函数,此函数在被所述目标应用调用时返回客户端的真实IP。具体地,所述目标应用调用getpeername函数,先获取到数据包的源IP和端口,根据此源IP和端口生成key,从所述哈希表中获取到value,即为所述客户端的真实IP和端口。

综上所述,本申请实施例提供的方案在实现上可以以一个单独的进程提供,在服务端运行此进程时选定目标服务进程,即可实现客户端真实IP的获取。本方案实现简单,方便管理和维护。与现有的技术方案运行在内核态不同,本方案只需运行在用户态,稳定性更好。而且本方案对于数据包的分析在旁路进行,不需要对底层协议栈进行改造,对系统没有依赖性。故而,本方案的通用性更强,对Windows、Linux等操作系统均适用。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据程序指令运行的计算机设备的工作存储器中。在此,本申请的一些实施例提供了一种计算设备,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行前述本申请的多个实施例的方法和/或技术方案。

此外,本申请的一些实施例还提供了一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现前述本申请的多个实施例的方法和/或技术方案。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一些实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

相关技术
  • 一种数据包检测处理方法与设备
  • 一种数据包安全检测及处理方法、装置、P4交换机及介质
技术分类

06120113043296