前言大家好,我是asong。今天给大家推荐一款Go语言编写的流量播放工具——goreplay;在你的工作中,你一定遇到过需要在服务器上抓包的场景。使用此工具,您可以提供帮助。goreplay的功能非常强大。支持流量的扩容和缩容,集成ElasticSearch将流量存储在ES中进行实时分析;废话不多说,接下来我们就来看看这个工具吧;goreplay介绍及安装项目地址:https://github.com/buger/goreplaygoreplay是一个开源的网络监控工具,可以实时记录TCP/HTTP流量,支持记录流量到文件或elasticSearch实时分析,以及还支持流量放大和缩小,以及频率限制;goreplay不是代理,不需要任何代码入侵,你只需要在与服务相同的机器上运行goreplay守护进程,它会在后台监听网络接口上的流量。goreplay的设计遵循Unix设计理念:一切由管道组成,各种输入复用数据到Output;可以看看官网上画的架构图:goreplay的安装比较简单,在https://github.com/buger/goreplay/releases下载操作系统对应的二进制文件即可,我的电脑是mac:解压后是一个二进制文件gor,将其添加到你的环境变量中,方便我们后续操作;以实时流量转发为例。首先,我们需要准备一个网络服务。最简单的方法就是用Gin快速实现一个helloworld。为大家实现:https://github.com/asong2020/Golang_Dream/tree/master/code_demo/gin_demo;import("flag""github.com/gin-gonic/gin")varPortstringfuncinit(){flag.StringVar(&Port,"port","8081","InputYourPort")}funcmain(){flag.Parse()r:=gin.Default()r.Use()r1:=r.Group("/api"){r1.GET("/ping",func(c*gin.Context){c.JSON(200,杜松子酒.H{“我ssage":"pong",})})}r.Run("localhost:"+Port)}由于资源有限,这里我使用一台电脑启动两个进程模拟流量转发,分别启动两个web服务监控8081和8082端口号:$gorun.--port="8081"$gorun.--port="8082"服务就完成了,下面我们启动gor守护进程进行流量监控和转发,以及8081端口的流量被转发到端口8082:$sudogor--input-raw:8081--output-http="http://127.0.0.1:8082"现在我们请求端口8081:$curl--location--requestGET'http://127.0.0.1:8081/api/ping',可以看到8082端口也被请求:流量放大和缩小Goreplay支持将抓取的流量存储在文件中,在实际工作中,我们可以使用抓取的流量来做压力测试,首先我们需要将抓取的流量保存到本地文件,然后使用该文件进行流量播放;或者上面的web程序,我们将8081端口的流量保存到本地文件:$sudogor--input-raw:8081--output-file./requests.gor我们对8081端口进行了5次请求:然后我们对8082端口进行了一次降压测试,流量翻倍:gor--input-file"requests_0.gor"--output-http="http://127.0.0.1:8082|50%"调整百分比就是放大和缩小流量。在这里我们将大小增加了一倍,我们可以看到只有2个请求到达了8082端口;我们可以调整流量播放的速度。例如,我们调整流量以10倍速度重播:$gor--input-file"requests_0.gor|1000%"--output-http="http://127.0.0.1:8082|50%"#1000%是将流量放大10倍写入ElasticSearchgoreplay可以把抓到的流量导出到Es,执行如下命令即可:$gor--input-raw:8000--output-httphttp://staging.厘米--output-http-elasticsearchlocalhost:9200/gor我们不需要提出创建请求结构,他将自动创建,具体结构如下:typeESRequestResponsestruct{ReqURLstring`json:"Req_URL"`ReqMethodstring`json:"Req`_Method"`json:ReqUserAgent“Req_User-Agent”`ReqAcceptLanguagestring`json:"Req_Accept-Language,omitempty"`ReqAcceptstring`json:"Req_Accept,omitempty"`ReqAcceptEncodingstring`json:"Req_Accept-Encoding,omitempty"`ReqIfModifiedSincestring`json:"Req_If-Modified-Since,omitempty"`ReqConnection字符串`json:"Req_Connection,omitempty"`ReqCookies字符串`json:"Req_Cookies,omitempty"`RespStatus字符串`json:"Resp_Status"`RespStatusCode字符串`json:"Resp_Status-Code"`RespProto字符串`json:"Resp_Proto,omitempty"`RespContentLength字符串`json:"Resp_Content-Length,omitempty"`RespContentType字符串`json:"Resp_Content-Type,omitempty"`RespTransferEncoding字符串`json:"Resp_Transfer-Encoding,omitempty"`RespContentEncoding字符串`json:"Resp_Content-Encoding,omitempty"`RespExpires字符串`json:"Resp_Expires,omitempty"`RespCacheControl字符串`json:"Resp_Cache-Control,omitempty"`RespVary字符串`json:"Resp_Vary,omitempty"`RespSetCookiestring`json:"Resp_Set-Cookie,omitempty"`Rttint64`json:"RTT"`Timestamptime.Time}goreplay提供的功能太多了,就不一一介绍了,大家可以执行help命令查看其他高级用法,每个命令都提供了一个示例,快速上手;$gor-hGor是一个用Go编写的简单的http流量复制工具。它的主要目标是将流量从生产服务器重放到暂存和开发环境。项目页面:https://github.com/buger/gor作者:
