异常数据包的检测方法及电子设备与流程

文档序号:26057086发布日期:2021-07-27 15:35阅读:189来源:国知局
异常数据包的检测方法及电子设备与流程

本申请涉及网络信息领域,特别涉及一种网络信息中的异常数据包的检测方法及电子设备。



背景技术:

icmp(internetcontrolmessageprotocol)internet控制报文协议,用于在网络设备(如ip主机、路由器)之间传递控制消息,控制消息是指检测网络通不通、主机是否可达、路由是否可用等针对网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递无疑起着重要的作用。因此多数防火墙策略、路由器策略和交换机acl(访问列表)都会允许icmp消息从任何网络组件传输到任何其他类型组件,而这一特性也可能被用来建立icmp隧道进行隐蔽通信,从而造成传输的数据包的异常以实现非法目的。



技术实现要素:

本申请实施例的目的在于提供一种异常数据包的检测方法及电子设备,该方法能够对网络中的异常数据包进行准确的检测,以防止对网络中的电子设备进行非法操作。

对此,本申请提供了一种异常数据包的检测方法,应用于电子设备中,所述方法包括:

获取基于第一通信协议进行传输的目标数据包;

基于所述目标数据包的数据结构,将所述目标数据包中的数据部分抽出;

对所述数据部分进行分析,确定所述数据部分中是否具有时间戳;

在确定所述数据部分中具有时间戳的情况下,确定所述数据部分中除所述时间戳之外的剩余数据是否为连续字符串和/或循环字符串;

在确定所述数据部分中除所述时间戳之外的剩余数据为连续字符串和/或循环字符串的情况下,确定所述目标数据包为符合第一条件的数据包。

作为可选,所述方法还包括:

在确定所述数据部分中没有时间戳的情况下,确定所述数据部分的整体是否为连续字符串和/或循环字符串;

在确定所述数据部分的整体为连续字符串和/或循环字符串的情况下,确定所述目标数据包为符合第一条件的数据包。

作为可选,所述的对所述数据部分进行分析,确定所述数据部分中是否具有时间戳,包括:

获取所述数据部分中的具有特定字节的头部数据,其中所述头部数据包括相邻的第一头部数据和第二头部数据,所述第一头部数据用于表征当前时间,所述第二头部数据用于表征所述当前时间的精确度;

在所述第一头部数据和所述第二头部数据均满足第二条件中相应内容的情况下,确定所述数据部分中具有时间戳。

作为可选,所述头部数据为所述数据部分中前x个字节或前y个字节所对应的数据,第一头部数据的字节数和第二头部数据的字节数相同。

作为可选,所述的确定所述数据部分中除所述时间戳之外的剩余数据是否为连续字符串和/或循环字符串,包括:

基于所述剩余数据的数据长度,随机生成第一随机数和第二随机数;

获取所述剩余数据中存储的所述第一随机数对应的第一存储数,以及所述第二随机数对应的第二存储数;

确定所述第一存储数与所述第二存储数的第一差值,以及所述第一随机数和第二随机数的第二差值;

基于所述第一差值和所述第二差值,确定剩余数据是否为连续字符串。

作为可选,所述的确定所述数据部分中除所述时间戳之外的剩余数据是否为连续字符串和/或循环字符串,包括:

基于所述剩余数据的数据长度,随机生成第三随机数;

基于所述第三随机数,获取所述剩余数据中第三随机数对应的第三存储数,以及所述第三随机数和预设循环单元长度之和对应的第四存储数;

在所述第三存储数和所述第四存储数相同的情况下,确定所述剩余数据为循环字符串。

作为可选,所述方法还包括:

从预设循环单元长度集合中逐一获取每个所述预设循环单元长度,以获取所述预设循环单元长度相对应的所述第四存储数;

相应的,所述的在所述第三存储数和所述第四存储数相同的情况下,确定所述剩余数据为循环字符串,包括:

将所述第三存储数与获取的每个所述第四存储数进行比对,如果具有相同的情况则确定所述剩余数据为循环字符串。

作为可选,所述方法还包括:

基于所述电子设备的至少一个操作系统的类型,确定所述预设循环单元长度集合。

本申请实施例还提供了一种电子设备,包括:

获取模块,其配置为:获取基于第一通信协议进行传输的目标数据包;

处理模块,其配置为:基于所述目标数据包的数据结构,将所述目标数据包中的数据部分抽出;

对所述数据部分进行分析,确定所述数据部分中是否具有时间戳;

在确定所述数据部分中具有时间戳的情况下,确定所述数据部分中除所述时间戳之外的剩余数据是否为连续字符串和/或循环字符串;

在确定所述数据部分中除所述时间戳之外的剩余数据为连续字符串和/或循环字符串的情况下,确定所述目标数据包为符合第一条件的数据包。

本申请实施例还提供了另一种电子设备,包括存储器和处理器,所述存储器中存储有可执行程序,所述处理器执行所述可执行程序以进行如下步骤:

