tcpreplay无数据发送:UDP抓包重放失败排查及正确用法咨询
tcpreplay重放抓包未被Wireshark捕获的原因及解决方法
常见原因
- 接口拼写错误:你抓包时用了
etho0(字母o),但实际网络接口大概率是eth0(数字0),若抓包命令指向错误接口,会导致捕获的数据包为空,重放自然无数据。 - 网卡未开启混杂模式:普通模式下网卡只会接收目标MAC为自身的数据包,抓包中的原始目的MAC可能并非当前PC的MAC,导致数据包被网卡直接丢弃,Wireshark无法捕获。
- 数据包校验和失效:抓包中的校验和基于原始网络环境生成,重放时网络参数(如MAC/IP)变化会导致校验和无效,网卡或系统会丢弃该包。
- 接口名称不匹配:部分现代Linux系统的网络接口命名已改为
enpXXX格式而非eth0,若重放时指定的接口不存在,tcpreplay无法发送数据包。
正确使用tcpreplay的步骤
修正抓包命令:确保抓包接口正确,重新捕获有效数据包:
sudo tcpdump -i eth0 -s 0 -w data.pcap udp可通过
ip link show命令确认当前系统的网络接口名称。开启Wireshark混杂模式:在Wireshark的「捕获选项」中勾选「混杂模式」,让网卡接收所有经过的数据包。
重放时修正数据包参数:
- 先查看抓包中的MAC地址信息:
tcpdump -e -r data.pcap - 重放时指定当前PC的eth0接口MAC为目的MAC,并修复校验和:
替换sudo tcpreplay --fixcsum --enet-dmac <你的PC eth0 MAC地址> -i eth0 data.pcap<你的PC eth0 MAC地址>为实际值,可通过ip addr show eth0查看。
- 先查看抓包中的MAC地址信息:
验证重放结果:执行tcpreplay后,查看输出信息,若显示类似
Actual: X packets (Y bytes) sent,说明数据包已发送成功,此时Wireshark应能捕获到重放数据。
内容的提问来源于stack exchange,提问作者borune
相关产品推荐
相关产品推荐

