抓取网卡数据包的方法、装置及电子设备

文档序号:1589720 发布日期:2020-01-03 浏览:16次 >En<

阅读说明:本技术 抓取网卡数据包的方法、装置及电子设备 (Method and device for capturing network card data packet and electronic equipment ) 是由 陈闯 潘飚 王鹤 王能洁 于 2019-10-16 设计创作,主要内容包括:本发明提供了一种抓取网卡数据包的方法、装置及电子设备,涉及计算机技术领域,该方法包括:设置网卡的网卡队列按照指定顺序接收数据包;其中,网卡的网卡队列为至少一个;查找网卡队列中的目标网卡队列;获取目标网卡队列接收的数据包,并通过执行预设函数对获取到的数据包进行内存拷贝,将内存拷贝后的数据包作为抓取到的网卡数据包;其中,预设函数是用于修改数据包引用计数的函数。本发明有效提升了抓取网卡数据包的效率。(The invention provides a method, a device and electronic equipment for capturing a network card data packet, which relate to the technical field of computers, and the method comprises the following steps: setting a network card queue of a network card to receive data packets according to a specified sequence; the network card queue of the network card is at least one; searching a target network card queue in the network card queue; acquiring a data packet received by a target network card queue, performing memory copy on the acquired data packet by executing a preset function, and taking the data packet after the memory copy as a captured network card data packet; wherein the preset function is a function for modifying the packet reference count. The invention effectively improves the efficiency of capturing the network card data packet.)

抓取网卡数据包的方法、装置及电子设备

技术领域

本发明涉及计算机技术领域,尤其是涉及一种抓取网卡数据包的方法、装置及电子设备。

背景技术

随着互联网的发展,在网络中的数据包流量越来越大,提升抓取网卡数据包的抓取效率至关重要。目前,在抓取网卡数据包时,通常先将数据包进行一次内存拷贝,将拷贝后的结果写入pcap文件中,并将内存拷贝后的网卡数据包作为抓取到的网卡数据包。但是通常数据包的内存都较大,对数据包进行内存拷贝耗时较长,导致抓取网卡数据包效率较低。针对上述抓取网卡数据包在实际应用中的问题,目前尚未提出有效的解决方案。

发明内容

本发明的目的在于提供一种抓取网卡数据包的方法、装置及电子设备,以缓解了现有技术中在抓取网卡数据包时由于内存拷贝耗时较长导致抓取数据包效率较低的技术问题,有效提升了抓取网卡数据包的效率。

第一方面,本发明实施例提供了一种抓取网卡数据包的方法,包括:设置网卡的网卡队列按照指定顺序接收数据包;其中,网卡的网卡队列为至少一个;查找网卡队列中的目标网卡队列;获取目标网卡队列接收的数据包,并通过执行预设函数对获取到的数据包进行内存拷贝,将内存拷贝后的数据包作为抓取到的网卡数据包;其中,预设函数是用于修改数据包引用计数的函数。

进一步,上述通过执行预设函数对获取到的数据包进行内存拷贝的步骤,包括:获取数据包的第一引用计数,并通过执行预设函数对第一引用计数进行加值运算,得到第二引用计数;根据第二引用计数对数据包进行内存拷贝。

进一步,上述设置网卡的网卡队列按照指定顺序接收数据包的步骤,包括:获取网卡的网卡队列的队列配置信息;队列配置信息包括队列个数及队列长度;根据获取的队列配置信息,设置网卡的网卡队列按照指定顺序接收数据包。

进一步,上述查找网卡队列中的目标网卡队列的步骤,包括:查找网卡队列中接收到数据包的网卡队列;将接收到数据包的网卡队列确定为目标网卡队列。

进一步,上述方法还包括:将抓取到的网卡数据包写入指定文件。

