linux内核发包工具pktgen

2023-05-16

pktgen使用说明

内核路径 net/core/pktgen.c
作者对于pktgen的介绍: 原作者编写的pdf介绍

pktgen.c 原理介绍

pktgen运用了proc 文件系统特征来实现用户和内核的交互,用户通过向proc中传输数据,内核接收到数据后进行解析按照预定义的操作执行,添加端口,填充报文,通过内核发包接口dev_queue_xmit/netdev_start_xmit 发送给网卡,省去了从用户态发包的大部分流程( 发包流程介绍,引用 )。

代码分析:加载pktgen.ko内核模块,module_init(pg_init); 会发现多了跟cpu core数相等的kpktgend_%d 内核线程,

static struct pernet_operations pg_net_ops = {
	.init = pg_net_init,
	.exit = pg_net_exit,
	.id   = &pg_net_id,
	.size = sizeof(struct pktgen_net),
};

然后配置时候主要涉及三个文件节点的操作 ,对相应节点文件做读写操作的时候触发对应的proc ops

kpktgend_%d

安装了内核模块以后,在/proc/net/pktgen/目录下面会创建对应的文件,对应的操作定义为

static const struct proc_ops pktgen_thread_proc_ops = {
	.proc_open	= pktgen_thread_open,
	.proc_read	= seq_read,
	.proc_lseek	= seq_lseek,
	.proc_write	= pktgen_thread_write,
	.proc_release	= single_release,
};

pktgen_thread_write 在多add device的操作的时候会在/proc/net/pktgen/ 下添加对应的网卡名称命名的文件例如:/proc/net/pktgen/eth0

网口节点

static const struct proc_ops pktgen_if_proc_ops = {
	.proc_open	= pktgen_if_open,
	.proc_read	= seq_read,
	.proc_lseek	= seq_lseek,
	.proc_write	= pktgen_if_write,
	.proc_release	= single_release,
};
通过pktgen_if_write 来实现对报文内容和发包逻辑的配置

pgctrl

static const struct proc_ops pktgen_proc_ops = {
	.proc_open	= pgctrl_open,
	.proc_read	= seq_read,
	.proc_lseek	= seq_lseek,
	.proc_write	= pgctrl_write,
	.proc_release	= single_release,
};

通过对pgctrl的控制来实现线程发包的开始,停止,重启。

