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

 

作者:Nobita Chen

-----------------------------------------------

慢慢的,你总会发现,你的努力没有白费。

posted @ 2020-12-11 23:34  charseki  阅读(2129)  评论(0编辑  收藏  举报