Linux 数据包回放工具tcpreplay安装使用
背景介绍
tcpreplay是一种pcap包的重放工具, 它可以将用ethreal, wireshark工具抓下来的包原样或经过任意修改后重放回去. 它允许你对报文做任意的修改(主要是指对2层, 3层, 4层报文头), 指定重放报文的速度等, 这样tcpreplay就可以用来复现抓包的情景以定位bug, 以极快的速度重放从而实现压力测试。
tcpreplay本身包含了几个辅助工具(tcpprep、tcprewrite、tcpreplay和tcpbridge), 用于准备发包的cache, 重写报文等。
* tcpprep - 简单的说就是划分哪些包是client的, 哪些是server的, 一会发包的时候client的包从一个网卡发, server的包可能从另一个网卡发。即区分pcap数据包的流向,即区分出客户端和服务器。
* tcprewrite - 简单的说就是修改2层, 3层, 4层报文头部。即改写pcap数据包的2-4层的头部信息,即MAC地址、IP地址和PORT等。
* tcpreplay - 真正发包, 可以选择主、从网卡, 发包速度等。即回放pcap文件中的数据包。
* tcpreplay-edit-更写pcap数据并回放,将tcprewrite和tcpreplat一条命令实现。
* tcpbridge - 利用tcprewrite的功能实现两个网络部分的桥接
正文
1、安装
以centos为例: 直接yum install tcpreplay 安装或者编译离线包安装
1 解压依赖 tar zxvf libpcap-1.9.1.tar.gz 2 3 编译 ./configure 4 5 make && make install 6 7 解压安装包 tar zxvf tcpreplay-4.1.0.tar.gz 8 9 编译 ./configure --enable-dynamic-link 10 11 make && make install
2、tcpreplay工具
命令格式:tcpreplay [-flags] [-flag [value]] [--option-name[[=| ]value]] <pcap_file(s)>
命令参数如下图:
3、示例
预处理后发包:
1.预处理生成Cache: tcpprep -a client -i test.pacp -o test.cache 这条命令将PCAP文件分成客户端和服务端,默认为客户端。发送时packet将分别从客户端和服务端发出。 2.重写IP地址和MAC地址: tcprewrite -e 192.85.1.2:192.85.2.2 --enet-dmac=00:15:17:2b:ca:14,00:15:17:2b:ca:15 --enet-smac=00:10:f3:19:79:86,00:10:f3:19:79:87 -c test.cache -i test.pcap -o 1.pcap 这条命令将eth0设为服务端接口,eth1设为客户端接口,重写了IP和MAC,可通过wireshark等工具打开1.pcap,查看修改是否成功。 3.重放packet: tcpreplay -i eth0 -I eth1 -l 1000 -t -c /dev/shm/test.cache /dev/shm/1.pcap
直接发包:
附带参数即可: tcpreplay -i eth1 -M 10 -l 100 1.pcap --使用eth0网口,每秒20个数据包,重复100次
4、遇到的报错
包过长导致的报错:
解决办法: 查看并调整网口mtu:ifconfig eth0 mtu 6000 up
或增加回放参数:tcpreplay-edit -i eth0 -M20--mtu-trunc xxx.pcap