一、背景介绍
tcpreplay是一种pcap包的重放工具, 它可以将用ethreal, wireshark工具抓下来的包原样或经过任意修改后重放回去. 它允许你对报文做任意的修改(主要是指对2层, 3层, 4层报文头), 指定重放报文的速度等, 这样tcpreplay就可以用来复现抓包的情景以定位bug, 以极快的速度重放从而实现压力测试。
tcpreplay本身包含了几个辅助工具(tcpprep、tcprewrite、tcpreplay和tcpbridge), 用于准备发包的cache, 重写报文等。
官网: http://tcpreplay.appneta.com/
- 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 -y install tcpreplay
Ubuntu环境下直接在线安装(有bug,推荐离线):
sudo apt install libpcap-devsudo apt install tcpreplay
查看安装是否成功:
sudo tcpreplay -V
安装成功,会显示如下图所示信息:
查看帮助文档命令如下:
tcpreplay -h
2、离线安装
解压依赖 tar zxvf libpcap-1.9.1.tar.gz 编译 ./configure make && make install 解压安装包 tar zxvf tcpreplay-4.1.0.tar.gz 编译 ./configure --enable-dynamic-link make && make install
三、tcpreplay工具使用
命令格式:tcpreplay [-flags] [-flag [value]] [--option-name[[=| ]value]]
命令参数如下图:
(1)快速使用
tcpreplay -i eth0 p.pcap
快速使用: 其中 p.pcap 是用wireshark或者tcpdump抓取的流量包
(2)高级使用
查看本机网卡信息,命令如下:
tcpreplay --listnics
可以 看到网卡信息,如下
Available network interfaces:vethea91bfcveth80236a7veth3676c9eens33veth230fd33veth9dc5845veth0023549br-a94abb025497veth2656707anydocker0nflognfqueueusbmon1usbmon2
四、示例
1、将 1.pcap 文件进行 tcpprep 操作,制作 cache 文件
tcpprep -a client -i 1.pcap -o 2.pcap -v
2、使用tcprewrite修改.pcap文件的相关参数(不需要修改时,忽略此步)
tcprewrite --srcipmap=0.0.0.0/0:10.0.0.101/24 --dstipmap=0.0.0.0/0:10.41.48.131/32 --enet-dmac=00:50:56:81:a9:fb --infile=57_163.pcap --outfile=test.pcap -C
- Srcipmap:模拟发送的设备IP、ip后缀/24为子网掩码,可填/24/32
/24为模拟同网络下多个ip回放报文,/32为单个ip回放报文。具体可视情况修改调试。 - Dstipmap:回放报文的目标IP Enet-dmac: 目标mac,可在目标服务器使用ipconfig或者ip addr查看
- Infile:打开的.pcap文件名 Outfile: 输出的.pcap文件名
3、执行发包语句参数说明:
tcpreplay -i eno2 -p 1000 -l 100000000 3.pcap
- -i:所使用的网卡,如网卡为ens33或者eth0,那么改为正确的网卡名称
- 1000:每秒钟向接收机发送的eps速率
- 1000000000:最大发送的eps数量
- 3.pcap:用于tcpreplay回放syslog的.pcap文件
五、常见问题
(1)为什么在服务器上收不到tcpreplay回放的报文?
在目标服务器上使用tcpdump命令进行抓包,抓取接收报文的网卡数据:
检查输出信息,例命令如下:
tcpdump -i eth0 port 514
(2)抓不到包,也接收不到报文。
检查发包机和目标机是否能ping通,能ping通,再检查执行的tcpreplay命令参数和修改.pcap文件的语句是否正确。
(3)常用命令实例:
tcpreplay -i eth0 -p 1000 -l 100000000 --limit=200000 test.pcap
解释:使用eth0网口以每秒1000EPS的速率,向test.pcap文件中改写的 目标IP进行持续发包,限制最大发包数100000000,当发送包数达到200000 时,直接停止发送(–limit的作用)。
tcpreplay -i eth0 -p 5000 -l 100000000 --duration=10 test.pcap
解释:使用eth0网口以每秒5000EPS的速率,向test.pcap文件中改写的 目标IP进行持续发包,限制最大包数100000000,当发包时间达到10秒时 (–duration), 停止发送。
nohup tcpreplay -i eth0 -p 5000 -l 100000000 test.pcap &
解释:语句中的Nohup+&代表该命令会在后台开启一个线程来运行,若要停 止发送,执行ps -ef |grep tcpreplay ,kill -9 进程PID。
其他示例(1、2已验证)
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
来源地址:https://blog.csdn.net/SweetHeartHuaZai/article/details/127307208