获取基于第一通信协议进行传输的目标数据包;

基于所述目标数据包的数据结构,将所述目标数据包中的数据部分抽出;

对所述数据部分进行分析,确定所述数据部分中是否具有时间戳;

在确定所述数据部分中具有时间戳的情况下,确定所述数据部分中除所述时间戳之外的剩余数据是否为连续字符串和/或循环字符串;

在确定所述数据部分中除所述时间戳之外的剩余数据为连续字符串和/或循环字符串的情况下,确定所述目标数据包为符合第一条件的数据包。

本申请实施例检测方法,能够对网络中的数据包进行准确的检测,特别是能够对icmp进行传输的目标数据包进行分析,基于其数据结构和具体的数据内容进行简便的分析,便能够准确的检测出该目标数据包是否为异常数据包,有效提高了检测效率和准确度,将低了对网络中的电子设备进行非法操作的风险。

附图说明

图1为本申请实施例的异常数据包的检测方法的流程图;

图2为本申请实施例的检测方法的一个实施例的流程图;

图3为本申请实施例的异常数据包的检测方法的一个具体实施例的流程图;

图4为本申请实施例的图1中步骤s30的一个实施例的流程图;

图5为本申请实施例的图1中步骤s40的一个实施例的流程图;

图6为本申请实施例的图1中步骤s40的另一个实施例的流程图;

图7为本申请实施例的电子设备的结构框图;

图8为本申请实施例的另一个电子设备的结构框图。

具体实施方式

此处参考附图描述本申请的各种方案以及特征。

应理解的是,可以对此处申请的实施例做出各种修改。因此,上述说明书不应该视为限制,而仅是作为实施例的范例。本领域的技术人员将想到在本申请的范围和精神内的其他修改。

包含在说明书中并构成说明书的一部分的附图示出了本申请的实施例,并且与上面给出的对本申请的大致描述以及下面给出的对实施例的详细描述一起用于解释本申请的原理。

通过下面参照附图对给定为非限制性实例的实施例的优选形式的描述,本申请的这些和其它特性将会变得显而易见。

还应当理解,尽管已经参照一些具体实例对本申请进行了描述,但本领域技术人员能够确定地实现本申请的很多其它等效形式。

当结合附图时,鉴于以下详细说明,本申请的上述和其他方面、特征和优势将变得更为显而易见。

此后参照附图描述本申请的具体实施例;然而,应当理解,所申请的实施例仅仅是本申请的实例,其可采用多种方式实施。熟知和/或重复的功能和结构并未详细描述以避免不必要或多余的细节使得本申请模糊不清。因此,本文所申请的具体的结构性和功能性细节并非意在限定,而是仅仅作为权利要求的基础和代表性基础用于教导本领域技术人员以实质上任意合适的详细结构多样地使用本申请。

本说明书可使用词组“在一种实施例中”、“在另一个实施例中”、“在又一实施例中”或“在其他实施例中”,其均可指代根据本申请的相同或不同实施例中的一个或多个。

本申请实施例的一种异常数据包的检测方法,应用于电子设备中,能够对基于包括icmp的第一通信协议进行传输的数据包进行检测,根据第一通信协议的内容来设置处理数据的具体方式,从而简便而快速的判断出数据包是否发生异常。

该方法主要包括以下步骤,结合图3,首先获取到基于第一通信协议进行传输的目标数据包,如主动从网络中或网络设备中获取,或者接收用户的主动输入等方式均可以获取该目标数据包,该目标数据包为判断是否为异常数据包的判断对象。目标对象具有数据结构,该数据结构表征了目标对象中数据排布方式以及不同数据之间的结构关系,其中目标对象中包括了数据部分(即data部分),将该数据部分抽取出来进行处理,数据部分中可能具有时间戳,也可能没有时间戳,如果判断该数据部分中具有时间戳时,可以获取数据部分中除去时间戳以外的其他内容(即剩余数据)进行单独的分析。如果判断出剩余数据为连续字符串和/或循环字符串时,则可以确定目标数据包为非异常数据包,而如果剩余数据为非连续字符串和/或非循环字符串时,由于异常数据包为基于隧道技术而建立或传输的用于非法目的的数据包,其作用并不是用于在网络设备(如ip主机、路由器)之间传递正常的控制消息,因此会导致其数据部分不存在连续字符串和/或循环字符串,从而可以确定具有该情况的目标数据包为异常数据包。

此外,在判断数据部分中没有时间戳时,则可以对该数据部分进行是否具有连续字符串和/或循环字符串的分析,如果没有连续字符串和/或循环字符串,则也可以确定具有该情况的目标数据包为异常数据包。

