官网
https://github.com/wangbin579/tcpcopy
XCopy是由主要由网易的[王斌](http://weibo.com/tcpcopy)开发的一套流量复制测试工具。
XCopy系列包括 TCPCopy、UDPCopy、MysqlCopy 等开源软件。
组成结构
从传统架构的 rawsocket+iptable+netlink,到新架构的 pacp+route,它经历了三次架构调整,
现如今的 TCPCopy 分为三个角色:
Online Server(OS):上面要部署 TCPCopy,从数据链路层(pcap 接口)抓请求数据包,发包是从IP层发出去;
Test Server(TS):最新的架构调整把 intercept 的工作从 TS 中 offload 出来。TS 设置路由信息,把 被测应用 的需要被捕获的响应数据包信息路由到 AS;
Assistant Server(AS):这是一台独立的辅助服务器,原则上一定要用同网段的一台闲置服务器来充当辅助服务器。AS 在数据链路层截获到响应包,从中抽取出有用的信息,再返回给相应的 OS 上的 tcpcopy 进程。
安装
需要三台机器,线上机器、测试机器、辅助机器
首先,确保机器上的各种软件都具备
1.git软件
yum install git-core
apt-get install git (二选一)
2.编译
如果执行./configure 报:./configure: error: C compiler cc is not found
解决方法:yum install gcc gcc-c++ ncurses-devel perl
make :Command not found
解决方法:make:avg._clnt.c :Command not found
如果执行 ./configure 报:checking for pcap.h ... not found
解决方法:yum -y install libpcap-devel
执行make install 报错:checking for pcap_set_immediate_mode() ... not found
解决方法:重新执行下configure还不行就重装下make
Online Server 上的抓包(线上机器安装tcp client )
git clone git://github.com/session-replay-tools/tcpcopy.git
cd tcpcopy
./configure --prefix=/目录 #默认/usr/local/bin
make
make install
安装成功后,会在/usr/local 下出现tcpcopy命令
Assistant Server (辅助机器安装tcp intercept )
git clone https://github.com/session-replay-tools/intercept.git
cd intercept/
./configure
make
make install
安装成功后,会在/usr/local 下出现intercept命令
服务启动
测试机器上加路由
route add -host 10.10.1.245 gw 10.10.2.242
解释:客户端(10.10.1.245)的请求走辅助服务器(10.10.2.242),如果是外网的应用,测试服务器的默认路由可以设置成辅助服务器。
or
route add -net *.*.*.* netmask 255.255.255.0 gw *.*.*.*
注意:辅助机器和测试机器是同一个网段
启动辅助服务器intercept(10.10.2.242)的tcpcopy server
/usr/local/bin/intercept -i eth1 -F 'tcp and src host 10.10.2.241 and src port 80' -d -l intercept.log
启动线上服务器(10.10.2.240)的tcpcopy client
tcpcopy -x 10.10.2.240:80-10.10.2.241:80 -s 10.10.2.242 -i eth1 -d
解释:复制线上10.10.2.240:80的流量到测试服务器10.10.2.241:80,
-s指定辅助服务器(intercept server),
-i 指定从那块网卡抓包,
-d 全流量复制
-r 20 -d 复制20%的流量
-n 2 -d 放大2倍流量
测试
在其他机器上访问线上机器的一个接口
在测试机器上看access日志看是否有假ip(10.10.2.240)过来的相应接口的请求
1、如果在测试机上没有收到请求,先用tcpdump看下数据包情况(sudo tcpdump -n -vv -s 3600 -X host 10.10.2.240 and port 80 -w tcpcopy.cap)将生成的tcpcopy.cap文件导入到Wireshake(可分析tcp包)中,如果发现只有SYN和RST,联系OPS改宿主机配置(修改前宿主机会限制收2层信息)
2、还不行的话看看是不是tcpcopy装的有问题,重装下~还不行就再联系下OPS
参考:
https://github.com/wangbin579/tcpcopy
https://www.oschina.net/p/tcpcopy
http://blog.csdn.net/h348592532/article/details/50547207
http://www.cnblogs.com/yuyijq/p/4541660.html (没有实践过)