pktgen工具的使用-壹
##0x01 先说几句
我个人觉得这是一次踩坑的过程,之前也没有搞过这个东西,所以即使现在搞起来了,但是我还是不是很清楚到底是什么机制,现在想先把过程记录下来,说不定哪天懵逼的时候还能够帮得上一点点忙?
一开始的初衷是想要收集一款tcp的发包工具用来测试自己身边的设备性能,过程中看到了pktgen(linux内核模块),在搜索过程中发现了这篇文章提到的工具,慢慢发现这好像是两个完全不同的东西,pktgen不支持TCP,pktgen-dpdk是支持TCP的,所以开始尝试着使用这个工具.
##0x02 开整
整个过程都没有百度过别人的技术文档,纯粹参照官方的网站进行一步步操作的,所以可能绕了一些弯路或者怎样,看官们轻喷可好?
官方文档: http://pktgen.readthedocs.io/en/stable/index.html
step 1 环境:
- 使用系统版本: kali 2.0
- 内核版本: 4.9.0-kali1-amd64
step 2 操作:
- 查看官方文档,需要配置HugePages(会发现可能系统默认已经配置好)
- Get源码
dpdk源码
git clone git://dpdk.org/dpdk(你会发现失效,什么都没有clone)
正确姿势: 去官网下载安装包 http://www.dpdk.org/download
注意安装包版本的选择(我用了稳定版的文件),可能会直接影响到之后的编译过程
- pktgen-dpdk源码
git clone http://dpdk.org/git/apps/pktgen-dpdk
- 安装linux内核头文件以允许DPDK编译自己的模块
sudo apt-get install linux-headers-3.5.0-32-generic
- 你可能还需要安装依赖
sudo apt-get install libpcap-dev
- 设置环境变量
export RTE_SDK = /root/GitPro/dpdk(你的dpdk路径) export RTE_TARGET=x86_64-native-linuxapp-gcc
- 编译dpdk
cd $RTE_SDK make install T=x86_64-native-linuxapp-gcc 过程中出现的问题稍后总结 Just ignore it.
- 编译pktgen-dpdk
cd /root/Git/pktgen-dpdk(我的路径) make 这里可能会报错,也可能不会,待会儿再说错误
到此为止,再无任何错误的情况下,应该是编译这个过程搞定了,剩下的可能就是一些收尾的配置,到这里先总结几个问题.
0x03 编译问题小结
这些问题是否出现取决于版本问题
- Installation cannot run with T defined and DESTDIR undefined
提示你没有指定安装路径,这里我们只需要编译,本来也不需要安装,所以忽略,不影响使用
- make pktgen error1
这个错是低级的,因为我改动了RTE_SDK这个参数,改为指定到pktgen的路径,这完全是错误的,这个参数在第一次设置后就不需要修改,路径就是dpdk的路径
- make pktgen error2
注意我的版本,我用了pktgen-dpdk 2.7.6的这个版本,有可能是版本的原因,所以可能是个人的操作的原因吧,自己去官方网站手动的去下载了安装包,直接源码make,所以出了这样或者那样的错误,直接从git克隆那个版本的就ok了,不需要这么麻烦,完成make.
这里需要附上一张编译成功之后的结果,会在你的路径下生成一个可执行的pktgen的文件,看似好像是成功咯?
1 0x04 后续的问题
- 关于setup.sh
文章中提到,pktgen-dpdk路径下有这样一个文件,会在执行后自动的去完成一些配置,找了半天发现没有这个文件,头疼,要炸了. 当时突然想到是不是较低的版本有这个东西,发现确实是这样的,见下图.我直接拿来用了.
当然了,你运行这个脚本会发现你可能还是有错,错误提示是找不到什么文件之类的,是因为clone下来的这个版本他确实没有,所以还是复制一份过来,这下就ok了.试着继续运行setup.sh(截图可能和当时情况有出入,但是先看着,显示的形式基本是这样的)
初次运行setup.sh你可能还会发现没有提示:在dpdk/tools路径下没有dpdk_nic_bind.py文件,和上面的方法一样,去复制一份过来,其他版本里有,这种方法好像很没水平,对于我这种lowB来说好像很适合.23333
之后运行setup.sh文件,你可能发现还是有写不对劲的地方,原因是没有绑定自己的网卡,这个文件中有几行代码是用来绑定你的网卡的,打开setup.sh文件你会发现,我们只需要修改其中的点就可以解决了
查看网卡信息:
修改配置文件完成:
在网卡信息的图片中可以看到: Kernel driver in use: igb_uio(说明网卡已经成功绑定)
- 初次运行pktgen
./pktgen -h
这个问题解决方法是从Github的issue中找到解决方法的,将pktgen的可执行文件,直接拷贝到pktgen-dpdk的根目录下执行,问题就解决了.
- 绑定网卡
绑定网卡的时候一定要将网卡down掉,否则setup.sh文件执行的时候会报错.
ifconfig eth0 down
- 变量设置
关于RTE_SDK和RTE_TARGET这两个参数,因为每次重新启动之后都需要重新设置,所以你可以将这两个写入到脚本中,系统启动的时候也就设定好了.
##0x05 写在最后
自己测试了一下这个东西,好像他更像是发起Dos攻击的工具,经过dpdk的包全部任何的都发送到目的IP吧,和我想要的还是有些距离,暂时和这个东西,say bye.

如果你觉得这篇文章对你有所帮助,欢迎赞赏~
