前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tcpcopy-流量重放工具

tcpcopy-流量重放工具

作者头像
胡齐
发布2019-11-12 18:59:37
3.8K1
发布2019-11-12 18:59:37
举报
文章被收录于专栏:运维猫运维猫

1、简述:

tcpcopy是一种重放TCP流的工具,可使用真实环境的流量来测试互联网服务器上的应用程序。

2、描述:

大多数流量类产品的测试都无法做到全面性的请求模拟测试。尤其是在现在复杂的网络环境下,各种ddos,sql注入等网络攻击的手段千奇百怪。所以流量类产品上线前的测试更需要慎重对待。由此,tcpcopy应运而生。tcpcopy是一种请求复制(所有基于tcp的packets)工具,可以把在线流量导入到测试系统中去,甚至可以放大在线流量,为流量类产品的测试多加一层保障。

3、情景:

  • 分布式压力测试:(利用tcpcopy复制或放大生产流量,以触发验证高并发大流量场景下的bug)
  • 稳定性测试:(利用tcpcopy复制或放大生产流量,验证系统服务稳定性)
  • 回归测试:(利用tcpcopy复制生产流量,复现bug问题)
  • 性能比较:(利用tcpcopy复制或放大生产流量,验证新版本性能是否达标)

(tcpcopy实现流程图)

由上图可知,tcpcopy由两部分组成:tcpcopy和intercept。当tcpcopy在联机服务器上运行并捕获联机请求时,拦截在辅助服务器上运行,并执行一些辅助工作,例如将响应信息传递到tcpcopy。应该注意的是,测试应用程序在目标服务器上运行。

tcpcopy默认情况下使用原始套接字输入技术来捕获网络层的联机数据包并进行必要的处理(包括TCP交互模拟,网络等待时间控制和常见的上层交互模拟),并且默认情况下使用原始套接字输出技术来将数据包发送到目标服务器(图中粉红色箭头所示)。

在目标服务器上进行TCPCopy所需的唯一操作是设置适当的路由命令,以将响应数据包(图中绿色箭头所示)路由到辅助服务器。

拦截负责将响应头(默认情况下)传递给tcpcopy。通过捕获响应数据包,拦截程序将提取响应头信息,并使用特殊通道将响应头发送到tcpcopy(图中紫色箭头所示)。当tcpcopy接收到响应标头时,它将利用标头信息来修改联机数据包的属性,并继续发送另一个数据包。应当注意,来自目标服务器的响应被路由到辅助服务器,该服务器应充当黑洞。

4、安装及使用tcpcopy

所需环境:线上机器平台----辅助服务器----测试机器平台如机器资源有限,可将辅助服务器和测试机器归属于同一台或同一组机器

1.线上环境安装tcpcopy:

注:线上环境安装之前也应该先在测试环境测试安装,并且采用灰度安装的方式。

代码语言:javascript
复制
 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

代码语言:javascript
复制
 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为流量端口,需根据实际情况自己设置)

代码语言:javascript
复制
 /opt/tcpcopy/sbin/intercept -i eth0 -F 'tcp and src port 8000' -d

参数详解:

  • -i, intercept会监听端口,和tcpcopy进行通信,-i就是指定监听在哪个端口。tcpcopy启动的时候会来连这个端口,如果连不上,就会启动失败。
  • -F, 过滤规则,语法和pcap一样。
  • -d, 已守护进程方式运行

再启动线上平台的tcpcopy

代码语言:javascript
复制
 /opt/tcpcopy/sbin/tcpcopy -x 8000-测试服务器ip:8000 -s 服务服务器ip -c 数据包原地址 -n 2 -d 
  • -x, 是指本机8000端口的流量copy到测试服务器的8000端口
  • -s, 指定intercept机器的地址,tcpcopy要和intercept建立连接
  • -c 伪装地址,在把流量复制到测试服务器的时候,修改数据包的源地址(建议为测试服务器同网段地址),这样方便指定路由。也可以写成192.168.2.x,这样源地址就是指定网段中的地址了。
  • -n 流量放大倍数,如果不是压测目的就不用指定这个参数。
  • -d 以守护模式运行。

最后一步,在测试服务器上开启路由

注:辅助服务器和测试服务器需要在一个子网下

代码语言:javascript
复制
 route add -net 测试服务器子网网段 netmask 255.255.255.0 gw 辅助服务器入口ip

此命令的意思是把发往整个子网地址的数据包全部转给辅助服务器(服务服务器还充当黑洞服务器的角色)

注意点:

  • 为保证线上稳定,使用tcpcopy前最好在测试环境多模拟安装使用几次。
  • 线上环境使用完tcpcopy后,建议灰度删除,避免不必要的影响
  • 辅助服务器还需要扮演一个黑洞角色,所以不能开启ip_forward

tcpcopy源码及文章参考:https://github.com/session-replay-tools/tcpcopy

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、简述:
  • 2、描述:
  • 3、情景:
  • 4、安装及使用tcpcopy
相关产品与服务
测试服务
测试服务 WeTest 包括标准兼容测试、专家兼容测试、手游安全测试、远程调试等多款产品,服务于海量腾讯精品游戏,涵盖兼容测试、压力测试、性能测试、安全测试、远程调试等多个方向,立体化安全防护体系,保卫您的信息安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档