tcpreplay 一种非主流回放数据包打流量测试的方法

背景

不想登录到探针服务器,又想把流量打到探针网卡上。

目标

在局域网一台机器回放数据包,到另一台机器上。

环境

centos

tcpreplay version: 4.3.4

[root@ ~]# tcpreplay --version
tcpreplay version: 4.3.4 (build git:v4.3.4)

步骤

将ip地址改为目的机器mac,并在源和目的机器抓包。

tcprewrite --dstipmap=192.168.153.145/32:10.10.40.99/32 -i web.pcap  -o b.pcap
tcprewrite --srcipmap=192.168.153.145/32:10.10.40.99/32 -i b.pcap  -o c.pcap

c.pcap:

 

tcpreplay回放并在源和目的机器抓包,源机器捕捉到数据包,目的机器不能捕捉到数据包。

不在同一个局域网下的两台主机,修改目的MAC时,目的MAC不是目的机的网卡物理地址,而是源机器所连接的交换机的MAC地址。

arp

 将目的mac为网关MAC地址:

tcprewrite -i c.pcap -o e.pcap --enet-smac=00:50:56:c0:00:08,5c:e8:83:78:4e:fd --enet-dmac=5c:e8:83:78:4e:fd,00:50:56:c0:00:08 -c a.cache

(--enet-smac 表示客户端发包的源、目的mac, --enet-dmac表示服务端发包的源、目的mac)

e.pcap:

tcpreplay回放,发现在源机器和目的机器都抓取到流量包,但 nc -lvp 80 没监测到数据:

目的机10.10.40.99,只抓取到单向请求包:

 

 将10.10.40.99 ip 改成10.10.40.21,mac 改成网关MAC,发现40.99还是可以抓取到客户端请求的单向数据包:

 tcpreplay回放只是把数据包发出去,数据包去往何处,根据的是目标mac地址。对于客户端->服务端的流量,目标为服务端,所以这个方向的流量会发往服务端。而对于服务端->客户端的流量,此时目标为客户端,所以这个方向的流量,不会发往服务端,而是在客户端。

原理

简单地说, tcprewrite 就是改写 pcap 包里的报文头部, 包括 2 层, 3 层, 4 层,即 MAC 地址、IP 地址和PORT 等。

tcpreplay 只保证能把包送出去, 至于包真正能到达的地址, 还是根据原来的包的 IP 和 mac, 如果是在同一网段,可能需要把 mac 地址改成测试设备的 mac,如果需要经过网关, 就得将 IP 地址改为测试设备的 IP 以及端口号 。

如果想跟服务端通讯,据说可以使用 tcplivereplay   tcpliveplay ,但笔者测试未使用成功。

写在最后

本文是笔者在实际工作中的经验总结,如有错误,欢迎私信我交流讨论。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值