下面结合上述方法步骤举例说明,正常的icmp数据包(目标数据包)的数据部分(data部分)可划分为4种情形:(1)8/16字节时间戳+连续的十六进制字符串;(2)8/16字节时间戳+循环的十六进制字符串;(3)连续的十六进制字符串;(4)循环的十六进制字符串。对于icmptype8/type0目标数据包,只要确定其data部分均不满足上述所有情形,则可以确定该目标数据包为异常icmp数据包。

基于本实施例的检测方法,对于icmptype8/type0的目标数据包,可以取出目标数据包的data部分,进行如下判断:判断data部分是否存在时间戳,若存在时间戳,判断剩余字节是否为连续的十六进制字符串或者循环单元长度为{1,23,64,256}集合中取值之一的十六进制循环字符串,若是,数据包正常,否则数据包异常;若不存在时间戳,判断整个data部分是否为连续的十六进制字符串或者循环单元长度为{1,23,64,256}取值之一的十六进制循环字符串,若是则确定目标数据包正常,否则确定目标数据包异常。

下面结合附图对本申请的检测方法进行详细的说明。图1为本申请实施例的异常数据包的检测方法的流程图,如图1所示,所述检测方法可以应用于计算机,网络设备等电子设备中,该方法包括以下步骤:

s10,获取基于第一通信协议进行传输的目标数据包。

第一通信协议可以是网络中数据的传输协议,包括icmp(internetcontrolmessageprotocol)internet控制报文协议。目标数据包则为基于第一通信协议进行传输的数据包,其为分析的目标,如icmp数据包。获取该目标数据包的方式可以是通过直接从网络或网络设备中抓取,也可以是用户主动的输入该目标数据包,以使电子设备进行获取。

此外,在获取目标数据包时,可以基于特定报文格式获取目标数据包,以使随后的分析更加准确,其中包括获取icmptype8和icmptype0报文格式的目标数据包。

s20,基于所述目标数据包的数据结构,将所述目标数据包中的数据部分抽出。

目标数据的数据结构表征了目标数据包中不同类型的数据的结构以及相互之间的关系。例如基于icmp的目标数据包,包括首部和数据部分,其中首部包括:type、code、checksum、identifier、sequencenumber五个部分;而数据部分(data)则为目标数据包的主要内容。本申请中需要将目标数据包中的数据部分抽出进行分析。

s30,对所述数据部分进行分析,确定所述数据部分中是否具有时间戳。

时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。其主要是为用户提供一份电子证据,以证明用户的某些数据的产生时间。目标数据中可能具有时间戳,也可能不具有时间戳,本实施例中可以将两者区别开来分别进行分析。在获取到数据部分后,对数据部分进行扫描,根据预先获知的时间戳特征来判断数据部分中是否具有时间戳。如根据时间戳特征与当前的数据部分中的所有数据进行逐一对比,从而可以确定数据部分中是否具有时间戳。

s40,在确定所述数据部分中具有时间戳的情况下,确定所述数据部分中除所述时间戳之外的剩余数据是否为连续字符串和/或循环字符串。

在确定数据部分中具有时间戳的情况下,将对数据部分中除时间戳之外的剩余数据进行进一步的分析,以判断该剩余数据是否为连续字符串和/或循环字符串。字符串可以以十进制、十六进制或其他进制的形式出现。连续字符串可以是字符串连续排列,其中不会出现空位,且数值逐步增加。而循环字符串则是以循环单元来循环排列的多个字符串。

在对剩余数据进行是否为连续字符串的分析时,可以通过多种方式进行判断,如通过对剩余数据的具体字符的逐个分析来确定是否具有空位,且数值是否逐步增加,从而确定是否为连续字符串;也可以利用随机数来对剩余数据的具体内容进行判断,如利用两个随机数之间的第一差值,与该随机数在剩余数据中对应的数值的第二差值进行比对,从而根据对比结果来进行判断。

而对剩余数据中是否为循环字符串的判断的分析,则可以通过判断是否具有循环单元,以及相应的循环长度来实现。也可以利用随机数来对其是否为循环字符串进行判断。如利用第一随机数在剩余数据中对应的第一数值,与第二随机数在剩余数据中对应的第二数值进行比对,从而根据对比结果来进行判断。

s50,在确定所述数据部分中除所述时间戳之外的剩余数据为连续字符串和/或循环字符串的情况下,确定所述目标数据包为符合第一条件的数据包。

第一条件可以是判断目标数据包为非异常数据包对应的条件,如不具有icmp隧道的特征的条件。本实施例中,在确定剩余数据为连续字符串和/或循环字符串的情况下,则可以确定目标数据包符合第一条件,其被确定为非异常数据包。

本实施例的该方法,能够对网络中的数据包进行准确的检测,特别是能够对icmp进行传输的目标数据包进行分析,基于其数据结构和具体的数据内容进行简便的分析,便能够准确的检测出该目标数据包是否为异常数据包,有效提高了检测效率和准确度,将低了对网络中的电子设备进行非法操作的风险。

