tcpcopy离线测试

一个真实的例子

200.105服务器要升级php7,为了测试程序兼容性,我想把200.105的请求抓下来,在测试服务器回放。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.抓取正式服务器200.105的请求包
tcpdump -i eth0 tcp and port 80 -s 0 -w 200.105.cap

2.将日志拷贝到205.233上面,这台部署了tcpcopy

3.在205.235上面开启拦截器intercept,这台同时也是需要测试的程序所在的服务器
intercept -i eth0 -F "tcp and src port 80"

4.在205.233上开启tcpcopy,开始回放
tcpcopy -i /home/zhouchangju/php7/200.105.cap -x 80-192.168.205.235:80 -s 192.168.205.235

5.查看zx域名的nginx日志,有信息了

6.采用加速回放(-a参数,本例中采用100倍速度回放)
tcpcopy -i /home/zhouchangju/php7/200.105.cap -x 80-192.168.205.235:80 -s 192.168.205.235 -a 100

注意事项

  • 如需离线测试,编译tcpcopy时,必须加上–offline参数,否则编译后,tcpcopy不支持-i参数。

  • intercept和tcpcopy不能用同一台服务器,必须分为两台服务器

  • 参数中IP和端口的功能要明确

1
2
3
4
5
6
比如:
我在A服务器上抓取80端口的请求,生成f.cap文件
我将f.cap文件拷贝到B服务器上
我希望将f.cap的请求,回放给C服务器(intercept也安装在C服务器上),并且回放时采用的端口为81
那么在B服务器上应该这样写:
tcpcopy -i f.cap -x 80-C:81 -s C