tcpreplay的安装与使用

一、背景介绍

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-dev
sudo 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]] <pcap_file(s)>

命令参数如下图:
在这里插入图片描述

(1)快速使用
tcpreplay -i eth0 p.pcap

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

(2)高级使用

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

tcpreplay --listnics

可以 看到网卡信息,如下

Available network interfaces:
vethea91bfc
veth80236a7
veth3676c9e
ens33
veth230fd33
veth9dc5845
veth0023549
br-a94abb025497
veth2656707
any
docker0
nflog
nfqueue
usbmon1
usbmon2

四、示例

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
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值