在本申请的一个实施例中,如图2所示并结合图3,所述方法还包括以下步骤:

s60,在确定所述数据部分中没有时间戳的情况下,确定所述数据部分的整体是否为连续字符串和/或循环字符串。

正常的数据包中也可能没有时间戳,因此在目标数据包的数据部分中如果没有检测到该时间戳的情况下,仍旧需要对数据部分的整体进行是否为连续字符串和/或循环字符串的判断。而对于连续字符串和循环字符串的判断方式则仍旧可以基于上述的内容实现。

如在对剩余数据进行是否为连续字符串的分析时,可以通过多种方式进行判断,如通过对剩余数据的具体字符的逐个分析来确定是否具有空位,且数值是否逐步增加,从而确定是否为连续字符串;也可以利用随机数来对剩余数据的具体内容进行是否为连续字符串的判断。而对剩余数据中是否为循环字符串的判断的分析,则可以通过判断是否具有循环单元,以及相应的循环长度来实现。也可以利用随机数来对其是否为循环字符串进行判断。

s70,在确定所述数据部分的整体为连续字符串和/或循环字符串的情况下,确定所述目标数据包为符合第一条件的数据包。

数据部分中不具有时间戳,而是整体为连续字符串和/或循环字符串时,对于基于icmp传输的目标数据,该特征并不是基于icmp隧道而传输的数据。目标数据包符合第一条件,可以被确定为非异常数据包。

为了更加清楚说明循环字符串的含有,下面的对数据部分(或者除去时间戳的剩余数据)的循环字符串进行举例说明。

电子设备的操作系统在填充特定报文格式的数据包(如type8和type0类型的数据包)的数据部分(data部分)时,会填充默认的16进制字符串,根据操作系统类型说明data部分所填充的内容。如windows系统,会根据data部分的长度填充按(0x)61626364656768696a6b6c6d6e6f7071727374757677循环的16进制字符串,其中(0x)为十六进制标识。对于windows系统,data部分的循环单元为(0x)6162636465666768696a6b6c6d6e6f7071727374757677,该循环单元的长度为23字节。

对于linux操作系统存在两种情形。情形一:会根据data部分的长度填充按(0x)0001023…fdfeff循环的16进制字符串。对于这种情形,data部分的循环单元为(0x)00010203…fdfeff,该循环单元的长度为256字节。情形二:data部分填充按(0x)404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f循环的16进制字符串。对于这种情形,data部分的循环单元为(0x)4041424344…7d7e7f,该循环单元的长度为64字节。

bsd系统,在填充data部分时,大部分情形与linux系统的情形一类似。但还存在另外一种情形:data部分每个字节都相同,比如,都为(0x)00。若某数据包的data部分长度为20字节,则该数据包的data部分为(0x)0000000000000000000000000000000000000000。对于这种情形,循环单元的长度为1字节。

从而本申请中,在判断数据部分(或者除去时间戳的剩余数据)是否具有循环字符串时,可以根据不同的操作系统所对应的循环字符串的特征来进行具有针对性的判断,从而能够得到更加准确的判断结果。

在本申请的一个实施例中,如图4所示,所述的步骤s30:“对所述数据部分进行分析,确定所述数据部分中是否具有时间戳”,包括以下步骤:

s310,获取所述数据部分中的具有特定字节的头部数据,其中所述头部数据包括相邻的第一头部数据和第二头部数据,所述第一头部数据用于表征当前时间,所述第二头部数据用于表征所述当前时间的精确度。

具体的,时间戳可以设置在头部数据,即具有特定字节的头部数据整个可以是时间戳,头部数据包括相邻的第一头部数据和第二头部数据。例如头部数据为数据部分中处于头部的前8字节,其中该前8字节中的前4字节可以为第一头部数据,前8字节中的后4字节可以为第二头部数据。当然头部数据还可以为其他字节的数据,头部数据为数据部分中处于头部的前16字节,其中该前16字节中的前8字节可以为第一头部数据,前16字节中的后8字节可以为第二头部数据。

s320,在所述第一头部数据和所述第二头部数据均满足第二条件中相应内容的情况下,确定所述数据部分中具有时间戳。

本实施例中,头部数据可能是时间戳,也可能是其他数据内容,因此需要对头部数据中的第一头部数据和第二头部数据分别进行分析判断,从而确定数据部分中是否具有时间戳。本实施中需要在第一头部数据和第二头部数据均满足第二条件中相应内容的情况下,才能够确定数据部分中具有时间戳。而第二条件可以包括针对于第一头部数据进行分析判断的第一子条件,以及针对于第二头部数据进行分析判断的第二子条件。第一子条件可以是对当前时间设置的条件,第二子条件则可以是对当前时间的精确度所设置的条件。

