一、前言

  tcpreplay是一系列工具的集合。包括(tcpprep、tcprewrite、tcpreplay和tcpbridge)其中tcpreplay是真正实现流量回放功能的工具,其他几个工具可以看作tapreplay的辅助工具,作为流量重放前期的准备工作,比如tcpprep可以划分哪些包是client的, 哪些是server的, 一会发包的时候client的包从一个网卡发, server的包可能从另一个网卡发。tcprewrite可以就是修改2层, 3层, 4层报文头部,也就是可以将IP,MAC等信息修改为你期望的值。

官网: http://tcpreplay.appneta.com/


二、安装

  (1)在线安装

  CentOS环境下直接,在线安装执行下列命令即可:

yum -y install tcpreplay 

  查看安装是否成功:

tcpreplay -V

  安装成功,会显示如下图所示信息:
在这里插入图片描述
  查看帮助文档命令如下:

tcpreplay -h

  会显示如下图所示信息:
在这里插入图片描述


  (2)离线安装

  当在线安装失败时可以选择离线安装,需要准备Bison、flex、libpcap、m4、tcpreplay依赖包,注意依赖包高低版本不兼容,以上均为离线包。为了节省大家时间,即将相应的依赖包整理好: 点击这里获取依赖包.

  1.把所需依赖包和tcpreplay上传至服务器

  2.执行脚本 sh libpcap-install

  3.执行完脚本,会出现四个安装包分别是Bison、flex、libpcap、m4

  4.依次进入Bison、flex、libpcap、m4执行以下命令:

./configure
make
make install

  命令完成且无报错后,libpcap才能正常使用。安装完libpcap后,可以安装tcpreplay,进入tcpreplay-4.1.2执行上一步的三个命令编译安装。安装完成后,执行tcpreplay -vesion能查看版本信息,-help查看帮助信息。

注意: 1.编译安装libpacp时,可能会报错configure:error: Your operating system’s lex is insufficient to compile libpcap
    2.编译安装bison时,可能会报错 configure:error: GNU M4 1.4 is required”
解决方案: 此时应确认服务器是否安装有GCC编译器,如果没有GCC编译器,请安装后,再次执行下面的安装操作,GCC编译器的安装方法不再阐述。


三、使用

  (1)快速使用

tcpreplay -i eth0 p.pcap

  快速使用: 其中 p.pcap 是用wireshark或者tcpdump抓取的流量包


  (2)高级使用

  查看本机网卡信息,命令如下:

tcpreplay --listnics

  可以 看到网卡信息,如下

Available network interfaces:
eth0
eth1
any

  将 p.pcap 文件进行 tcpprep 操作,制作 cache 文件

tcpprep -an client -i p.pcap -o p.cache –v

  执行发包语句参数说明:

tcpreplay -i eno2 -p 1000 -l 100000000 56to300010w.pcap

-i:所使用的网卡,如网卡为ens33或者eth0,那么改为正确的网卡名称
1000:每秒钟向接收机发送的eps速率
1000000000:最大发送的eps数量
56to300010w.pcap:用于tcpreplay回放syslog的.pcap文件


  (3)使用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

1.Srcipmap:模拟发送的设备IP、ip后缀/24为子网掩码,可填/24/32
/24为模拟同网络下多个ip回放报文,/32为单个ip回放报文。具体可视情况修改调试。

2.Dstipmap:回放报文的目标IP Enet-dmac: 目标mac,可在目标服务器使用ipconfig或者ip addr查看

3.Infile:打开的.pcap文件名 Outfile: 输出的.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。


Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