昨天刚接到任务,要对前置机进行压力测试。对于测试我还停留在对某个功能,某个页面做测试,将这次试验记录下来。
在主管和老羽指点后,决定用tcpreplay来实现数据包的重放。大致思路是,现在前置机上抓一段完整的前置机和读写器设备之间通讯的数据包,通过tcpreplay修改读写器的mac地址、ip地址,再通过回放这段数据包,达到测试效果。(为什么要这么麻烦选择回放,关键是读写器在读写数据时候经过所里安全模块加密。)
本试验将数据包中前置机的MAC和IP修改为我自己电脑的MAC和IP
读写器——MAC:1e:ed:19:27:1a:b3 IP:192.168.8.63
前置机——MAC:00:21:cc:bc:59:3b IP:192.168.8.99
我电脑——MAC:e4:a4:71:90:f6:91 IP:192.168.8.142
1,数据抓取
利用WireShark对数据抓取,主管给了我一份抓取好的,貌似数据包被他筛选过,只有从读写器到前置机这部分数据包。
2,安装tcpreplay
本来想偷懒,在win操作系统上,安装Cygwin来模拟UNIX命令来安装它的,后来由于诸多命令缺失,还是放弃安装。
但是,Cygwin安装时候 如果缺少默写命令,可以继续在安装包中搜索并添加,例如缺少make,可以这样。
回到linux系统上,安装tcpreplay,需要安装libpcap,可以先通过yum -y install libpcap,然后再进行安装。详见:https://github.com/appneta/tcpreplay
3,利用tcpprep对数据包进行分流
tcpprep在官网(http://tcpreplay.synfin.net/)是这么介绍的。
multi-pass pcap file pre-processor which determines packets as client or server and splits them into creates output files for use by tcpreplay and tcprewrite
个人理解:对多个入口的pcap文件进行预处理,以决定哪些包是发往client哪些包是发往server,将它们进行切分并输出文件,以备tcpreplay或tcprewrite使用。
tcpprep is the pcap pre-processor for tcpreplayandtcprewrite. The purpose of tcpprep is to create a cache file which is used to "split" traffic into two sides (often called primary/secondary or client/server). If you are intending to use tcpreplay with two NIC's, then tcpprep is what decides which interface each packet will use. By using a seperate process to generate cache files, tcpreplay can send packets at a much higher rate then if it had to do the calculations to split traffic itself.
个人理解:tcpprep是为tcpreplay和tcprewrite的pacp文件做预处理,tcpprep的目的是创建个cache文件,该文件能够将数据包分成两部分(主/从或客户机/服务器)。如果你用一台双网卡的电脑并用tcpreplay重发包,tcpprep能够决定哪个包从哪个接口出去。通过独立线程来操作cache文件,tcpreplay能够以更快的速度进行发包否则的话它需要自己计算来决定如何分包。
它有好几种模式可选,具体参考:http://tcpreplay.synfin.net/wiki/tcpprep
因为我们这得包都是单向的,所以这个操作不做也罢。
tcpprep --auto=bridge --pcap=./b.pcapng --cachefile=./input.cache
4,利用tcprewrite修改目的MAC和IP地址
tcprewrite --enet-dmac=1e:ed:19:27:1a:b3,e4:a4:71:90:f6:91 --enet-smac=e4:a4:71:90:f6:91,1e:ed:19:27:1a:b3 --endpoints=192.168.8.142:192.168.8.63 -i ./b.pcapng -o ./out.pcap -c ./input.cache
5,利用tcpreplay进行重发包
tcpreplay --intf1=eth0 ./out.pcap
再次开启wireshark进行抓包,目标地址变为我的IP地址,并且所有包全部发送过来。
哈哈,大伙没猜对,继续猜!