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还是之前dpdk的路径_勿修改.png

这个错是低级的,因为我改动了RTE_SDK这个参数,改为指定到pktgen的路径,这完全是错误的,这个参数在第一次设置后就不需要修改,路径就是dpdk的路径

  • make pktgen error2

make_error2.png

注意我的版本,我用了pktgen-dpdk 2.7.6的这个版本,有可能是版本的原因,所以可能是个人的操作的原因吧,自己去官方网站手动的去下载了安装包,直接源码make,所以出了这样或者那样的错误,直接从git克隆那个版本的就ok了,不需要这么麻烦,完成make.

这里需要附上一张编译成功之后的结果,会在你的路径下生成一个可执行的pktgen的文件,看似好像是成功咯?

编译成功结果.png

  • 关于setup.sh

文章中提到,pktgen-dpdk路径下有这样一个文件,会在执行后自动的去完成一些配置,找了半天发现没有这个文件,头疼,要炸了. 当时突然想到是不是较低的版本有这个东西,发现确实是这样的,见下图.我直接拿来用了.

两个版本的文件数对比.png

当然了,你运行这个脚本会发现你可能还是有错,错误提示是找不到什么文件之类的,是因为clone下来的这个版本他确实没有,所以还是复制一份过来,这下就ok了.试着继续运行setup.sh(截图可能和当时情况有出入,但是先看着,显示的形式基本是这样的)
网卡要先down掉.png
初次运行setup.sh你可能还会发现没有提示:在dpdk/tools路径下没有dpdk_nic_bind.py文件,和上面的方法一样,去复制一份过来,其他版本里有,这种方法好像很没水平,对于我这种lowB来说好像很适合.23333
之后运行setup.sh文件,你可能发现还是有写不对劲的地方,原因是没有绑定自己的网卡,这个文件中有几行代码是用来绑定你的网卡的,打开setup.sh文件你会发现,我们只需要修改其中的点就可以解决了

查看网卡信息:
绑定网卡bind.png

修改配置文件完成:
绑定网卡修改setup文件.png

在网卡信息的图片中可以看到:  
Kernel driver in use: igb_uio(说明网卡已经成功绑定)  
  • 初次运行pktgen
./pktgen -h  

运行pktgen报错1-找不到pktgen.png
这个问题解决方法是从Github的issue中找到解决方法的,将pktgen的可执行文件,直接拷贝到pktgen-dpdk的根目录下执行,问题就解决了.

成功运行pktgen.png
执行pktgen命令1.png

  • 绑定网卡

绑定网卡的时候一定要将网卡down掉,否则setup.sh文件执行的时候会报错.

ifconfig eth0 down  
  • 变量设置

关于RTE_SDK和RTE_TARGET这两个参数,因为每次重新启动之后都需要重新设置,所以你可以将这两个写入到脚本中,系统启动的时候也就设定好了.

##0x05 写在最后

自己测试了一下这个东西,好像他更像是发起Dos攻击的工具,经过dpdk的包全部任何的都发送到目的IP吧,和我想要的还是有些距离,暂时和这个东西,say bye.