概述
Tcpreplay 是一套免费的开源使用程序集合,用于编辑和重放以前捕获的网络数据流量。最初的目标是重放恶意流量到入侵检测防御系统。现在有更多的用途,例如重放报文到Web服务器。
工具
Tcpreplay是多个工具的集合,其中的tcpreplay用于流量包的回放
tcpreplay
是一种pcap包的重放工具,可以将tcpdump和wireshark等工具捕捉到的网络流量包进行重放。通过重放网络流量包从而实现复现问题情景以定位bug。tcperplay可以以任意速度将pcap文件重播到网络上
tcpreplay的发包机制
所谓回放数据包的意思就是,将这个数据包的流向再次重现,也就是说再把这个数据包的流向走一遍。所以tcpreplay是检测数据包的包头的内容里面的源、目的地端的内容,目的端的地址是多少就发往哪里,知道这个我们就清楚我们在使用tcpreplay重放的时候,各种数据包都流向了哪里,这个时候只需要拿wireshark拦截,就可以很清楚的看到各种数据包。
tcpreplay做不到服务端能实时响应的回放
使用Tcpreplay回放Pcap流量,Tcpreplay只能保证发出去,如果想要服务端响应的话,需要使用tcpliveplay(使用tcpreplay回放tcp的时候,不能同步TCP里面Syn/Ack的编号)。
在Tcpreplay服务端只能抓到单方向的流量
tcpreplay回放只是把数据包发出去,数据包去往何处,根据的是目标地址。对于客户端->服务端的流量,目标为服务端,所以这个方向的流量会发往服务端。而对于服务端->客户端的流量,此时目标为客户端,所以这个方向的流量,不会发往服务端,而是在客户端。
修改MAC地址的注意事项
对于不属于同一局域网下的两台主机,修改目的IP的MAC地址的时候,MAC地址不是目的机网卡物理地址,而是源机器所连接的交换机MAC地址。
关于tcpreplay发包的错误积累
Warning: Unable to send packet: Error with PF_PACKET send() [8]:Message too long (errno = 90)
此错误往往是由于网卡链路的MTU造成,可以重新设置更大的MTU即可。
1 | ifconfig <网卡> mtu 3000 |
安装
CentOS:CentOS-Stream-9-latest-aarch64-dvd1 【服务器端】
Kali: Kali Linux 2021.3 ARM64【客户端】
centos 服务器端
1 | dnf install epel-release -y |
Kali客户端
1 | sudo apt-get install tcpreplay -y |
查找nc
whereis nc
确定/usr/bin/nc中是软链接(也阔以不)
ls -l /usr/bin/nc
删除原软链接,重建
1
2sudo rm /usr/bin/nc
sudo ln -s /opt/netcat/bin/nc /usr/bin/nc使用–help查看nc命令是否已经改为netcat了(同理也阔以将/usr/bin/netcat中的链接指向nc)
1
nc --help
使用
kali对centos发起ping包,centos用Wireshark抓取并保存为test.pcap
在centos,重放
1
tcpreplay -i enp0s5 test.pcap
再次抓包,可以看到有刚刚的ping包