使用场景

  1. 没有测试仪器的情况下对网卡,路由器,交换机等网络设备的带宽进行测试,根据包长不同会有不同表现,1500 包长达到10G测试下来没问题
  2. 特殊场景,绕过协议栈等上层的处理进行发包的需求
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux内核发包工具pktgen 的相关文章

  • 有关HTTP 401验证的那些事儿

    前段时间突然遇到有一个需求 xff1a 要求能够抓取到NVR上连接的摄像头设备列表 因为要的比较急 xff0c 而且我还没啃透海康SDK的文档 xff0c 所以只好考虑另辟蹊径 xff0c 用一些别的方法来达到目标咯 我们登录到NVR的we
  • LCD段码屏 真值表转换

    以lcd段码屏驱动芯片TM1621D为例子 typedef union struct uint8 t a 1 uint8 t b 1 uint8 t c 1 uint8 t d 1 uint8 t e 1 uint8 t f 1 uint8
  • 段码屏走线转换为真值表

    54117PIN1234567891011SEG1ABCDEG PM2EFG2ABCD3EFG COL3ABCD4EFG4ABCD1B 2A COL 3A 4A1ADEG 2BF 3BF 4BF1C 2CG 3CG 4CGPM 2DE 3D
  • 硬件电路,AD-DC电路中元器件的作用

    热敏电阻 xff1a 功率型NTC热敏电阻多用于电源抑制浪涌 1 在AC220V输入端串联热敏电阻 xff0c 在电路电源接通瞬间 xff0c 电路中会产生比正常工作时高出许多倍的浪涌电流 xff0c 而NTC热敏电阻器的初始阻值较大 xf
  • CentOS 7内核更换教程

    CentOS 7支持安装锐速的内核 xff1a 3 10 0 327 el7 x86 64 使用下面命令下载及更换内核 rpm ivh http xz wn789 com CentOSkernel kernel 3 10 0 229 1 2
  • 关于STM32 CAN 滤波器设置的记录

    滤波模式有以下两种 xff1a 屏蔽位模式 标识符列表模式 过滤器的位宽 xff1a 16位过滤器 32位过滤器 下面记录一下我做过测试的代码 代码说明 xff1a 这是CAN2的滤波器 xff0c stm32f107的两组CAN滤波器是共
  • 定时器判断串口接收结束

    void USART1 IRQHandler void 串口1中断服务程序 u8 Res if USART GetITStatus USART1 USART IT RXNE 61 RESET 接收中断 Res 61 USART Receiv
  • gcc编译时对'xxxx'未定义的引用问题

    这个主要的原因是gcc编译的时候 xff0c 各个文件依赖顺序的问题 在gcc编译的时候 xff0c 如果文件a依赖于文件b xff0c 那么编译的时候必须把a放前面 xff0c b放后面 例如 在main c中使用了temp xff0c
  • 【编译人生】跨平台程序设计BOOST库以及编译方案的选择

    boost库很方便 xff0c 不用说 xff0c 下面是编译方法 xff0c 以WINDOWS平台为例 1 在 boost解压缩文件路径下 xff08 可能不同版本的路径位置build有所不同 xff09 cd d tools build
  • CAN总线的标准帧和扩展帧

    CAN总线的标准帧和扩展帧主要决定帧ID的长度 xff0c 标准帧的帧ID长度是11位 xff0c 帧ID的范围是000 7FF 扩展帧的帧ID长度是29位 xff0c 帧ID的范围是0000 0000 1FFF FFFF CANopen帧
  • CAN扩展帧详解

    寻址方式
  • linux 发送get/post请求

    目录 get post 43 json get curl location request GET 39 http xxxx param1 61 2027xxxx 39 url参数中涉及特殊字符的参数部分 需要转义 例如 curl 34 h
  • ROS -PCL程序包建立和CMakelist.txt修改

    一 创建工作空间 wtj 64 wtj echo ROS PACKAGE PATH wtj 64 wtj mkdir p dev catkin ws src wtj 64 wtj cd dev catkin ws src wtj 64 wt
  • jetson nano 供电模式的切换或自定义供电模式

    前言 xff1a jetson nano 开发板在预设的10W MAXN 模式下需要用5v4A的DC供电 用5v2A的DC或者micro usb供电建议使用5W模式 供电不足会导致掉电关机 以下是学习jetson nano时 xff0c 对
  • 自动驾驶之——CAN总线简介

    自动驾驶技术之 无人驾驶中的CAN总线 CAN 是Controller AreaNetwork 的缩写 xff0c 中文名为控制器局域网络 xff0c 是ISO国际标准化的串行通信协议 xff0c 是一种用于实时应用的串行通讯协议总线 xf
  • CMake中find_package()查找指定版本的库,以Qt库多版本共存为例

    Qt安装了多个版本时 xff0c CMake中写的find package 到底找到的是哪个库 xff1f 例如 xff0c 我电脑安装了两个版本的Qt xff0c 一个是5 12 3另一个是5 14 2 此时我的CMake如何指定使用哪个
  • 游戏中常用的寻路算法(6):地图表示

    在本系列文档大部分内容中 xff0c 我都假设A 用于某种网格上 xff0c 其中的 节点 是一个个网格的位置 xff0c 边 是从某个网格位置出发的各个方向 然而 xff0c A 可用于任意图形 xff0c 不仅仅是网格 xff0c 有很
  • Redis 官方可视化工具

    RedisInsight 是一个直观高效的 Redis GUI 管理工具 xff0c 它可以对 Redis 的内存 连接数 命中率以及正常运行时间进行监控 xff0c 并且可以在界面上使用 CLI 和连接的 Redis 进行交互 xff08
  • 一个注解搞定接口返回数据脱敏

    下午惬意时光 xff0c 突然产品小姐姐走到我面前 xff0c 打断我短暂的摸鱼time xff0c 企图与我进行深入交流 xff0c 还好我早有防备没有闪 xff0c 打开瑞star的点单页面 xff0c 暗示没有一杯coffee解决不了
  • 系统架构性能问题诊断及优化思路

    01 系统性能问题分析流程 我们首先来分析下如果一个业务系统上线前没有性能问题 xff0c 而在上线后出现了比较严重的性能问题 xff0c 那么实际上潜在的场景主要来自于以下几个方面 业务出现大并发的访问 xff0c 导致出现性能瓶颈 上线

