概述

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即可。

ifconfig <网卡> mtu 3000

安装

CentOS:CentOS-Stream-9-latest-aarch64-dvd1 【服务器端】

Kali: Kali Linux 2021.3 ARM64【客户端】

centos 服务器端

dnf install epel-release -y
dnf install tcpreplay -y
dnf install tcpdump

Kali客户端

sudo apt-get install tcpreplay -y
sudo apt-get install tcpdump
sudo apt-get install netcat-openbsd
  • 查找nc whereis nc

  • 确定/usr/bin/nc中是软链接(也阔以不)ls -l /usr/bin/nc

  • 删除原软链接,重建

    sudo rm /usr/bin/nc
    sudo ln -s /opt/netcat/bin/nc /usr/bin/nc
    
  • 使用–help查看nc命令是否已经改为netcat了(同理也阔以将/usr/bin/netcat中的链接指向nc)

    nc --help
    

使用

  1. kali对centos发起ping包,centos用Wireshark抓取并保存为test.pcap

  2. 在centos,重放

    tcpreplay -i enp0s5 test.pcap
    

    再次抓包,可以看到有刚刚的ping包

参考文章

nc无法连接 Ncat: Connection refused.

tcpreplay回放流量遇到的坑

评论