第二方面,本发明实施例提供了一种抓取网卡数据包的装置,包括:网卡设置模块,用于设置网卡的网卡队列按照指定顺序接收数据包;其中,网卡的网卡队列为至少一个;队列查找模块,用于查找网卡队列中的目标网卡队列;抓包模块,用于获取目标网卡队列接收的数据包,并通过执行预设函数对获取到的数据包进行内存拷贝,将内存拷贝后的数据包作为抓取到的网卡数据包;其中,预设函数是用于修改数据包引用计数的函数。

进一步,上述抓包模块用于:获取数据包的第一引用计数,并通过执行预设函数对第一引用计数进行加值得到第二引用计数;根据第二引用计数对数据包进行内存拷贝。

第三方面,本发明实施例提供一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的计算机可执行指令,处理器执行计算机可执行指令以实现前述实施方式任一项的抓取网卡数据包的方法的步骤。

第四方面,本发明实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行前述实施方式任一项的抓取网卡数据包的方法的步骤。

本发明提供的了一种抓取网卡数据包的方法、装置及电子设备,可以设置网卡的网卡队列按照指定顺序接收数据包,并查找网卡队列中的目标网卡队列,进而获取目标网卡队列接收的数据包,并通过执行预设函数(用于修改数据包引用计数的函数)对获取到的数据包进行内存拷贝,将内存拷贝后的数据包作为抓取到的网卡数据包。上述方式通过执行用于修改引用计数的预设函数,可以在抓取数据包时对数据包进行内存拷贝,缩短了内存拷贝的时间,从而有效提升了抓取数据包的效率。

本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明

具体实施方式

或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种抓取网卡数据包的方法的流程示意图;

图2为本发明实施例提供的另一种抓取网卡数据包的方法的流程示意图;

图3为本发明实施例提供的一种抓取网卡数据包的装置的结构示意图;

图4为本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

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

考虑到现有技术中在抓取网卡数据包时,通常由于内存拷贝的耗时较长,因此导致抓取数据包的效率较低。基于此,本发明实施例提供了一种抓取网卡数据包的方法、装置及电子设备,可以有效的提升抓取数据包的效率。

为便于对本实施例进行理解,首先对本发明实施例所公开的一种抓取网卡数据包的方法进行详细介绍,参见图1所示的一种抓取网卡数据包的方法的流程示意图,该方法主要包括以下步骤S102至步骤S106:

步骤S102:设置网卡的网卡队列按照指定顺序接收数据包。

在一种实施方式中,设置网卡的队列用于接收数据包,由于设置网卡多队列可以实现高速率抓取数据包,因此设置每个网卡的网卡队列为至少一个,设置好的网卡队列按照指定顺序进行接收数据包,诸如,多个网卡队列可以按照循环顺序接收数据包。

步骤S104:查找网卡队列中的目标网卡队列;

按照上述指定的顺序进行接收数据包后,需要通过查找多个网卡队列中的接收数据包的网卡队列(也即目标网卡队列),对网卡数据包进行抓取。

步骤S106:获取目标网卡队列接收的数据包,并通过执行预设函数对获取到的数据包进行内存拷贝,将内存拷贝后的数据包作为抓取到的网卡数据包。

在一种实施方式中,通过执行预设函数实现对获取的网卡数据包进行内存拷贝,预设函数是用于修改数据包引用计数的函数,通过修改数据包的引用计数,实现数据包的内存拷贝,在实际应用中,可以通过将引用计数加一实现数据包的内存拷贝,并将拷贝后的数据包作为抓取到的数据包。

本发明实施例提供的抓取网卡数据包的方法,可以设置网卡的网卡队列按照指定顺序接收数据包,并查找网卡队列中的目标网卡队列,进而获取目标网卡队列接收的数据包,并通过执行预设函数(用于修改数据包引用计数的函数)对获取到的数据包进行内存拷贝,将内存拷贝后的数据包作为抓取到的网卡数据包。上述方式通过执行用于修改引用计数的预设函数,可以在抓取数据包时对数据包进行内存拷贝,缩短了内存拷贝的时间,从而有效提升了抓取数据包的效率。

