以前tcpdump用的比较多,主要用在诊断的时候。tcpreplay则是把tcpdump记录下来的包原样发回去

这样tcpreplay就可以用来以极快的速度复现记录下来的数据从而实现压力测试,好处在于数据比较真实

先是在实际环境中用tcpdump记录数据用于复现
例如记录发往某ip某端口的报文一百万个

tcpdump 'dst aa.aa.aa.aa and dst port xxx' -c 1000000 -w log.pcap

假设这些报文要在机器bb.bb.bb.bb上复现然后发给cc.cc.cc.cc,从bb.bb.bb.bb发往cc.cc.cc.cc的源mac地址为bb:bb:bb:bb:bb:bb 目的mac地址为cc:cc:cc:cc:cc:cc

首先tcpprep预处理下

tcpprep -p --pcap=log.pcap --cachefile=input.cache

先修改mac地址使之有效

tcprewrite --enet-dmac="cc:cc:cc:cc:cc:cc" --enet-smac="bb:bb:bb:bb:bb:bb" --infile=log.pcap --outfile=pcap.tmp

然后修改ip地址使之有效

tcprewrite --cachefile=input.cache --endpoints="cc.cc.cc.cc:bb.bb.bb.bb" --infile=pcap.tmp --outfile=replay.pcap

然后就可以用来复现了 -l参数是说循环多少次 -p参数是说每秒发多少个包 -i是说从那个网卡发

tcpreplay -l 10 -p 1000 -i eth0 replay.pcap