原创翻译,转载请注明出处。

DPDK的librte_pdump库,提供了在DPDK框架下抓包的功能。这个库通过完全复制Rx和Tx的mbuf到一个新的内存池,因此它降低应用程序的性能,所以只推荐在调试的时候使用。
pdump库提供了如下的API来初始化这个抓包框架,使能或者停止抓包,以及清理退出抓包框架。

  • rte_pdump_init(): 初始化抓包框架.
  • rte_pdump_enable(): 在一个端口队列开启抓包.注意: 过滤选项将在以后实现,目前只是个占位的.
  • rte_pdump_enable_by_deviceid(): 在一个设备ID(vdev名称或者pci地址)和队列抓包. 注意: 过滤选项将在以后实现,目前只是个占位的.
  • rte_pdump_disable(): 在一个端口队列停止抓包.
  • rte_pdump_disable_by_deviceid(): 停止在一个设备ID(vdev名称或者pci地址)和队列抓包
  • rte_pdump_uninit(): 清理退出抓包框架.
  • rte_pdump_set_socket_dir(): 设置服务端或客户端socket路径.注意: 这个接口是非线程安全的.

1.操作流程
librte_pdump库是客户端/服务端的工作模式。服务端负责开启或者停止抓包,客户端负责请求开启或停止抓包。
抓包框架在初始化的时候,创建了线程和服务端的socket,并把socket放在线程中处理。应用程序在调用这个框架的初始化的时候,通过传入默认的路径参数,

如root用户下,/var/run/.dpdk,非root用户
~/.dpdk,就会创建客户端socket,并发送请求到服务端。服务端会监听客户端的开启或停止抓包请求。

2.实现细节
rte_pdump_init()初始化抓包框架并创建线程和服务端socket。socket在线程里监听客户端的开启或停止抓包的请求。
rte_pdump_enable()
和 rte_pdump_enable_by_deviceid()
开启抓包。每调用一次这些API,pdump库就会创建一个独立的客户端socket,并发送"pdump
enable"的请求到服务端。

服务端监听到这个请求就会通过给定的端口或者设备ID以及队列的组合在Ethernet RX
和TX注册回调函数,之后服务端就会镜像数据包到一个新的内存池,并将让它们在客户端传入的rte_ring队列上入队。

服务端会发送请求回应给客户端关于请求处理的状态。在收到服务端的回应后,客户端的socket就关闭了。

rte_pdump_disable()

rte_pdump_disable_by_deviceid()停止抓包。每调用一次这些API,pdump库就会创建一个独立的客户端socket,并发送"pdump
disable"的请求到服务端。

服务端监听到这个请求就会通过给定的端口或者设备ID以及队列的组合在Ethernet RX
和TX删除回调函数,之后服务端就会镜像数据包到一个新的内存池,并将让它们在客户端传入的rte_ring队列上入队。

服务端会发送请求回应给客户端关于请求处理的状态。在收到服务端的回应后,客户端的socket就关闭了。

rte_pdump_uninit(),结束抓包框架,并关闭线程和服务端的socket。
rte_pdump_set_socket_dir()
通过 type 这个参数来设置指定的路径给服务端或者客户端。如果给定的路径是NULL,那么会使用默认的路径,如:/var/run/.dpdk
(root用户)或者 ~/.dpdk (非root用户)。

客户端需要调用这个API去设置他们服务端socket的不同于默认路径的路径

3.使用举例:
DPDK提供 app/pdump 工具,可以参考它来开发自己的抓包工具。