随机推荐

  • 在Redis分布式锁上,栽的8个跟头

    在分布式系统中 xff0c 由于 redis 分布式锁相对于更简单和高效 xff0c 成为了分布式锁的首先 xff0c 被我们用到了很多实际业务场景当中 但不是说用了 redis 分布式锁 xff0c 就可以高枕无忧了 xff0c 如果没有
  • 牢记16个有用的 SpringBoot 扩展接口

    1 背景 Spring的核心思想就是容器 xff0c 当容器refresh的时候 xff0c 外部看上去风平浪静 xff0c 其实内部则是一片惊涛骇浪 xff0c 汪洋一片 Springboot更是封装了Spring xff0c 遵循约定大
  • ZYNQ研究----(3)7100 裸跑LWIP协议栈

    硬件环境 xff1a 创龙TLZ7XH EVM开发板 软件环境 xff1a VIVADO 2017 4 1 调用ZYNQ核 查开发板原理图 xff0c MIO16 27为以太网接口52 53为MDIO接口 xff0c 配置如下 使能串口1
  • SQL优化 20 连击

    一 查询SQL尽量不要使用select xff0c 而是具体字段 1 反例 SELECT FROM user 2 正例 SELECT id username tel FROM user 3 理由 节省资源 减少网络开销 可能用到覆盖索引 x
  • 对外 API 接口,请把握这3 条原则,16 个小点

    对外API接口设计 安全性 1 创建appid appkey和appsecret 2 Token xff1a 令牌 xff08 过期失效 xff09 3 Post请求 4 客户端IP白名单 xff08 可选 xff09 5 单个接口针对IP
  • 40 个 SpringBoot 常用注解:让生产力爆表!

    64 RequestMapping 64 RequestMapping注解的主要用途是将Web请求与请求处理类中的方法进行映射 Spring MVC和Spring WebFlux都通过RquestMappingHandlerMapping和
  • 分页 + 模糊查询 有坑!

    前言 不知道你有没有使用过Mysql的like语句 xff0c 进行模糊查询 xff1f 不知道你有没有将查询结果 xff0c 进行分页处理 xff1f 模糊查询 xff0c 加上分页处理 xff0c 会有意想不到的坑 xff0c 不信我们
  • Spring Boot + Netty + WebSocket 实现消息推送

    关于Netty Netty 是一个利用 Java 的高级网络的能力 xff0c 隐藏其背后的复杂性而提供一个易于使用的 API 的客户端 服务器框架 Maven依赖 lt dependencies gt lt https mvnreposi
  • isEmpty 和 isBlank 的用法区别

    也许你两个都不知道 也许你除了isEmpty isNotEmpty isNotBlank isBlank外 并不知道还有isAnyEmpty isNoneEmpty isAnyBlank isNoneBlank的存在 come on 让我们
  • 300万数据导入导出优化方案,从80s优化到8s

    前景 在项目开发中往往需要使用到数据的导入和导出 xff0c 导入就是从Excel中导入到DB中 而导出就是从DB中查询数据然后使用POI写到Excel上 写本文的背景是因为在工作中遇到了大数据的导入和导出 xff0c 问题既然来了逃跑不如
  • 快速定位 SpringBoot 接口超时问题的神器

    背景 公司有个渠道系统 xff0c 专门对接三方渠道使用 xff0c 没有什么业务逻辑 xff0c 主要是转换报文和参数校验之类的工作 xff0c 起着一个承上启下的作用 最近在优化接口的响应时间 xff0c 优化了代码之后 xff0c 但
  • 常用开源监控系统分析推荐

    摘要 xff1a 在互联网信息爆炸式快速发展的今天 xff0c 各类复杂多样的平台系统相继涌出 如何选择最佳的监控产品以更好地维护这些平台和系统是每个 IT 人员都需面临的难题 本文将从开源监控产品的起源和发展 xff0c 详细解析各个时代
  • 一个非常实用的分布式 JVM 监控工具

    介绍 该项目为了方便开发者更快监控多个远程主机jvm xff0c 如果你的项目是Spring boot那么很方便集成 xff0c jar包引入即可 xff0c 不是Spring boot也不用气馁 xff0c 你可以快速自行初始化一个Spi
  • 【Java】HttpRequest 获得请求的url进行判断

    一 span class token class name HttpRequest span 获得请求的url进行判断 request span class token punctuation span span class token f
  • 秒杀系统的思考

    极限并发带来的思考 虽然现在大多数情况下都能订到票 xff0c 但是放票瞬间即无票的场景 xff0c 相信大家都深有体会 尤其是春节期间 xff0c 大家不仅使用 12306 xff0c 还会考虑 智行 和其他的抢票软件 xff0c 全国上
  • 为什么禁止MyBatis批量插入几千条数据使用foreach?

    近日 xff0c 项目中有一个耗时较长的Job存在CPU占用过高的问题 xff0c 经排查发现 xff0c 主要时间消耗在往MyBatis中批量插入数据 mapper configuration是用foreach循环做的 xff0c 差不多
  • SpringBoot 那些天生自带 Buff 的工具类

    断言 断言是一个逻辑判断 xff0c 用于检查不应该发生的情况 Assert 关键字在 JDK1 4 中引入 xff0c 可通过 JVM 参数 enableassertions开启 SpringBoot 中提供了 Assert 断言工具类
  • SpringBoot四大核心组件

    前言 先透露一下 xff0c 四大组件分别是 xff1a starter xff0c autoconfigure CLI 以及actuator 下面我们就来详细介绍一些他们有什么用 一 Spring Boot Starter 1 1 Sta
  • 线上问题排查,这些命令你一定用得到!

    线上问题排查 xff0c 以下场景 xff0c 你遇到过吗 xff1f 一 了解机器连接数情况 问题 xff1a 1 2 3 4的sshd的监听端口是22 xff0c 如何统计1 2 3 4的sshd服务各种连接状态 TIME WAIT C
  • linux内核发包工具pktgen

    pktgen使用说明 内核路径 net core pktgen c 作者对于pktgen的介绍 xff1a 原作者编写的pdf介绍 pktgen c 原理介绍 pktgen运用了proc 文件系统特征来实现用户和内核的交互 xff0c 用户