TCPCopy的安装和使用

TCPCopy 有传统架构和新架构,新架构比较复杂,一般情况下传统架构就可以了。
TCPCopy分为TCPCopy client和TCPCopy server,其中TCPCopy client运行在在线服务器上面,用来捕获在线请求数据包;TCPCopy server(监听端口为36524)运行在测试机器上面,在测试服务器的响应包丢弃之前截获测试服务器的响应包,并通过TCPCopy client和TCPCopy server之间的tcp连接传递响应包的tcp和ip
头部信息给TCPCopy client,以完成TCP交互,不然TCP包就不能算到达对端。
安装:
tar -zxvf tcpcopy-0.9.0 .tar.gz
cd tcpcopy-0.9.0 
./configure
make
make install

注意:tcpcopy 和 intercept的版本,配置参数要一致

现在的代码已经放在github(https://github.com/session-replay-tools/tcpcopy)上了,1.0 以上的版本,tcpcopy 和 intercept 包已经分开了,需要单独下载安装,注意,如果在安装intercept的时候 ./configure报错checking for pcap.h … not found,可以 通过yum install libpcap-devel解决。另外1.0使用的是新架构,使用方式和传统的架构不一样,详细可以参考 http://blog.csdn.NET/wangbin579/article/details/8950282

先启动TCPCopy server (root用户执行)
1)启动内核模块ip_queue
#modprobe ip_queue
2)设置要截获的端口,并且设置对output截获
#iptables -I OUTPUT -p tcp --sport <port> -j QUEUE      //注意这里的port就是服务器监听的端口
3)启动intercept
#intercept
注意:配置好iptbales之后不要去运行service iptables start,不然新加的配置又会被清空了,如果iptables没有启动,可以在加规则之前启动;如果1),2)已经设置并起效的话,只要运行intercept就好了;测试完成之后要调用iptables -F 把过滤规则去掉

然后启动TCP Client进行包的转发

./tcpcopy -x 线上服务器监听端口号-测试服务器ip地址:测试服务器监听端口
另外可以加 -n 参数,进行多重复制,此参数的值就是代表复制过去的流量是在线的n 倍

一些注意事项

1.Linux平台,内核2.6+,需要支持netlink机制或者nfqueue(0.6.5+支持nfqueue,在 ./configure 指定nfqueue即可)。
2.TCPCopy中的 tcpcopy 和 intercept 程序运行需要 root 权限。
3.intercept 在同一台机器只需要运行一个实例就能支持多个应用的复制(设置多条 iptables 命令)。
4.TCPCopy client需要连接测试服务器(默认36524端口),所以要对外开放相应端口。
5.TCPCopy由于依赖于抓包函数,压力大的时候,抓包函数本身不可靠,所以会丢包,进而丢失请求。
6.由于 intercept 程序密切跟 ip_queue 内核模块相关,所以当压力很大的时候请求丢失率很高,需要优化 sysctl 系统参数才能达到好的效果:
7.通过 cat /proc/net/ip_queue ,查看 ip_queue 运行情况,如果Queue dropped的数值不断增大,则需要修改 ip_queue_maxlen 参数,比如 echo 4096 > /proc/sys/net/ipv4/ip_queue_maxlen ;如果Netlink dropped的数值不断增大,修改 net.core.rmem_max 和 net.core.wmem_max 参数, 比如 sysctl -w net.core.rmem_max=16777216 和 sysctl -w net.core.wmem_max=16777216 。
8.如果要复制127.0.0.1发出的请求到另外一台机器,需要设置 -c 参数。
9.测试环境最好和在线环境一致,比如连接都保持keepalive。
10.TCPCopy只与ip、tcp层的数据有关,如果请求验证与tcp层以上的协议有关,则系统不能正常运行。例如:mysql连接协议,由于权限认证与tcp层上面的mysql协议有关,所以复制过去的请求会被目标测试服务器认为非法请求,这个时候需要针对mysql协议作具体针对性的处理,tcpcopy程序才能正常运行。
11.多层架构环境下,测试系统一定要独立,与在线系统没有业务关联,否则会影响在线。
12.丢失请求率跟网络状况有关,最好在内网内复制请求。
13.本系统不支持域名,只支持ip地址。
14.为了避免不必要的麻烦,关闭的时候先关闭 tcpcopy ,然后再关闭 intercept 。
15.如果需要在测试服务器上对某些IP地址的包不进行过滤,则intercept -x IP地址1,IP地址2,表示IP1 和 IP2的包可以正常返回
16.Tcpcopy可以编译成用libpcap抓包或者使用Raw Socket抓包。Libpcap库是tcpdump使用的抓包库,Raw Socket是操作系统内建的功能。建议用libpcap抓包,以获得更高性能和较低丢包率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值