DPDK如何抓包的更多相关文章

  1. Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收!

    目录 01 简介 02 tcpdump 命令选项 03 过滤器 04 常用操作 4.1 抓取某主机的数据包 4.2 抓取某端口的数据包 4.3 抓取某网络(网段)的数据包 4.4 抓取某协议的数据包 ...

  2. android http 抓包

    有时候想开发的时候想看APP发出的http请求和响应是什么,这就需要抓包了,这可以得到一些不为人知的api,比如还可以干些“坏事”... 需要工具: Fiddler2 抓包(点击下载) Android ...

  3. charles工具抓包教程(http跟https)

    1.下载charles 可以去charles官网下载,下载地址:http://www.charlesproxy.com/download/    根据自己的操作系统下载对应的版本,然后进行安装,然后打 ...

  4. 从Fiddler抓包到Jmeter接口测试(简单的思路)

    备注:本文为博主的同事总结的文章,未经博主允许不得转载. Fiddler下载和配置安装 从网上下载fiddler的安装包即可,直接默认,一直点击下一步,直至安装完成. 安装完成后直接打开Fiddler ...

  5. 逆向工程 - Reveal、IDA、Hopper、HTTPS抓包 等

    目录: 一. iOS 如何做才安全 二.ipa文件 三.沙盒 中的数据 四.Reveal:查看 任何APP 的UI结构 五.反编译工具:IDA 六.反编译工具:Hopper Disassembler ...

  6. CatchPacket网络抓包软件

    CatchPacket网络抓包软件  qq  22945088431.技术特点:基于WinPcap库,c# winform2.实现获取机器所有网卡,可任意选择监听3.可以捕获常见网络协议arp dns ...

  7. mac 抓包工具charles v3.9.3 安装破解步骤

    一.下载 先到它的官网http://www.charlesproxy.com/可下载到最新版本,这个下载有点慢,我已经将它放到网盘中了:http://pan.baidu.com/s/1skTXRIl ...

  8. 运维之网络安全抓包—— WireShark 和 tcpdump

    ------------------------------------------------本文章只解释抓包工具的捕获器和过滤器的说明,以及简单使用,应付日常而已----------------- ...

  9. Jmeter实现登录bugfree、新建bug、解决bug脚本(抓包工具实现)

    环境 Chrome jmeter3.1 fiddler4 win7 32位 Linux CentOs6.4 bugfree3.0.1 链接:http://pan.baidu.com/s/1gfHpbp ...

随机推荐

  1. Python基础—12-面向对象(02)

    面向对象 面向对象三大特点 封装:既可对数据结构进行封装,又可对处理数据的方法进行封装 继承:强调的父子类的关系 多态:不同对象调用相同的方法,会有不同的响应 类的继承 相关概念 继承:父类的属性和方 ...

  2. iOS之性能的优化

    本文转自:http://m.blog.csdn.net/article/details?id=51638925 写在前面 本文来自iOS Tutorial Team 的 Marcelo Fabri,他 ...

  3. 你不知道的javaScript笔记(7)

    异步:现在与将来 分块的程序 可以把JavaScript 程序写在单独的js 文件中,这个程序是由多个块组成的,这些块 中只有一个是现在执行,其余在捡来执行,最常见的块单位是函数. 例如: funct ...

  4. noip模拟赛 动态仙人掌(并查集,贪心)

    思路: 贪心+并查集 因为45‘,所以可以很方便的算出每个仙人掌的最晚起跳(左端点) 右端点自然也能出来 先按左端点排序 如果他右面的和他相交,就更新 用并查集维护这个更新的关系 更新的同时维护高就好 ...

  5. ABAP术语-Function Builder

    Function Builder 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/03/1063196.html Tool for creat ...

  6. 【原创】os.chdir设置的工作路径和sys.path之间到底是个啥关系?

    转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9390455.html   直接放上测试后的结论(测试代码和截图过多,有兴趣的小伙伴可自己测试,未来看情况 ...

  7. Hadoop(2)--hdfs

    Hadoop(2) Hadoop底层封装的的是HDFS和MapReduce两种框架 在Hdfs中采用的是主从结构(Madter-slaver)就像领导和员工一样,领导负责整个公司的管理工作,而员工就负 ...

  8. while,格式化输出

    1. while循环: while 条件: 代码块(循环体) num=1 while num<=5: print(num) num+=1 break:结束循环;停止当前本层循环 continue ...

  9. STL——泛型编程

    1.指针的算术运算 对于一个存储int数据的vector,我们要查找某值是否存在于其中,采用下标操作的做法如下: int* find(const vector<int> &vec, ...

  10. HyperLedger Fabric 1.4 交易流程(6.3)

    区块链最主要的特性之一是去中心化,没有了中心机构的集中处理,为了达成数据的一致性,就需要网络中全民参与管理,并以某种方法达成共识,所以区块链的交易流程也就是共识的过程.       在Fabric中, ...