基于Libnids的协议还原方法技术

技术编号:14165009 阅读:485 留言:0更新日期:2016-12-12 12:28
本发明专利技术公开了一种基于Libnids的协议还原方法,根据接收到的数据包为IP分片的第一个包获取所述第一个包对应的四元组,之后,根据所述第一个包对应的四元组查找流结构,并且对所述查找到的流结构重建加入用于保存IP分片序列号的序列号队列;当接收到的数据包为IP分片的非第一个包时,根据该数据包的目的IP查找到对应的HOST,在查找到的HOST对应的若干个流结构中查找对应的流结构,将该数据包直接写入该流结构的对应的内存中。本发明专利技术将零散的内存分配和释放改为大内存,有效地节省了内存的分配和释放的时间,提高了内存管理的效率,有效节省了文件操作所消耗的时间,无需线程中的文件拷贝等操作,节省了很大的时间。

【技术实现步骤摘要】

本专利技术属于网络安全
,具体涉及一种基于Libnids的协议还原方法
技术介绍
随着互联网应用的迅速增长,网络安全问题已成为关注的焦点,通过对网络数据内容的有效管理在一定程度上能降低网络的安全风险。网络内容管理实现的基础是网络数据包的协议还原,包括数据包捕获、协议解析、应用层数据还原三部分。协议还原技术就是捕获网络中的所有报文,根据标准的协议规定对报文进行重组和还原,在对底层协议进行解析的基础上,主要对应用层的协议进行分析。目前,针对网络数据包协议还原已经有许多技术和相关产品出现,但由于网络带宽的快速增长、网络信息的日益丰富,因此在性能和功能方面都对网络数据包的协议还原提出了新的要求。Libnids是用于网络入侵检测开发的专业编程接口,它提供了TCP数据流重组的功能,以及IP分片进行重组的功能,所以对分析基于TCP协议的各种协议Libnids都能胜任。Libnids也可以看作是一个可以将网络数据包还原到TCP层的TCP/IP协议栈。目前,常用的协议还原技术大多都是基于Libnids,其主要的缺点是采用单进程串行处理模式,内存管理效率低,导致网络吞吐量小。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供一种基于Libnids的协议还原方法。为达到上述目的,本专利技术的技术方案是这样实现的:本专利技术实施例提供一种基于Libnids的协议还原方法,该方法为:根据接收到的数据包为IP分片的第一个包获取所述第一个包对应的四元组,之后,根据所述第一个包对应的四元组查找流结构,并且对所述查找到的流结构重建加入用于保存IP分片序列号的序列号队列;当接收到的数据包为IP分片的非第一个包时,根据该数据包的目的IP查找到对应的HOST,在查找到的HOST对应的若干个流结构中查找对应的流结构,将该数据包直接写入该流结构的对应的内存中。上述方案中,该方法还包括:当接收到的数据包不是为IP分片时,根据该数据包对应的四元组查找对应的流结构,之后,将该数据包直接写入该流结构的对应的内存中。上述方案中,该方法之前还包括:创建一个新的c文件用于管理内存、以及.h文件用于定义内存节点的结构;在启动的时候首先读取配置文件,获取每一种协议节点分配的空间大小,和每一种协议允许的最大连接数,根据这两个信息计算出需要的内存空间;分配内存空间,根据不同的协议创建节点,节点的指针指向相应的内存地址,并初始化节点内容;创建全局的链表头将所有的节点串起来,对不同协议的链表头进行分别管理;创建free链表头用于保存闲置的节点,分配给线程使用,线程释放的节点再重新加入到free链中;在链表头中创建互斥量,在多线程中对申请节点的线程进行互斥操作。上述方案中,所述将该数据包直接写入该流结构的对应的内存中之后,该方法还包括读取内存中保存的数据包进行数据还原。上述方案中,所述将该数据包直接写入该流结构的对应的内存中,具体为:在Libnids的半连接结构体struct half_stream中加入内存节点的指针变量,在接收到连接数据,确定需要空间的时候则调用节点申请的接口获取一个内存节点;在连接关闭或者超时的时候,将内存节点作为参数传递给协议处理队列,协议处理线程也能够直接从内存中获取数据,等到协议处理线程将所有的解析工作完成之后,再将所有的内存信息写到磁盘文件中,最后调用内存节点的释放接口;Libnids写内存直接在Libnids里面判断连接的半连接数据是否需要,并且在连接结束的时候将对应的节点插入到对应线程的处理队列中。上述方案中,所述将该数据包直接写入该流结构的对应的内存中,具体为:在接收到IP分片的第一个包时创建内存,所述内存的起始地址保存在流结构的半连接中,同时还保存着第一个数据包的序列号起始值、内存的当前偏移值、以及一个地址偏移队列;当一个需要写入的数据包到达时,根据序列号确定内存中的偏移地址,直接写入;如果该序列号与半连接中保存的当前偏移值相等,则说明该数据包是连续的,如果不相等,则说明该数据包比之前的数据包先到了,需要保存其序列号到地址偏移队列中,每次当前偏移值修改时都需要与这个队列中的值进行比较,如果找到相等的则证明之后的数据包已经到了,需要把当前偏移值继续修改到没有记录数据包的地方。与现有技术相比,本专利技术的有益效果:(1)将零散的内存分配和释放改为大内存,有效地节省了内存的分配和释放的时间,提高了内存管理的效率。(2)将频繁的写文件操作,该为一次性的写操作,有效节省了文件操作所消耗的时间。(3)无需线程中的文件拷贝等操作,节省了很大的时间。附图说明图1为本专利技术的流程图;图2为Libnids写内存详细设计图。具体实施方式为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。本专利技术实施例提供一种基于Libnids的协议还原方法,如图1所示,该方法为:根据接收到的数据包为IP分片的第一个包获取所述第一个包对应的四元组,之后,根据所述第一个包对应的四元组查找流结构,并且对所述查找到的流结构重建加入用于保存IP分片序列号的序列号队列;当接收到的数据包为IP分片的非第一个包时,根据该数据包的目的IP查找到对应的HOST,在查找到的HOST对应的若干个流结构中查找对应的流结构,将该数据包直接写入该流结构的对应的内存中。该方法还包括:当接收到的数据包不是为IP分片时,根据该数据包对应的四元组查找对应的流结构,之后,将该数据包直接写入该流结构的对应的内存中。该方法之前还包括:创建一个新的c文件用于管理内存、以及.h文件用于定义内存节点的结构;在启动的时候首先读取配置文件,获取每一种协议节点分配的空间大小,和每一种协议允许的最大连接数,根据这两个信息计算出需要的内存空间;分配内存空间,根据不同的协议创建节点,节点的指针指向相应的内存地址,并初始化节点内容;创建全局的链表头将所有的节点串起来,对不同协议的链表头进行分别管理;创建free链表头用于保存闲置的节点,分配给线程使用,线程释放的节点再重新加入到free链中;在链表头中创建互斥量,在多线程中对申请节点的线程进行互斥操作。所述将该数据包直接写入该流结构的对应的内存中之后,该方法还包括读取内存中保存的数据包进行数据还原。所述将该数据包直接写入该流结构的对应的内存中,如图2所示,具体为:在Libnids的半连接结构体struct half_stream中加入内存节点的指针变量,在接收到连接数据,确定需要空间的时候则调用节点申请的接口获取一个内存节点;在连接关闭或者超时的时候,将内存节点作为参数传递给协议处理队列,协议处理线程也能够直接从内存中获取数据,等到协议处理线程将所有的解析工作完成之后,再将所有的内存信息写到磁盘文件中,最后调用内存节点的释放接口;Libnids写内存直接在Libnids里面判断连接的半连接数据是否需要,并且在连接结束的时候将对应的节点插入到对应线程的处理队列中。所述将该数据包直接写入该流结构的对应的内存中,具体为:在接收到IP分片的第一个包时创建内存,所述内存的起始地址保存在流结构的半连接中,同时还保存着第一个数据包的序列号起始值、内存的当前偏移值、以及一个地址偏移队本文档来自技高网...
基于Libnids的协议还原方法