举例说明,第一头部数据用于表征当前时间,第二头部数据用于表征所述当前时间的精确度。获取目标数据包中的data部分(数据部分)的前8字节,将前8字节分为两部分,包括前4字节(第一头部数据)和后4字节(第二头部数据),将前4字节转换为十进制数;计算自1970年1月1日0时0分0秒到当前时间所经过的秒数;计算前4字节对应的十进制数和秒数的差值的绝对值,判断该绝对值是否小于86400;将后4字节转换为十进制数,判断该十进制数是否小于1000000。当两个判断结果都为真时,则确定data部分(数据部分)的前8字节为时间戳。

再例如,获取目标数据包的data部分(数据部分)中的前16字节,将前16字节分为两部分,分别为前8字节和后8字节。将前8字节转换为十进制数;计算自1970年1月1日0时0分0秒到当前时间所经过的秒数;计算前8字节对应的十进制数和秒数的差值的绝对值,判断该绝对值是否小于86400;将后8字节转换为十进制数,判断该十进制数是否小于1000000。当两个判断结果都为真时,则可以确定目标数据包的data部分(数据部分)中的前16字节为时间戳,否则判定该data部分不存在时间戳。

作为可选,所述头部数据为所述数据部分中前x个字节或前y个字节所对应的数据,第一头部数据的字节数和第二头部数据的字节数相同。

结合上述实施例,x和y均为大于1的整数,当x为8时,data部分(数据部分)的前8字节可能为时间戳(头部数据)时,第一头部数据和第二头部数据的字节数均为4。当y为16时,data部分(数据部分)的前16字节可能为时间戳时,第一头部数据和第二头部数据的字节数均为8。当然,x和y还可以为其他整数,则第一头部数据和第二头部数据也发生相应的变化。

在本申请的一个实施例中,如图5所示,所述的步骤s40“确定所述数据部分中除所述时间戳之外的剩余数据是否为连续字符串和/或循环字符串”,还包括以下步骤:

s410,基于所述剩余数据的数据长度,随机生成第一随机数和第二随机数。

s420,获取所述剩余数据中存储的所述第一随机数对应的第一存储数,以及所述第二随机数对应的第二存储数;

s430,确定所述第一存储数与所述第二存储数的第一差值,以及所述第一随机数和第二随机数的第二差值;

s440,基于所述第一差值和所述第二差值,确定剩余数据是否为连续字符串。

具体来说,数据部分中除时间戳之外的数据为剩余数据,例如除去数据部分中的头部数据以外的其他数据均为剩余数据。在对剩余数据进行是否为连续字符串的判断时,可以首先基于该剩余数据的数据长度,随机生成第一随机数和第二随机数。例如生成的第一随机数和第二随机数均大于1且不超过数据长度的具体数值,此外第一随机数和第二随机数不相同。

第一存储数为第一随机数在剩余数据中对应的数,如剩余数据的长度为26个字节,第一随机数为5,则第一存储数则为剩余数据中第一随机数5对应的第5个字节。而第二存储数也是类似,第二存储数为第二随机数在剩余数据中对应的数。

本实施例中确定第一存储数与第二存储数的第一差值,以及第一随机数和第二随机数的第二差值;在第一差值与第二差值相同的情况下则可以确定剩余数据为连续字符串。上述的确定步骤可以实施多次,从而在总体上能够防止偶然事件发生,以便更加准确定确定出剩余数据是否为连续字符串。

举例说明,存在两个icmp数据包(目标数据包)。数据包一:data部分为(0x)000102030405060708090a0b0c0d0e0f10111213141516171819。该数据包一长度为26字节。

(1)基于长度26字节可以生成两个随机数,第一随机数为m=5,第二随机数为n=13。取第5字节上存储的数bm=(0x)04,取第13字节上存储的数bn=(0x)0c。计算bn–bm=(0x)0c-(0x)04=(0x)8=8。满足(bn-bm)等于n-m。

(2)基于长度26字节可以再生成两个随机数m=7,n=18。此时,bm=(0x)06,bn=(0x)11。bn–bm=(0x)11–(0x)06=(0x)0b=11。满足(bn-bm)等于n-m。

两次判断结果都为真,因此,最终结果为真。即确定该数据包一的data部分为连续的十六进制字符串。从而可以认为该icmp数据包(目标数据包)为正常数据包。

数据包二:data部分为:(0x)6970636f6e666967。该数据包二的长度为8字节。

(1)基于长度8字节可以生成两个随机数,第一随机数为m=2,第二随机数为n=5。此时,bm=(0x)70,bn=(0x)6e,bn–bm=(0x)6e–(0x)70=-2。(bn–bm)与n-m不相等。

(2)基于长度8字节可以再生成两个随机数m=3,n=4。此时,bm=(0x)63,bn=(0x)6f。bn–bm=(0x)6f–(0x)63=(0x)c=12。(bn-bm)与n-m不相等。

两次判断的结果均为假,则可以确定该数据包二的data部分并不连续。从而可以认为该icmp数据包(目标数据包)为异常数据包。

