基于WinPcap的网络数据实时采集存储方法和装置与流程

文档序号:19124208发布日期:2019-11-13 01:57阅读:873来源:国知局
基于WinPcap的网络数据实时采集存储方法和装置与流程

本发明涉及网络数据传输技术领域,尤其涉及一种基于winpcap的网络数据实时采集存储方法和装置。



背景技术:

当今高速网络环境中,常用的基于tcp/ip协议的数据传输因为涉及到多次组包拆包的过程,在有限的网卡硬件资源下,消耗了一定的网卡带宽,对传输速率有一定的影响;为此提出了一种基于winpcap的数据传输方法。winpcap在windows平台下为应用程序提供访问底层网络的能力,可用于windows系统下的直接的网络编程。基于winpcap的数据传输通过网卡驱动访问网卡硬件,减少了组包拆包的开销,充分利用了传输带宽,提高了数据传输速率。

但是,发明人发现现有技术中至少存在如下技术问题:

当传输的数据量较大时,传统的基于winpcap的数据抓包存在严重的丢包问题,无法满足大数据量的传输需求。



技术实现要素:

为解决上述问题,本发明提供一种基于winpcap的网络数据实时采集存储方法和装置,能够克服高速大数据量传输时的丢包问题。

第一方面,本发明提供一种基于winpcap的网络数据实时采集存储方法,包括:

实现初始化,所述初始化包括:创建数据采集线程和数据存储线程,并在主机动态内存中创建一链表队列;

启动所述数据采集线程,通过winpcap接口接收网络数据,对接收到的每个数据包进行重新封包,将重新封包后的网络数据作为所述链表队列的元素按顺序存储到所述链表队列的尾部;

当所述链表队列中存储的数据量达到设定阈值时,启动所述数据存储线程,在所述链表队列尾部写入数据的同时同步地从所述链表队列的头部按顺序读取数据,将读取到的数据存储到主机存储器。

可选地,所述初始化还包括:创建数据解析线程;

所述方法还包括:

启动所述数据解析线程,对存储到所述主机存储器的数据进行解析。

可选地,基于winpcap库文件创建所述数据采集线程和数据存储线程。

可选地,所述对接收到的每个数据包进行重新封包包括:

去掉每个数据包的帧头部分,并为每个数据包添加对应的序列号。

第二方面,本发明提供一种基于winpcap的网络数据实时采集存储装置,包括:

初始化模块,用于实现初始化,所述初始化包括:创建数据采集线程和数据存储线程,并在主机动态内存中创建一链表队列;

数据采集模块,用于启动所述数据采集线程,通过winpcap接口接收网络数据,对接收到的每个数据包进行重新封包,将重新封包后的网络数据作为所述链表队列的元素按顺序存储到所述链表队列的尾部;

数据存储模块,用于当所述链表队列中存储的数据量达到设定阈值时,启动所述数据存储线程,在所述链表队列尾部写入数据的同时同步地从所述链表队列的头部按顺序读取数据,将读取到的数据存储到主机存储器。

可选地,所述初始化模块,还用于创建数据解析线程;

对应地,所述装置还包括:

数据解析模块,用于启动所述数据解析线程,对存储到所述主机存储器的数据进行解析。

可选地,所述初始化模块,基于winpcap库文件创建所述数据采集线程和数据存储线程。

可选地,所述数据采集模块,对接收到的每个数据包进行重新封包包括:

去掉每个数据包的帧头部分,并为每个数据包添加对应的序列号。

第三方面,本发明提供一种主机,所述主机包括上述基于winpcap的网络数据实时采集存储装置。

本发明提供的基于winpcap的网络数据实时采集存储方法和装置,利用链表队列对接收数据进行缓冲,将接收到的数据首先按顺序存储到链表机制的缓冲队列中,然后由数据存储线程读出并存储到存储器。同时利用多线程机制,包括数据接收线程、数据存储线程和数据解析线程,在高速网络数据进行大数据量的传输时,克服了数据丢包问题,能够实时采集和存储大数据量的网络数据并保证将数据正确记录到存储器中。

附图说明

图1为本发明一实施例的基于winpcap的网络数据实时采集存储方法的流程示意图;

图2为本发明另一实施例的基于winpcap的网络数据实时采集存储方法的流程示意图;

图3为本发明一实施例的基于winpcap的网络数据实时采集存储装置的结构示意图;

图4为本发明另一实施例的基于winpcap的网络数据实时采集存储装置的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明一实施例提供一种基于winpcap的网络数据实时采集存储方法,如图1所示,所述方法包括:

s101、实现初始化,所述初始化包括:创建数据采集线程和数据存储线程,并在主机动态内存中创建一链表队列;