【技术保护点】
一种基于Libnids的协议还原方法,其特征在于,该方法为:根据接收到的数据包为IP分片的第一个包获取所述第一个包对应的四元组,之后,根据所述第一个包对应的四元组查找流结构,并且对所述查找到的流结构重建加入用于保存IP分片序列号的序列号队列;当接收到的数据包为IP分片的非第一个包时,根据该数据包的目的IP查找到对应的HOST,在查找到的HOST对应的若干个流结构中查找对应的流结构,将该数据包直接写入该流结构的对应的内存中。

【技术特征摘要】
1.一种基于Libnids的协议还原方法,其特征在于,该方法为:根据接收到的数据包为IP分片的第一个包获取所述第一个包对应的四元组,之后,根据所述第一个包对应的四元组查找流结构,并且对所述查找到的流结构重建加入用于保存IP分片序列号的序列号队列;当接收到的数据包为IP分片的非第一个包时,根据该数据包的目的IP查找到对应的HOST,在查找到的HOST对应的若干个流结构中查找对应的流结构,将该数据包直接写入该流结构的对应的内存中。2.根据权利要求1所述的基于Libnids的协议还原方法,其特征在于,该方法还包括:当接收到的数据包不是为IP分片时,根据该数据包对应的四元组查找对应的流结构,之后,将该数据包直接写入该流结构的对应的内存中。3.根据权利要求1或2所述的基于Libnids的协议还原方法,其特征在于,该方法之前还包括:创建一个新的c文件用于管理内存、以及.h文件用于定义内存节点的结构;在启动的时候首先读取配置文件,获取每一种协议节点分配的空间大小,和每一种协议允许的最大连接数,根据这两个信息计算出需要的内存空间;分配内存空间,根据不同的协议创建节点,节点的指针指向相应的内存地址,并初始化节点内容;创建全局的链表头将所有的节点串起来,对不同协议的链表头进行分别管理;创建free链表头用于保存闲置的节点,分配给线程使用,线程释放的节点再重新加入到free链中;在链表头中创建互斥量,在多线程中对申请节点的线程进行互斥操作。4.根据权利要求3所述的基于Libnids的协议还原方法,其特征在于,所述将该数据包直接写入该流结构的对...

【专利技术属性】
技术研发人员:白肖陈宏伟何建锋刘亚轩
申请(专利权)人:西安交大捷普网络科技有限公司
类型:发明
国别省市:陕西;61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1