Tcpreplay 是一系列工具的总称,包括 Tcpreplay ,Tcprewrite 和Tcpprep ,是用来在Unix 或linux 系统上重放数据包的软件。实现数据报文回放分为三步:
- 用Tcpprep 对报文的通信流量的两方(服务器/ 客户端)进行分离
Tcpprep 的作用是划分客户端和服务器,区分PCAP 数据包的流向,即划分哪些包是客户端的,哪些包是服务器的。在回放包时数据包会按照不同的发包方向从两个网卡分别发出。
Tcpprep 的常用参数如下(只列举这里用到的参数):
-a 表示按模式自动分离通信流量生成缓存文件。
-i 生成缓存文件必带参数,后跟PCAP 文件名,表示这个PCAP 文件需要处理。
-o 生成缓存文件必带参数,后跟缓存文件。表示由前面的PCAP 文件生成的缓存文件。
举例:tcpprep -a client -i test.pcap -o test.cache
表示将名称为test.pcap 的数据包的通信流量进行自动分离,生成名称为test.cache 的文件。
(2 )用Tcprewrite 对报文进行改写
Tcprewrite用来修改报文,主要修改数据包的2 层,3 层,4 层报文头,即MAC 地址,IP 地址和端口等,目的是为了将原始数据包通过自己搭建的环境进行回放。所以在路由模式的环境下,这一步必不可少。
Tcprewrite 的常用参数如下:
-e 重写IP 地址,后跟PC 上两网卡的IP 地址,前面表示服务器端,后面表示客户端,用冒号隔开。(注意要与发包顺序对应)
--enet_dmac 重写目的MAC 地址,后跟防火墙的两个接口的MAC 地址,注意要与PC 上的两个网卡对应,中间用,隔开。
--enet_smac 重写源MAC 地址,后跟PC 上两个网卡的MAC 地址,注意要与前面对应,中间用,隔开。
-c 使用生成的缓存文件分离流量,后跟第二步生成的缓存文件名。
-i 处理输入PCAP 文件,后跟最原始的PCAP 文件名。
-o 输出PCAP 文件,后跟改写后最终生成的PCAP 文件名。
举例:改写的命令为tcprewrite -e 192.168.2.100:192.168.3.101 --enet_dmac=28:51:32:0b:d2:60,28:51:32:0b:d2:61 --enet_smac=00:0a:1c:0b:0e:24,08:00:27:49:7e:38 -c test.cache -i test.pcap -o 01.pcap
生成的01.pcap 就是重写后的攻击包,可以用Wireshark的打开查看是否改写正确。
仅修改包内的端口号:tcprewrite --portmap=80:8080 -i http-pdf-up.pcap -o http8080.pcap
(3 )用Tcpreplay 回放数据包
Tcpreplay 是最终真正发包的工具,可以选择主网卡,从网卡,发包速度等,对重写后的数据包进行回放。
Tcpreplay 的常用参数如下:
-c 双网卡回放报文必选参数,后跟文件名
-i 双网卡回放报文必选参数,指定主接口
-I (大写i)双网卡回放报文必选参数,指定从接口
举例:tcpreplay -c test.cache -i%2 -I%3 01.pcap
表示将最后改写的01.pcap 数据包分别从两个网卡分方向进行回放。
总结:
拓扑:
分包回放需要3步:
1,tcpprep -a client -i test.pcap -o test.cache
2,tcprewrite -e 10.10.10.1:20.20.20.1 --enet_dmac=28:51:32:0b:d2:60,28:51:32:0b:d2:61 --enet_smac=00:0a:1c:0b:0e:24,08:00:27:49:7e:38 -c test.cache -i test.pcap -o 01.pcap
3,tcpreplay -c test.cache -i ge1 -I ge2 01.pcap
第二种:不将包分离成客户端服务器回放的命令
如图1所示,对端接口设置成旁路模式
2,在PC端回放的命令:tcpreplay -i eth0 -t test.pcap
回放大量报文的shell脚本
#!/bin/bash
cd /huifang #存放包的目录
while true
do
for f in $(find $pwd -maxdepth 2)
do
tcpreplay -i eth1 -t $f
done
done
将上面脚本保存为.sh的脚本fabao.sh
在linux环境运行./fabao.sh即可