此外,在进行是否为连续字符串的判断时,可以设定为只要出现一次判断结果为假,则最终的结果一定为假,因此,不再需要继续生成随机数进行上述的分析和判断。

在本申请的一个实施例中,如图6所示,所述的步骤s40“确定所述数据部分中除所述时间戳之外的剩余数据是否为连续字符串和/或循环字符串”,还包括以下步骤:

s450,基于所述剩余数据的数据长度,随机生成第三随机数;

s460,获取所述剩余数据中第三随机数对应的第三存储数,以及所述第三随机数和预设循环单元长度之和对应的第四存储数;

s470,在所述第三存储数和所述第四存储数相同的情况下,确定所述剩余数据为循环字符串。

具体来说,在对剩余数据进行是否为循环字符串的分析判断时,可以利用第三随机数来实施。循环字符串具有循环出现的循环单元。第三随机数不超出剩余数据的数据长度。而预设循环单元长度可以是预设循环单元长度集合中的一个,该预设循环单元长度集合可以基于在多个操作系统中,目标数据包中具有循环字符串时剩余数据具有的数据长度来预先设定,如{1,23,64,256}。举例说明,对于两个icmp数据包(目标数据包)。对于数据包三:其中的data部分(数据部分)为(0x)6162636465666768696a6b6c6d6e6f7071727374757677616263646566。该数据包的长度为29字节。

(1)基于数据包三的长度29字节可以生成一个第三随机数p=4。获取数据包三的第4字节上的数bp=(0x)64,从{1,23,64,256}集合中获取预设循环单元长度23,在剩余数据中获取第(4+23)字节上的bp+23=(0x)64。确定bp与bp+23相等。

(2)类似的,再次生成一个第三随机数p=6。此时,bp=(0x)66,bp+23=(0x)66。确定bp与bp+23相等。

两次判断结果均为真,因此,最终结果为真。即确定该数据包三的data部分为循环单元长度为23的循环字符串,从而可以确定该icmp数据包(目标数据包)为正常数据包。

对于数据包四:其中的data部分为(0x)57696e646f777320506f7765725368656c6c2072756e6e696e672061732075736572。该数据包的长度为34字节。

(1)生成一个第三随机数p=5。此时,bp=(0x)6f,bp+23=(0x)61。bp与bp+23不相等。

(2)在生成一个随机数p=10。此时,bp=(0x)6f,bp+23=(0x)65。bp与bp+23不相等。

两次判断的结果均为假,因此,判断该数据包四的data部分的循环单元长度并不是23,因此可以确定该数据包四并不具有循环字符串,从而可以确定目标数据包为异常数据包。

当然,该基于生成的第三随机数确定目标数据包的data部分是否具有循环字符串的方式可以进行更多次实施上述步骤,如果出现有多个循环数不相同的情况下就可以确定该data部分中除时间戳之外的剩余数据中不具有循环字符串,则可以确定目标数据包为异常数据包。

在本申请的一个实施例中,所述方法还包括:

从预设循环单元长度集合中逐一获取每个所述预设循环单元长度,以获取所述预设循环单元长度相对应的所述第四存储数;

相应的,所述的步骤s470“在所述第三存储数和所述第四存储数相同的情况下,确定所述剩余数据为循环字符串”,包括:

将所述第三存储数与获取的每个所述第四存储数进行比对,如果具有相同的情况则确定所述剩余数据为循环字符串。具体的,对于电子设备处于不同的操作系统时,剩余部分为循环字符串时具有特定长度,因此该预设循环单元长度集合可以基于在多个操作系统中,目标数据包中具有循环字符串时剩余数据具有的数据长度来预先设定。预设循环单元长度集合中具有多个预设循环单元长度,本实施例中可以将每个预设循环单元长度与第三随机数进行结合,如相加并得到两者之“和”,从而基于每个“和”在剩余数据中获取相应的第四存储数。将第三存储数与每个第四存储数均进行比对,如果具有至少一个相同的情况,便可以确定剩余数据为循环字符串。

进一步的,所述方法还包括:基于所述电子设备的至少一个操作系统的类型,确定所述预设循环单元长度集合。

例如,在windows操作系统下,为正常数据包的目标数据包的剩余数据对应的循环单元的长度为23字节;在linux操作系统下,为正常数据包的目标数据包的剩余数据对应的循环单元的长度为64字节;在bsd操作系统下,为正常数据包的目标数据包的剩余数据对应的循环单元的长度为1字节。从而可以基于1,23以及64来预先设置该预设循环单元长度集合。为了扩大使用范围,作为可选,该预设循环单元长度集合可以设置为{1,23,64,256}。

举例说明,上述预设循环单元长度集合设置为{1,23,64,256},为icmpdata部分的循环单元的长度的所有取值。同样,如果剩余数据的长度为l。判断一个剩余数据的循环单元的长度是否为23的方法为:生成一个第三随机数p(0<p≤(l-23)),取出剩余数据的字符串中第p个字节上的存储的数bp(第三存储数),再取出第p+23(两者之“和”)个字节上存储的数bp+23(第四存储数),判断bp是否等于bp+23,若相等则该剩余数据的字符串的循环单元的长度为23。为了避免偶然情况发生,可多生成几个随机数p,重复上述过程,若每次判断均为真,则确定待测字符串为循环长度为23的循环字符串。

当然该确定字符串是否为循环字符串的方式,也同样适用于不具有时间戳的目标数据包中的数据部分的判断,即将数据部分作为一个字符串来进行是否为循环字符串的判断。

本申请实施还提供了一种电子设备,如图7所示,包括:

获取模块,其配置为:获取基于第一通信协议进行传输的目标数据包。

具体的,第一通信协议可以是网络中数据的传输协议,包括icmp(internetcontrolmessageprotocol)internet控制报文协议。目标数据包则为基于第一通信协议进行传输的数据包,其为分析的目标,如icmp数据包。获取模块获取该目标数据包的方式可以是通过直接从网络或网络设备中抓取,也可以是用户主动的输入该目标数据包,以使电子设备进行获取。

此外,获取模块在获取目标数据包时,可以基于特定报文格式获取目标数据包,以使随后的分析更加准确,其中包括获取icmptype8和icmptype0报文格式的目标数据包。

处理模块,其配置为:基于所述目标数据包的数据结构,将所述目标数据包中的数据部分抽出;

对所述数据部分进行分析,确定所述数据部分中是否具有时间戳;

在确定所述数据部分中具有时间戳的情况下,确定所述数据部分中除所述时间戳之外的剩余数据是否为连续字符串和/或循环字符串;

在确定所述数据部分中除所述时间戳之外的剩余数据为连续字符串和/或循环字符串的情况下,确定所述目标数据包为符合第一条件的数据包。

具体来说,目标数据的数据结构表征了目标数据包中不同类型的数据的结构以及相互之间的关系。例如处理模块基于icmp的目标数据包,包括首部和数据部分,其中首部包括:type、code、checksum、identifier、sequencenumber五个部分;而数据部分(data)则为目标数据包的主要内容。本申请中处理模块需要将目标数据包中的数据部分抽出进行分析。

时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。其主要是为用户提供一份电子证据,以证明用户的某些数据的产生时间。目标数据中可能具有时间戳,也可能不具有时间戳,本实施例中处理模块可以将两者区别开来分别进行分析。在获取到数据部分后,对数据部分进行扫描,根据预先获知的时间戳特征来判断数据部分中是否具有时间戳。如根据时间戳特征与当前的数据部分中的所有数据进行逐一对比,从而可以确定数据部分中是否具有时间戳。

在确定数据部分中具有时间戳的情况下,处理模块将对数据部分中除时间戳之外的剩余数据进行进一步的分析,以判断该剩余数据是否为连续字符串和/或循环字符串。字符串可以以十进制、十六进制或其他进制的形式出现。连续字符串可以是字符串连续排列,其中不会出现空位,且数值逐步增加。而循环字符串则是以循环单元来循环排列的多个字符串。

处理模块在对剩余数据进行是否为连续字符串的分析时,可以通过多种方式进行判断,如通过对剩余数据的具体字符的逐个分析来确定是否具有空位,且数值是否逐步增加,从而确定是否为连续字符串;也可以利用随机数来对剩余数据的具体内容进行判断,如利用两个随机数之间的第一差值,与该随机数在剩余数据中对应的数值的第二差值进行比对,从而根据对比结果来进行判断。

而处理模块对剩余数据中是否为循环字符串的判断分析,则可以通过判断是否具有循环单元,以及相应的循环长度来实现。也可以利用随机数来对其是否为循环字符串进行判断。如处理模块利用第一随机数在剩余数据中对应的第一数值,与第二随机数在剩余数据中对应的第二数值进行比对,从而根据对比结果来进行判断。

此外,第一条件可以是判断目标数据包为非异常数据包对应的条件,如不具有icmp隧道的特征的条件。本实施例中,处理模块在确定剩余数据为连续字符串和/或循环字符串的情况下,则可以确定目标数据包符合第一条件,其被确定为非异常数据包。

在本申请的一个实施例中,所述处理模块进一步配置为:

在确定所述数据部分中没有时间戳的情况下,确定所述数据部分的整体是否为连续字符串和/或循环字符串;

在确定所述数据部分的整体为连续字符串和/或循环字符串的情况下,确定所述目标数据包为符合第一条件的数据包。

在本申请的一个实施例中,所述处理模块进一步配置为:

获取所述数据部分中的具有特定字节的头部数据,其中所述头部数据包括相邻的第一头部数据和第二头部数据,所述第一头部数据用于表征当前时间,所述第二头部数据用于表征所述当前时间的精确度;

在所述第一头部数据和所述第二头部数据均满足第二条件中相应内容的情况下,确定所述数据部分中具有时间戳。

在本申请的一个实施例中,所述头部数据为所述数据部分中前x个字节或前y个字节所对应的数据,第一头部数据的字节数和第二头部数据的字节数相同。

在本申请的一个实施例中,所述处理模块进一步配置为:

基于所述剩余数据的数据长度,随机生成第一随机数和第二随机数;

获取所述剩余数据中存储的所述第一随机数对应的第一存储数,以及所述第二随机数对应的第二存储数;

确定所述第一存储数与所述第二存储数的第一差值,以及所述第一随机数和第二随机数的第二差值;

基于所述第一差值和所述第二差值,确定剩余数据是否为连续字符串。

在本申请的一个实施例中,所述处理模块进一步配置为:

基于所述剩余数据的数据长度,随机生成第三随机数;

基于所述第三随机数,获取所述剩余数据中第三随机数对应的第三存储数,以及所述第三随机数和预设循环单元长度之和对应的第四存储数;

在所述第三存储数和所述第四存储数相同的情况下,确定所述剩余数据为循环字符串。

在本申请的一个实施例中,所述处理模块进一步配置为:

从预设循环单元长度集合中逐一获取每个所述预设循环单元长度,以获取所述预设循环单元长度相对应的所述第四存储数;

将所述第三存储数与获取的每个所述第四存储数进行比对,如果具有相同的情况则确定所述剩余数据为循环字符串。

在本申请的一个实施例中,所述电子设备还包括预设模块,所述预设模块配置为:

基于所述电子设备的至少一个操作系统的类型,确定所述预设循环单元长度集合。

本申请实施例还提供了一种电子设备,如图8所示,包括存储器和处理器,所述存储器中存储有可执行程序,所述处理器执行所述可执行程序以进行如下步骤:

获取基于第一通信协议进行传输的目标数据包;

基于所述目标数据包的数据结构,将所述目标数据包中的数据部分抽出;

对所述数据部分进行分析,确定所述数据部分中是否具有时间戳;

在确定所述数据部分中具有时间戳的情况下,确定所述数据部分中除所述时间戳之外的剩余数据是否为连续字符串和/或循环字符串;

在确定所述数据部分中除所述时间戳之外的剩余数据为连续字符串和/或循环字符串的情况下,确定所述目标数据包为符合第一条件的数据包。

在本申请的一个实施例中,所述处理器进一步执行所述可执行程序以进行如下步骤:

获取所述数据部分中的具有特定字节的头部数据,其中所述头部数据包括相邻的第一头部数据和第二头部数据,所述第一头部数据用于表征当前时间,所述第二头部数据用于表征所述当前时间的精确度;

在所述第一头部数据和所述第二头部数据均满足第二条件中相应内容的情况下,确定所述数据部分中具有时间戳。

在本申请的一个实施例中,所述头部数据为所述数据部分中前x个字节或前y个字节所对应的数据,第一头部数据的字节数和第二头部数据的字节数相同。

在本申请的一个实施例中,所述处理器进一步执行所述可执行程序以进行如下步骤:

基于所述剩余数据的数据长度,随机生成第一随机数和第二随机数;

获取所述剩余数据中存储的所述第一随机数对应的第一存储数,以及所述第二随机数对应的第二存储数;

确定所述第一存储数与所述第二存储数的第一差值,以及所述第一随机数和第二随机数的第二差值;

基于所述第一差值和所述第二差值,确定剩余数据是否为连续字符串。

在本申请的一个实施例中,所述处理器进一步执行所述可执行程序以进行如下步骤:

基于所述剩余数据的数据长度,随机生成第三随机数;

基于所述第三随机数,获取所述剩余数据中第三随机数对应的第三存储数,以及所述第三随机数和预设循环单元长度之和对应的第四存储数;

在所述第三存储数和所述第四存储数相同的情况下,确定所述剩余数据为循环字符串。

在本申请的一个实施例中,所述处理器进一步执行所述可执行程序以进行如下步骤:

从预设循环单元长度集合中逐一获取每个所述预设循环单元长度,以获取所述预设循环单元长度相对应的所述第四存储数;

将所述第三存储数与获取的每个所述第四存储数进行比对,如果具有相同的情况则确定所述剩余数据为循环字符串。

在本申请的一个实施例中,所述处理器进一步执行所述可执行程序以进行如下步骤:

基于所述电子设备的至少一个操作系统的类型,确定所述预设循环单元长度集合。

以上实施例仅为本申请的示例性实施例,不用于限制本申请,本申请的保护范围由权利要求书限定。本领域技术人员可以在本申请的实质和保护范围内,对本申请做出各种修改或等同替换,这种修改或等同替换也应视为落在本申请的保护范围内。

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