tcpcopy是一种重放TCP流的工具,可使用真实环境的流量来测试互联网服务器上的应用程序。
大多数流量类产品的测试都无法做到全面性的请求模拟测试。尤其是在现在复杂的网络环境下,各种ddos,sql注入等网络攻击的手段千奇百怪。所以流量类产品上线前的测试更需要慎重对待。由此,tcpcopy应运而生。tcpcopy是一种请求复制(所有基于tcp的packets)工具,可以把在线流量导入到测试系统中去,甚至可以放大在线流量,为流量类产品的测试多加一层保障。
(tcpcopy实现流程图)
由上图可知,tcpcopy由两部分组成:tcpcopy和intercept。当tcpcopy在联机服务器上运行并捕获联机请求时,拦截在辅助服务器上运行,并执行一些辅助工作,例如将响应信息传递到tcpcopy。应该注意的是,测试应用程序在目标服务器上运行。
tcpcopy默认情况下使用原始套接字输入技术来捕获网络层的联机数据包并进行必要的处理(包括TCP交互模拟,网络等待时间控制和常见的上层交互模拟),并且默认情况下使用原始套接字输出技术来将数据包发送到目标服务器(图中粉红色箭头所示)。
在目标服务器上进行TCPCopy所需的唯一操作是设置适当的路由命令,以将响应数据包(图中绿色箭头所示)路由到辅助服务器。
拦截负责将响应头(默认情况下)传递给tcpcopy。通过捕获响应数据包,拦截程序将提取响应头信息,并使用特殊通道将响应头发送到tcpcopy(图中紫色箭头所示)。当tcpcopy接收到响应标头时,它将利用标头信息来修改联机数据包的属性,并继续发送另一个数据包。应当注意,来自目标服务器的响应被路由到辅助服务器,该服务器应充当黑洞。
所需环境:线上机器平台----辅助服务器----测试机器平台如机器资源有限,可将辅助服务器和测试机器归属于同一台或同一组机器
1.线上环境安装tcpcopy:
注:线上环境安装之前也应该先在测试环境测试安装,并且采用灰度安装的方式。
wget https://github.com/session-replay-tools/tcpcopy/archive/1.0.0.tar.gztar xvf 1.0.0.tar.gzcd tcpcopy-1.0.0./configure --prefix=/opt/tcpcopy/makemake install
2.辅助机器安装intercept
yum -y install libpcap-develhttps://github.com/session-replay-tools/intercept/archive/1.0.0.tar.gztar xvf 1.0.0.tar.gzcd intercept-1.0.0./configure --prefix=/opt/tcpcopy/makemake install
3.使用tcpcopy
首先需要在辅助服务器上启动intercept。(8000为流量端口,需根据实际情况自己设置)
/opt/tcpcopy/sbin/intercept -i eth0 -F 'tcp and src port 8000' -d
参数详解:
再启动线上平台的tcpcopy
/opt/tcpcopy/sbin/tcpcopy -x 8000-测试服务器ip:8000 -s 服务服务器ip -c 数据包原地址 -n 2 -d
最后一步,在测试服务器上开启路由
注:辅助服务器和测试服务器需要在一个子网下
route add -net 测试服务器子网网段 netmask 255.255.255.0 gw 辅助服务器入口ip
此命令的意思是把发往整个子网地址的数据包全部转给辅助服务器(服务服务器还充当黑洞服务器的角色)
注意点:
tcpcopy源码及文章参考:https://github.com/session-replay-tools/tcpcopy