为便于对上述实施例中的步骤S102进行理解,本发明实施例给出一种设置网卡队列的具体的实施方式,上述步骤S102实现网卡队列的设置主要包括以下步骤1至步骤2:

步骤1,获取网卡的网卡队列的队列配置信息,其中,队列配置信息包括队列个数及队列长度。

步骤2,根据获取的队列配置信息,设置网卡的网卡队列按照指定顺序接收数据包。通过队列配置信息对网卡队列进行配置,即配置网卡使用队列的个数及长度,启动完成配置的网卡,则配置好的网卡队列可以按照指定的顺序进行接收网络上的数据包,诸如,可以按照循环顺序进行接收数据包。

在一种实施方式中,为了便于对上述步骤S104进行理解,本发明实施例提供了一种具体的查找网卡队列中的目标网卡队列的方法,参见如下步骤a和步骤b:

步骤a,查找网卡队列中接收到数据包的网卡队列。

步骤b,将接收到数据包的网卡队列确定为目标网卡队列。

由于在前述步骤1中配置了网卡队列的个数,网卡队列为多个,因此通过在网卡队列中查找,并将当前接收到数据包的网卡队列确定为目标网卡队列,便于从网卡队列中对数据包进行抓取。

在一种实施方式中,为了便于对上述步骤S106进行理解,本发明实施例提供了一种具体的通过执行预设函数对获取到的数据包进行内存拷贝的方法,参见如下步骤(1)至步骤(2):

步骤(1),获取数据包的第一引用计数,并通过执行预设函数对第一引用计数进行加值运算,得到第二引用计数。数据包的信息可以包括数据包的内存虚拟地址,物理地址,长度,hash值,所属内存池,引用计数等信息,获取到目标队列的网卡数据包后,获取数据包的引用计数(也即第一引用计数),通过执行预设函数对数据包的引用计数进行加值,诸如,对引用计数加一得到新的引用计数(也即第二引用计数)。对引用计数进行修改采用原子操作,原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,运用原子操作是为了确保引用计数只有当前线程进行修改,其他线程不会同一时刻去修改当前数据包引用计数的值。

步骤(2),根据第二引用计数对数据包进行内存拷贝。通过上述方式得到新的引用计数,实现了数据包的内存拷贝,并将进行内存拷贝的数据包作为抓取到的网卡数据包。

在一种实施方式中,将抓取到的网卡数据包写入指定文件,诸如,指定文件可以是pcap文件。

为便于理解,以DPDK(Data Plane Development Kit,数据平面开发套件)中dpdk-pdump抓包工具抓取网卡数据包为例,对一种具体的抓取网卡数据包的方法进行详细介绍,参见图2所示的另一种抓取网卡数据包的方法的流程示意图,该方法主要包括如下步骤S202至步骤S206:

步骤S202:设置大页内存。

首先需要设置大页内存,大页内存用于存放网卡信息及DPDK主进程接收到的数据包的信息,编译DPDK库并绑定DPDK网卡。

步骤S204:DPDK获取网卡数据包。

在一种具体的实施方式中,通过DPDK主进程获取网卡数据包,在获取网卡数据包时,需要初始化大页内存,为抓取网卡数据包时创建内存池提供地址存放空间。设置DPDK网卡的网卡队列,配置网卡的队列个数及长度。启动网卡,网卡开始接收数据包,通过设置的网卡队列循环获取网卡接收的数据包。另外,初始化通过本地socket文件与DPDK-pdump通信的将DPDK获取到的网卡数据包传递到DPDK-pdump工具。

步骤S206:DPDK-pdump工具抓取网卡数据包。

在DPDK-pdump工具抓取网卡数据包时,具体的抓取步骤包括如下步骤A至步骤C:

步骤A,初始化大页内存,在一种实施方式中,进行抓取网卡数据包时,通过初始化大页内存,获取DPDK主进程在接收数据包是初始化大页内存时创建的大页内存,并使用初始化大页内存生产的内存空间,这样可以保证网卡接收的数据包的地址空间相同,从而在抓包进程中读取到网卡数据包的数据信息。

