1、架构图
在运行上层服务的测试服务器test server 上设置路由信息,把待测试应用需要被捕获的响应数据包路由到辅助服务器assistant server上;在assistant server上,在数据链路层截获响应包[ 在assistant server的IP层已经截获不到响应包了],从中抽取有用的信息,返回给相应的tcpcopy
2、安装
2.1、安装依赖包:
yum install libpcap-devel
yum -y install gcc-c++
2.2、编译安装intercept:
tar -xvf intercept-1.0.0.tar.gz
cd intercept-1.0.0
./configure --single (我这边只是复制单台机器的流量,所以使用非分布式流量复制模式)
make && make install
2.3、启动intercept
/usr/local/intercept/sbin/intercept -i eth0 -l /var/log/intercept.log -F 'tcp and src port 20836' -d
-i 监听eth0该网卡
【online服务安装tcpCopy】
2.4、编译安装tcpcopy
tar -xvf tcpcopy-1.2.0
cd tcpcopy-1.2.0
./configure --single
make && make install
2.5、启动tcycopy
/usr/local/tcpcopy/sbin/tcpcopy -x 20836-172.18.21.11:20836,7048-172.18.21.11:7048 -s 172.18.21.11 -c 172.18.41.27 -d -C 4 -l /var/log/tcpcopy.log -n 3
参数解释:
172.18.21.11 测试服务器
172.18.41.27 线上服务器
-x 服务器应用端口号-测试服务器IP地址:测试服务器应用端口,多个端口监听就用”,"分割,上述就是监听20836和7048两个端口
-s 指定真正运行intercept的地址列表,通过此参数可以和任意一台服务器的任意一个intercept实例进行通信
-c 改变请求数据包的源IP地址为IP地址列表中的某个IP地址
-C 指定tcpcopy和intercept之间的连接数量,默认为2条连接供响应包的返回和路由信息的传递,在高压情况下,加大此参数,可以提高吞吐量,但整体性能会有一定程度的下降
-l 日志路径
-d 后台运行
-n 流量放大倍数
3、效果图
左边tcpcopy也就是线上服务器,右边intercept也就是测试服务器,稍等下,再去看看机器监控机器负载就会上去
4、说明
云环境下,安全策略可能会干扰测试的进行。
采用如下步骤可以规避麻烦:
4.1、测试机器和intercept部署到一台机器
4.2、tcpcopy端-c参数采用tcpcopy所在的线上机器ip地址
4.3、在线上机器设置iptables黑洞来过滤掉测试服务器的响应包
iptables -I INPUT -p tcp --sport 测试服务的端口 -j DROP -s 测试服务所在机器的ip地址
4.4、千万要注意在测试服务器不要设置路由了,否则会受到干扰
如果不加iptables,会报 slide win:too many packs:286,p:34604
iptables -I INPUT -p tcp --sport 20836 -j DROP -s 172.18.21.11
iptables -I INPUT -p tcp --sport 7048 -j DROP -s 172.18.21.11
使用完后删除iptables
显示本机iptables信息:iptables -L INPUT --line-numbers
删除iptables: iptables -D INPUT 1
5、其他
githup地址:https://github.com/wangbin579/tcpcopy