首页/网络/抓包与流量分析速查/报文重放工具用法
抓包工具链61 条

报文重放工具用法

把抓包文件按原始或指定速率重放到测试环境:验证策略、复现故障、压测接收端;注意重放包中的地址与校验和修正选项。

tcpreplay 是干什么的

tcpreplay 把抓包文件里的报文重新从本机网卡发出去,可选按原始时序、按倍速或按指定带宽/包速率发送。它工作在二层,发送的是抓到的原始帧,因此 MAC、IP、端口都保持原样,除非先用配套工具改写。典型用途是把真实流量搬到测试环境复现故障、验证防火墙或 IDS 策略、给接收端做吞吐压测。

基本信息

适用平台Linux / BSD 等类 Unix,依赖 libpcap
权限要求root 或具备 CAP_NET_RAW、CAP_NET_ADMIN 能力
基本语法tcpreplay -i <网卡> [速率与循环选项] 文件.pcap
速率选项-x 倍速、--mbps 兆比特每秒、-p 包每秒、-t 尽快发送
常见配套tcprewrite 改写地址与端口,tcpreplay-edit 边改边放,tcpprep 预分流
安全前提只在授权范围内重放,生产网需审批

典型使用场景

  • 复现线上故障:把出问题时段的包重放到测试环境,让后端在相同报文序列下重现
  • 验证策略:确认新增的防火墙、IPS 规则会按预期放行或阻断真实形态的流量
  • 容量评估:把一段稳定态流量按数倍速重放,观察接收端的吞吐与连接数上限
  • 回归测试:把历史请求样本当作固定输入,验证协议解析改动后行为没变化
  • 协议开发:对手写采集的边界样本做定向重放,覆盖正常业务流量触及不到的分支

常用命令

常用命令
tcpreplay --listnics                                  # 先看有哪些网卡可选
tcpreplay -i eth1 cap.pcap                            # 按文件原始时序重放
tcpreplay -i eth1 -x 2 -l 3 cap.pcap                  # 2 倍速,共放 3 轮
tcpreplay -i eth1 --mbps=100 cap.pcap                 # 限速 100 Mbps
tcpreplay -i eth1 -t cap.pcap                         # 尽快发送,用于压测
tcprewrite --infile=cap.pcap --outfile=new.pcap --srcipmap=10.0.0.0/8:192.168.1.0/24   # 改地址段

输出与关键指标读法

指标含义异常表现
actual实际发送速率与包数明显低于设定值说明本机发不出去
failed发送失败次数非零要查网卡队列、驱动或权限
truncated被截断的包数抓包时 snaplen 太小导致,重放内容不完整
skipped按过滤跳过的包数与预期不符时核对过滤表达式
bytes sent成功发出的字节数与文件大小对照可判断是否有丢帧
在真实生产网重放真实流量可能触发告警、影响业务甚至造成业务侧重复交易,必须取得授权与时间窗约定;测试环境也要先确认目标网段与广播域,避免误打到无关设备。
统计重放效果时同时看发送侧 failed 字段和接收侧抓包量,只信一边容易漏掉网卡队列溢出导致的静默丢包。

易错点

  • 抓包文件里的 MAC 与 IP 不属于目标网段,交换机与主机直接丢弃,重放看起来成功但接收端什么都没收到;先用 tcprewrite 改写源目地址或按目标环境说明过滤
  • 在本机网卡上重放目的地址为其他网段的流量,包发不出去或走错出口,应根据拓扑选择抓包点同侧的网卡
  • 原包长度小于以太网最小帧长(64 字节)时部分驱动会补齐或丢弃,实际接收到的报文与文件不一致,压测前先抽样核对
  • 用重放做性能结论:重放走的是本机网卡队列,速率上限受本机与驱动限制,得出的吞吐不能直接当作被测设备的能力

数据来源与参考

  • tcpreplay 手册
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