实现原理

  1. 运行tcpcopy把线上服务器流量拷贝到测试服务器
  2. 在测试服务器部署intercept,通过路由将应答(response)转移向助理服务器
  3. 助理服务器将响应数据丢弃

环境准备

3台服务器

10.154.157.1 (公开服务器,也是虚拟机)  作为线上服务器
10.154.157.41(公开服务器,也是虚拟机)  作为测试环境
10.154.157.40 (公开服务器,也是虚拟机) 作为助理服务器 

线上服务器

tomcat  port: 8303

测试机

tomcat  port: 8303

安装TCPCopy

下载

wget https://github.com/session-replay-tools/tcpcopy/archive/1.0.0.tar.gz -O tcpcopy-1.0.0.tar.gz

安装依赖包;

yum -y install libpcap-devel

解压编译和安装;

tar zxvf tcpcopy-1.0.0.tar.gz
cd tcpcopy-1.0.0
./configure (默认raw socket方式抓包)
make 
make install

运行tcpcopy

/usr/local/tcpcopy/sbin/tcpcopy -x 8303-10.154.157.41:8303 -s 10.154.157.40 -c 10.10.10.0 -n 5 -d -C 4 -l tcpcopy.log  -P /var/run/tcpcopy.pid

指令说明:
-x 80-10.154.157.41:80将本机上80端口的流量复制到10.154.157.41(测试服务器)的80端口
-s指定intercept进程所在的服务器10.154.157.40。(丢包服务器)
-c修改请求的host地址为10.10.10.x,以便在230测试服务器上设置路由(设置路由是为了将应答转向丢219包服务器)
-C 开启4个进程
-d 以daemon形式运行
-l 记录日志
-P 记录pid
-n -5 请求扩大5倍
其他参数可以通过/usr/local/tcpcopy/sbin/tcpcopy -h查看

安装intercept

下载

wget https://github.com/session-replay-tools/intercept/archive/1.0.0.tar.gz -O intercept-1.0.0.tar.gz

安装依赖包

yum -y install libpcap-devel

解压编译与安装

tar zxvf intercept-1.0.0.tar.gz
cd intercept-1.0.0
./configure (默认raw socket方式抓包)
make && make install

运行intercept

/usr/local/intercept/sbin/intercept -i eth0 -l intercept.log -P /var/run/intercept.pid -F 'tcp and src port 8303' -d

指令说明:
-i 监控网卡接口
-l 记录日志
-F 监控的协议和端口
-P 记录pid
-d 以daemon形式运行
其他参数可以通过/usr/local/intercept/sbin/intercept -h查看

在测试服务器 10.154.157.41上设置一条路由

route add -net 10.10.10.0 netmask 255.255.255.0 gw 10.154.157.40

启动

运行顺序

 route add -net 10.10.10.0 netmask 255.255.255.0 gw 10.154.157.40

/usr/local/intercept/sbin/intercept -i eth0 -l intercept.log -P /var/run/intercept.pid -F 'tcp and src port 8303' -d

/usr/local/tcpcopy/sbin/tcpcopy -x 8303-10.154.157.41:8303 -s 10.154.157.40 -c 10.10.10.0 -n 5 -d -C 4 -l tcpcopy.log  -P /var/run/tcpcopy.pid

注意

  • 三台服务器尽量在同一网段下
  • tcpcopy和intercept 启动后,要看一下日志是否有报错