步骤B,查找目标网卡队列;

步骤C,设置目标网卡队列在收包时的回调函数,进行抓取网卡数据包,通过执行回调函数进行抓取数据包,执行回调函数时的操作是:将数据包的引用计数加一,并将数据包写入pcap文件中,再将数据包的引用计数减一。通过修改引用计数对数据包进行内存拷贝,并将内存拷贝的数据包作为抓取到的数据包。

在实际应用中,在抓取到网卡数据包后,会将抓取到的数据包传递到上层应用程序进行处理。

基于前述抓取网卡数据包的方法,本发明实施例还提供了与前述抓取网卡数据包的方法相对应的抓取网卡数据包的装置,参见图3所示的一种抓取网卡数据包的装置的结构示意图,该装置主要包括以下模块:

网卡设置模块302,用于设置网卡的网卡队列按照指定顺序接收数据包;其中,网卡的网卡队列为至少一个;

队列查找模块304,用于查找网卡队列中的目标网卡队列;

抓包模块306,用于获取目标网卡队列接收的数据包,并通过执行预设函数对获取到的数据包进行内存拷贝,将内存拷贝后的数据包作为抓取到的网卡数据包;其中,预设函数是用于修改数据包引用计数的函数。

本发明实施例提供的抓取网卡数据包的装置,可以设置网卡的网卡队列按照指定顺序接收数据包,并查找网卡队列中的目标网卡队列,进而获取目标网卡队列接收的数据包,并通过执行预设函数(用于修改数据包引用计数的函数)对获取到的数据包进行内存拷贝,将内存拷贝后的数据包作为抓取到的网卡数据包。上述方式通过执行用于修改引用计数的预设函数,可以在抓取数据包时对数据包进行内存拷贝,缩短了内存拷贝的时间,从而有效提升了抓取数据包的效率。

在一种实施方式中,上述抓包模块306,进一步用于获取数据包的第一引用计数,并通过执行预设函数对第一引用计数进行加值得到第二引用计数;根据第二引用计数对数据包进行内存拷贝。

在一种实施方式中,上述网卡设置模块302,进一步用于获取每个网卡的网卡队列的队列配置信息;队列配置信息包括队列个数及队列长度;根据获取的队列配置信息,设置每个网卡的网卡队列按照指定顺序接收数据包。

在一种实施方式中,上述队列查找模块304,进一步用于查找网卡队列中接收到数据包的网卡队列;将接收到数据包的网卡队列确定为目标网卡队列。

在一种实施方式中,上述装置还包括:文件写入模块,用于将抓取到的网卡数据包写入指定文件。

本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。

本发明实施例提供了一种电子设备,具体的,该电子设备包括处理器和存储装置;存储装置上存储有计算机程序,计算机程序在被所述处理器运行时执行如上所述实施方式的任一项所述的方法。

图4为本发明实施例提供的一种电子设备的结构示意图,该电子设备100包括:处理器40,存储器41,总线42和通信接口43,所述处理器40、通信接口43和存储器41通过总线42连接;处理器40用于执行存储器41中存储的可执行模块,例如计算机程序。

其中,存储器41可能包含高速随机存取存储器(RAM,Random AccessMemory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口43(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。

总线42可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

其中,存储器41用于存储程序,所述处理器40在接收到执行指令后,执行所述程序,前述本发明实施例任一实施例揭示的流过程定义的装置所执行的方法可以应用于处理器40中,或者由处理器40实现。

处理器40可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器40中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器40可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器41,处理器40读取存储器41中的信息,结合其硬件完成上述方法的步骤。

本发明实施例所提供的抓取网卡数据包的方法、装置及电子设备的计算机程序产品,包括存储了处理器可执行的非易失的程序代码的计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统具体工作过程,可以参考前述实施例中的对应过程,在此不再赘述。

本发明实施例所提供的可读存储介质的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

11页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种CIFS网络带宽的优化方法、装置和介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!