主机在传统winpcap.dll基础上,创建数据采集线程和数据存储线程,创建了链表队列;这里的链表队列,即基于链表实现的队列,该链表队列采用fifo(firstinfirstout)机制,新元素(等待进入队列的元素)总是被插入到链表队列的尾部,而读取的时候总是从链表队列的头部开始读取。每次读取一个元素,释放一个元素。动态创建,动态释放。因而不存在溢出等问题,遍历也方便;该链表队列作为一数据缓冲队列,用于对接收到的网络数据进行缓冲。

s102、启动所述数据采集线程,通过winpcap接口接收网络数据,对接收到的每个数据包进行重新封包,将重新封包后的网络数据作为所述链表队列的元素按顺序存储到所述链表队列的尾部;

s103、当所述链表队列中存储的数据量达到设定阈值时,启动所述数据存储线程,在所述链表队列尾部写入数据的同时同步地从所述链表队列的头部按顺序读取数据,将读取到的数据存储到主机存储器。

可选地,在实现初始化时,还可以创建一数据解析线程,用于对存储器中的数据进行解析;

对应地,如图2所示,所述方法还包括:

s104、在将读取到的数据存储到主机存储器之后,启动所述数据解析线程,对存储到所述主机存储器的数据进行解析。

可选地,在步骤s102中,对接收到的每个数据包进行重新封包包括:

去掉每个数据包的帧头部分(包括物理地址、数据包长度等信息),为每个数据包添加序列号,通过序列号对数据包加以区分。

本发明实施例的基于winpcap的网络数据实时采集存储方法,主机在传统winpcap.dll上,二次开发,增加了采集和存储线程,创建了链表队列,利用链表队列对接收数据进行缓冲,将接收到的数据首先按顺序存储到链表机制的缓冲队列中,然后由数据存储线程读出并存储到存储器。同时利用多线程机制,包括数据接收线程、数据存储线程和数据解析线程,在高速网络数据进行大数据量的传输时,克服了数据丢包问题,能够实时采集和存储大数据量的网络数据并保证将数据正确记录到存储器中。

本发明实施例的方法适用于基于winpcap的主机,假设主机通过网络和一嵌入式设备连接,主机和嵌入式设备进行数据通信时,嵌入式设备外接两路sram作为兵乓缓存,控制两路sram轮流接收外部数据及发送数据到数据链路层,主机应用本发明的基于winpcap的网络数据实时采集存储方法,实现高速大数据量的网络数据实时采集和存储。

具体地,举例说明主机应用本发明实施例的采集存储方法和嵌入式设备进行数据传输的一个完整的工作流程,步骤如下:

步骤1、主机寻找网卡适配器,找到所需网卡,完成捕获长度、超时时间还有捕获模式的设置;实现初始化,创建数据采集线程、数据存储线程和数据解析线程,创建链表队列;

步骤2、主机发送准备好命令给嵌入式设备;

步骤3、嵌入式设备收到主机的准备好命令,写数据到一路sram中,写满之后发送准备好命令给主机;在发送准备好命令之后,写数据到另一路sram中,并发送写好的一路sram中的数据到数据链路层;

步骤4、主机接收到嵌入式设备的准备好命令,启动数据采集线程,通过winpcap接口接收嵌入式设备发来的网络数据,每采集到一包数据,重新封包存到内存单元,并将该内存单元添加到链表队列的尾部;

步骤5、主机采集到一定量数据时,开启数据存储线程,从链表队列头部开始访问链表队列,并将链表队列头部的存储单元中数据写入指定的磁盘文件,释放该存储单元单元占用的内存资源;

步骤6、主机开启数据解析线程,解析已经存储到磁盘文件的数据。

本发明另一实施例提供一种基于winpcap的网络数据实时采集存储装置,如图3所示,包括:

初始化模块301,用于实现初始化,所述初始化包括:创建数据采集线程和数据存储线程,并在主机动态内存中创建一链表队列;

数据采集模块302,用于启动所述数据采集线程,通过winpcap接口接收网络数据,对接收到的每个数据包进行重新封包,将重新封包后的网络数据作为所述链表队列的元素按顺序存储到所述链表队列的尾部;

数据存储模块303,用于当所述链表队列中存储的数据量达到设定阈值时,启动所述数据存储线程,在所述链表队列尾部写入数据的同时同步地从所述链表队列的头部按顺序读取数据,将读取到的数据存储到主机存储器。

可选地,所述初始化模块301,还用于创建数据解析线程;

对应地,如图4所示,所述装置还包括:

数据解析模块304,用于启动所述数据解析线程,对存储到所述主机存储器的数据进行解析。

可选地,所述初始化模块301,基于winpcap库文件创建所述数据采集线程和数据存储线程。

可选地,所述数据采集模块302,对接收到的每个数据包进行重新封包包括:

去掉每个数据包的帧头部分,并为每个数据包添加对应的序列号。

本发明另一实施例还提供一种主机,所述主机包括上述基于winpcap的网络数据实时采集存储装置。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

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

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