流量复制工具--GoReplay使用笔记

2024-01-27 17:48

本文主要是介绍流量复制工具--GoReplay使用笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GoReplay简介

GoReplay是一款开源的用来进行http流量录制与回放的工具,因此可以通过它来进行线上真实流量录制然后将录制的流量回放到测试环境用来确认新开发的功能是否有问题,这样可以极大的提高新功能发布的信心,不得不说是一款神器。

它的Github主页如下:https://github.com/buger/goreplay

GoReplay安装

#下载包wget https://github.com/buger/goreplay/releases/download/v1.0.0/gor_1.0.0_x64.tar.gz#解压tar xvf gor_1.0.0_x64.tar.gz

流量捕获

运行如下命令:

sudo ./gor --input-raw :8000 --output-stdout

这命令表示: 监听所有活跃于开放的端口 8000, 并且将它 log 到标准输出。
这时, 你就可以在浏览器中访问 http://localhost:8000 , 或使用 curl http://localhost:8000 就可以看到它的输出了。
注意: 默认情况下, GoReplay 不会跟踪响应, 你可以这样子开启这个功能: --output-http-track-response。

回放

sudo ./gor --input-raw :8000 --output-http="http://localhost:8001"

就可以将 8000 端口的流量, 重放到 8001 端口的服务了.

保存到文件,然后再回放
保存到文件:
sudo ./gor --input-raw :8000 --output-file=requests.gor
回放
./gor --input-file requests.gor --output-http="http://localhost:8001"
回放到多个站点
sudo ./gor --input-tcp :28020 --output-http "http://staging.com"  --output-http "http://dev.com"
分割流量
按轮询方式
sudo ./gor --input-raw :80 --output-http "http://staging.com"  --output-http "http://dev.com" --split-output true

跟踪重定向

gor --input-tcp replay.local:28020 --output-http http://staging.com --output-http-redirects 2

–output-http-redirects 2 表示最多跟踪2层的重定向

HTTP 超时设置

gor --input-tcp replay.local:28020 --output-http http://staging.com --output-http-timeout 30s

性能测试

gor --input-file "requests.gor|200%" --output-http "staging.com"

表示放大2倍速度来回放.

查看统计信息

--stats --output-http-stats
循环重放
--input-file-loop

速率限制

绝对值
gor --input-tcp :28020 --output-http "http://staging.com|10"

表示最大不超过 10 QPS

百分比
gor --input-raw :80 --output-tcp "replay.local:28020|10%"

不超过原流量的 10%

过滤请求

url 正则
# 表示只允许 /api 的请求
gor --input-raw :8080 --output-http staging.com --http-allow-url /api
# 除 /api 之外的请求
gor --input-raw :8080 --output-http staging.com --http-disallow-url /api

–http-allow-url 表示允许的url
–http-disallow-url 表示禁止

基于方法
gor --input-raw :80 --output-http "http://staging.server" --http-allow-method GET --http-allow-method OPTIONS

表示只允许 GET , OPTIONS 的请求

基于请求头
gor --input-raw :8080 --output-http staging.com --http-allow-header api-version:^1\.0\d
gor --input-raw :8080 --output-http staging.com --http-disallow-header "User-Agent: Replayed by Gor"
重写请求
gor --input-raw :8080 --output-http staging.com --http-rewrite-url /v1/user/([^\\/]+)/ping:/v2/user/$1/ping
url 参数过滤
gor --input-raw :8080 --output-http staging.com --http-set-param api_key=1
设置 HEADER
gor --input-raw :80 --output-http "http://staging.server" --http-header "User-Agent: Replayed by Gor" --http-header "Enable-Feature-X: true"
导出到 ES
./gor --input-raw :8000 --output-http http://staging.com  --output-http-elasticsearch localhost:9200/gor

Es的格式

