注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

Pktgen  

来自李辉   2016-06-26 11:43:50|  分类: 云计算 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Linux提供了一个基于内核的发包工具pktgen,理论上来讲肯定比应用层的发包工具性能要好很多,但它是以内核模块的形式存在,有兴趣可以耍一耍

下面以Debian7.8为例,在两个VM上来测试下这个工具

1:查看内核模块

理论上linux默认会自带这个ko模块,根据内核版本到响应的目录进行查询

root@pktgen-1:~# uname -r

3.2.73

root@pktgen-1:~# ls -l /lib/modules/3.2.73/kernel/net/core/pktgen.ko

-rw-r--r-- 1 root root 65344 Jun 26 11:15 /lib/modules/3.2.73/kernel/net/core/pktgen.ko


2:加载模块

root@pktgen-1:~# modprobe pktgen
root@pktgen-1:~# lsmod | grep pktgen
pktgen 38383 0


3:查询

正确加载了模块之后,下面目录中会有文件生成,我这里只有一个kpktgend_0,原因是我加载pktgen的VM只有一个Core,假如你创建的是多核虚拟机,这里会对应生成kpktgend_1,kpktgend_2,......,kpktgend_n,每个线程RSS绑上一个Core,这里测试的就一个了

root@pktgen-1:~# ls -l /proc/net/pktgen/
total 0
-rw------- 1 root root 0 Jun 26 11:21 kpktgend_0
-rw------- 1 root root 0 Jun 26 11:21 pgctrl
root@pktgen-1:~#
root@pktgen-1:~#
root@pktgen-1:~# cat /proc/cpuinfo | grep process
processor : 0


4:测试发包

这里我有两台VM,pktgen-1作为TX,pktgen-2作为RX

TX:这里提供一个shell脚本

#!/bin/bash

echo "rem_device_all" > /proc/net/pktgen/kpktgend_0
echo "add_device eth0" > /proc/net/pktgen/kpktgend_0
echo "pkt_size 1000" > /proc/net/pktgen/eth0
echo "count 1000" > /proc/net/pktgen/eth0
echo "delay 1000000000" > /proc/net/pktgen/eth0
echo "src 10.180.80.179" > /proc/net/pktgen/eth0
echo "dst 10.180.80.181" > /proc/net/pktgen/eth0
echo "start" > /proc/net/pktgen/pgctrl

pkt_size就是包长,count发包个数,delay是time间隔,单位是纳米,源目的IP都懂的,直接执行shell脚本即可发包


RX:这里直接用tshark来进行抓包,直接识别pktgen协议,过滤条件也简单

root@pktgen-2:~# tshark -i eth0 -R "udp and frame.len == 1000"
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
3.586879 10.180.80.179 -> 10.180.80.181 PKTGEN 1000 Seq: 1
3.586888 10.180.80.179 -> 10.180.80.181 PKTGEN 1000 Seq: 2
4.586882 10.180.80.179 -> 10.180.80.181 PKTGEN 1000 Seq: 3
5.586840 10.180.80.179 -> 10.180.80.181 PKTGEN 1000 Seq: 4
6.586872 10.180.80.179 -> 10.180.80.181 PKTGEN 1000 Seq: 5
7.587032 10.180.80.179 -> 10.180.80.181 PKTGEN 1000 Seq: 6
8.586795 10.180.80.179 -> 10.180.80.181 PKTGEN 1000 Seq: 7
9.586834 10.180.80.179 -> 10.180.80.181 PKTGEN 1000 Seq: 8
10.586894 10.180.80.179 -> 10.180.80.181 PKTGEN 1000 Seq: 9
11.586924 10.180.80.179 -> 10.180.80.181 PKTGEN 1000 Seq: 10

可以看到收到的包1秒钟一个,包长1000,源目的IP地址也匹配


这里需要注意的是:

1:这里测试如果收不到包注意看下iptables规则,是否enable过滤掉了你测试的报文类型

2:内核发包工具,TX机器上用tcpdump之类用户态工具是无法抓到包的

3:测试用的是私有网之间互通,假如是连外网过L3,脚本里需要指定网关的MAC地址,可以在namespace里进行查询

echo "dst_mac fa:16:3e:a5:36:69" > /proc/net/pktgen/eth0

4:这里的包长和发包时间间隔都比较大,压力较小,数据可以在脚本里任意修改,但不要过猛,效果自己把握

  评论这张
 
阅读(200)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016