一种模糊测试数据流的管理方法与流程

文档序号:12751756阅读:345来源:国知局
一种模糊测试数据流的管理方法与流程

本发明涉及一种模糊测试数据流的管理方法,涉及基于工控协议建立数据流后根据设定的老化时间进行数据流的老化,属于工业网络安全领域。



背景技术:

目前,随着工业化与信息化进程的不断交叉融合,越来越多的信息技术应用到了工业领域。与此同时,由于工业控制系统广泛采用通用软硬件和网络设施,以及与企业管理信息系统的集成,导致工业控制系统越来越开放,并且与企业内网,甚至是与互联网产生了数据交换。所以针对工业控制设备开启了工控漏洞挖掘的相关测试,针对工业控制设备的漏洞挖掘,全球上比较权威的就是Wurldtech的Achilles,它针对工业控制设备对工控协议实现进行漏洞挖掘。在测试过程中,可能针对某个设备创建很多条数据流,数据流有老化时间,为了更高效的管理数据流,本文提出了一种高效的数据流老化机制。

传统的数据流老化机制会定时去遍历所有流表,然后用当前时间和流创建或者更新的时间进行比对,如果时间超过老化时间,那么就把流老化掉。这样的老化方式存在很大的缺点,就是如果流的数量庞大(如10万条)那么每次遍历的时间和时间比对就会浪费大量的CPU时间,造成别的任务不能被及时执行,其时间复杂度是O(n),其中n是流的条数,本发明采用了一种全新的思路进行流老化,不用去进行所有流的遍历和时间比对过程,大大降低了处理流老化的时间,其时间复杂度达到了O(1)也就是说,其处理流老化的时间复杂度和流的多少无关。



技术实现要素:

本发明的目的在于提供一种能够解决上述传统数据流老化技术缺点的模糊测试数据流的管理方法,当某一个时间段需要大量频繁的创建数据流时,在数据流的老化时间到来的时候能够高效的把数据流老化掉。

本发明的一种模糊测试数据流的管理方法包括以下步骤:

(1)根据数据流的老化时间创建一个双向环形链表L1,双向环形链表L1的节点数和老化时间的秒数相同,例如,如果老化时间是60s那么双向环形链表节点的个数为60个;所述数据流的老化时间的单位是秒。

(2)定义一个指针P1指向双向环形链表中的任意一个节点,由于链表是一个双向环形链表,所以在初始化的时候,指针P1可以指向任意一个节点,即双向链表中所有的节点都是无差别的。

(3)定义一个指针P2指向双向环形链表L1中指针P1所指的节点的前一个节点。

(4)如果一个新的数据流产生,创建一个数据流节点,把它挂到指针P2指向的节点。

(5)如果已经存在的数据流有新的数据到来,那么就需要更新数据流,如果数据流没有在指针P2所在的节点上,把它挂到指针P2指向的节点,否则不做任何动作。

(6)开启一个一秒钟的定时器,每次定时器超时指针P1移动到双向环形链表L1的下一个节点,并把这个节点上挂的所有流老化掉。

(7)同样在每次定时器超时后在处理完所述步骤(4)里的内容后指针P2也指向双向环形链表L1的下一个节点,指针P2移动到指针P1之前的位置,即指针P2永远紧跟着指针P1移动。

所述双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。如果双向链表的收尾相连,那么就构成了双向环形链表或者叫做双向循环链表。采用双向环形链表的好处是在移动指针P1和指针P2的时候不需要考虑后继指针是否为空,使得操作简单而统一。

数据接收线程用来处理所有的来自网卡的数据包,然后根据五元组(源IP、目的IP、源端口、目的端口、协议)来唯一确定一条流,经过对五元组进行哈希运算后没有命中说明是一条新流,否则是一条已经存在的流,数据接收线程会根据上述判断来告诉流处理线程流的属性(新流或者已经存在的流),然后如果定时器超时,数据接收线程会通过消息告诉流处理线程,以便流处理线程来做相应的处理;所述五元组包括:源IP、目的IP、源端口、目的端口、协议。

流处理线程用来创建双向环形链L1表及指针P1和指针P2,以及对指针P1、指针P2的移动和对老化的数据流进行删除等操作。

首先在定时器超时后,会接收到流接收线程发过来的超时消息,然后移动P1指针到指针P1的下一个位置。移动完成后,把当前指针P1指向的环形链表节点上挂载的数据流全部老化掉,然后同样把指针P2也向后移动一个位置,如果有新的流产生,会接收到数据接收线程发来的消息,那么流处理线程就会创建一条流把它直接挂载到指针P2指向的节点上,如果是数据流更新,同样会收到数据接收线程发来的消息,那么如果流已经挂载到指针P2指向的节点上,那么就不需要对数据流做任何操作,否则把数据流移动到指针P2指向的节点上。

本发明的优点是:和现有的数据流老化技术相比,本发明解决了原来定时器超时后需要对所有的流进行时间计算,然后确定是否需要老化的过程,实现了O(1)的时间复杂度,从而解决了当数据流的数量非常庞大的时候带来的流老化占用很多的CPU资源的问题。本发明最大的一个特点就是对所有的数据流按着创建或者更新的时间点进行了分类,这样的做的最大的好处就是无需在每个流结构的上下文里保存时间戳,而和传统的流老化需要去取当前时间和流上下文里的时间戳做对比不同,本发明巧妙的采用了流的时间分类法,这样做所有和时间相关的操作都交给了一个双向环形链表和两个指针,而对它们的操作也只需要每秒一次,所以这样的老化方式相比较传统的老化方式对大量的流计算时间戳相比,几乎可以忽略不计。

附图说明

图1是本发明所述一种模糊测试数据流的管理方法的说明示意图;

图2是本发明所述一种模糊测试数据流的管理方法的流程示意图;

图3是本发明所述一种模糊测试数据流的管理方法的双向环形链表的示意图。

具体实施方式

下面结合附图对本发明的实施方式进行详细描述。

如图2所示,本发明的一种模糊测试数据流的管理方法包括以下步骤:

(1)根据数据流的老化时间创建一个双向环形链表L1,环形链表L1的节点数和老化时间的秒数相同,例如,如果老化时间是60s那么双向环形链表节点的个数为60个;所述数据流的老化时间的单位是秒。

(2)定义一个指针P1指向双向环形链表中的任意一个节点,由于链表是一个双向环形链表,所以在初始化的时候,指针P1可以指向任意一个节点,即双向链表中所有的节点都是无差别的。

(3)定义一个指针P2指向双向环形链表L1中指针P1所指的节点的前一个节点。

(4)如果一个新的数据流产生,创建一个数据流节点,把它挂到指针P2指向的节点。

(5)如果已经存在的数据流有新的数据到来,那么就需要更新数据流,如果数据流没有在指针P2所在的节点上,把它挂到指针P2指向的节点,否则不做任何动作。

(6)开启一个一秒钟的定时器,每次定时器超时指针P1移动到双向环形链表L1的下一个节点,并把这个节点上挂的所有流老化掉。

(7)同样在每次定时器超时后在处理完所述步骤(4)里的内容后指针P2也指向双向环形链表L1的下一个节点,指针P2移动到指针P1之前的位置,即指针P2永远紧跟着指针P1移动。

如图3所示,所述双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。如果双向链表的收尾相连,那么就构成了双向环形链表或者叫做双向循环链表。采用双向环形链表的好处是在移动指针P1和指针P2的时候不需要考虑后继指针是否为空,使得操作简单而统一。

数据接收线程用来处理所有的来自网卡的数据包,然后根据五元组(源IP、目的IP、源端口、目的端口、协议)来唯一确定一条流,经过对五元组进行哈希运算后没有命中说明是一条新流,否则是一条已经存在的流,数据接收线程会根据上述判断来告诉流处理线程流的属性(新流或者已经存在的流),然后如果定时器超时,数据接收线程会通过消息告诉流处理线程,以便流处理线程来做相应的处理;所述五元组包括:源IP、目的IP、源端口、目的端口、协议。

流处理线程用来创建双向环形链L1表及指针P1和指针P2,以及对指针P1、指针P2的移动和对老化的数据流进行删除等操作。

首先在定时器超时后,会接收到流接收线程发过来的超时消息,然后移动P1指针到指针P1的下一个位置。移动完成后,把当前指针P1指向的环形链表节点上挂载的数据流全部老化掉,然后同样把指针P2也向后移动一个位置,如果有新的流产生,会接收到数据接收线程发来的消息,那么流处理线程就会创建一条流把它直接挂载到指针P2指向的节点上,如果是数据流更新,同样会收到数据接收线程发来的消息,那么如果流已经挂载到指针P2指向的节点上,那么就不需要对数据流做任何操作,否则把数据流移动到指针P2指向的节点上。

如图1所示,

当前点是指指针P1指向的节点,如果这个节点上有流,那么这个节点上所有的流都需要老化掉,

下一点是指指针P1在下一个定时器超时后需要移动过去的节点。

新流挂载点是指指针P2指向的节点,是指当有新流创建或者流更新的时候需要挂载的节点。

双向环形链表L1因为双向环形链表的节点数和老化时间相关,所以在这里把这个双向环形链表形象的比喻成时间轴。

当定时器超时后,图1的三个箭头依次后移一个节点,图1的时间轴是一个环,也就是箭头移动到时间轴的末端后,下一次移动就会移动到时间轴的首部。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的范围内,能够轻易想到的变化或替换,都应涵盖在本发明权利要求的保护范围内。

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