type ESRequestResponse struct {ReqURL               string `json:"Req_URL"`ReqMethod            string `json:"Req_Method"`ReqUserAgent         string `json:"Req_User-Agent"`ReqAcceptLanguage    string `json:"Req_Accept-Language,omitempty"`ReqAccept            string `json:"Req_Accept,omitempty"`ReqAcceptEncoding    string `json:"Req_Accept-Encoding,omitempty"`ReqIfModifiedSince   string `json:"Req_If-Modified-Since,omitempty"`ReqConnection        string `json:"Req_Connection,omitempty"`ReqCookies           string `json:"Req_Cookies,omitempty"`RespStatus           string `json:"Resp_Status"`RespStatusCode       string `json:"Resp_Status-Code"`RespProto            string `json:"Resp_Proto,omitempty"`RespContentLength    string `json:"Resp_Content-Length,omitempty"`RespContentType      string `json:"Resp_Content-Type,omitempty"`RespTransferEncoding string `json:"Resp_Transfer-Encoding,omitempty"`RespContentEncoding  string `json:"Resp_Content-Encoding,omitempty"`RespExpires          string `json:"Resp_Expires,omitempty"`RespCacheControl     string `json:"Resp_Cache-Control,omitempty"`RespVary             string `json:"Resp_Vary,omitempty"`RespSetCookie        string `json:"Resp_Set-Cookie,omitempty"`Rtt                  int64  `json:"RTT"`Timestamp            time.Time
}

HTTPS 的支持

--input-tcp-secure --input-tcp-certificate ./cert.pem --input-tcp-certificate-key ./key.pem --output-tcp-secure

常用命令

-input-raw 抓取指定端口的流量 gor --input-raw :8080
-output-stdout 打印到控制台
-output-file 将请求写到文件中 gor --input-raw :80 --output-file ./requests.gor
-input-file 从文件中读取请求,与上一条命令呼应 gor --input-file ./requests.gor
-exit-after 5s 持续时间
-http-allow-url url白名单,其他请求将会被丢弃
-http-allow-method 根据请求方式过滤
-http-disallow-url 遇上一个url相反,黑名单,其他的请求会被捕获到

要 0.16.1 及以上版本

更多参考官方文档:https://github.com/buger/goreplay/wiki/Getting-Started
http://www.likecs.com/show-18920.html

这篇关于流量复制工具--GoReplay使用笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/651026

相关文章

Java中的Cursor使用详解

《Java中的Cursor使用详解》本文介绍了Java中的Cursor接口及其在大数据集处理中的优势,包括逐行读取、分页处理、流控制、动态改变查询、并发控制和减少网络流量等,感兴趣的朋友一起看看吧... 最近看代码,有一段代码涉及到Cursor,感觉写法挺有意思的。注意是Cursor,而不是Consumer

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

Docker部署Jenkins持续集成(CI)工具的实现

《Docker部署Jenkins持续集成(CI)工具的实现》Jenkins是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins... 目录前言一、准备工作二、设置变量和目录结构三、配置 docker 权限和网络四、启动 Jenkins

linux如何复制文件夹并重命名

《linux如何复制文件夹并重命名》在Linux系统中,复制文件夹并重命名可以通过使用“cp”和“mv”命令来实现,使用“cp-r”命令可以递归复制整个文件夹及其子文件夹和文件,而使用“mv”命令可以... 目录linux复制文件夹并重命名我们需要使用“cp”命令来复制文件夹我们还可以结合使用“mv”命令总

如何使用CSS3实现波浪式图片墙

《如何使用CSS3实现波浪式图片墙》:本文主要介绍了如何使用CSS3的transform属性和动画技巧实现波浪式图片墙,通过设置图片的垂直偏移量,并使用动画使其周期性地改变位置,可以创建出动态且具有波浪效果的图片墙,同时,还强调了响应式设计的重要性,以确保图片墙在不同设备上都能良好显示,详细内容请阅读本文,希望能对你有所帮助...

Rust中的注释使用解读

《Rust中的注释使用解读》本文介绍了Rust中的行注释、块注释和文档注释的使用方法,通过示例展示了如何在实际代码中应用这些注释,以提高代码的可读性和可维护性... 目录Rust 中的注释使用指南1. 行注释示例:行注释2. 块注释示例:块注释3. 文档注释示例:文档注释4. 综合示例总结Rust 中的注释

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

Linux使用cut进行文本提取的操作方法

《Linux使用cut进行文本提取的操作方法》Linux中的cut命令是一个命令行实用程序,用于从文件或标准输入中提取文本行的部分,本文给大家介绍了Linux使用cut进行文本提取的操作方法,文中有详... 目录简介基础语法常用选项范围选择示例用法-f:字段选择-d:分隔符-c:字符选择-b:字节选择--c

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring