GoReplay开源工具使用教程

目录

一、GoReplay环境搭建

1、Mac、Linux安装GoReplay环境

二、GoReplay录制与重播

1、搭建练习接口

2、录制命令

3、重播命令

三、GoReplay单个命令

1、常用命令

2、其他命令

3、命令示例

4、性能测试

5、正则表达式

四、gorepaly组合命令

1、组合命令实例

2、gorepaly注意事项


一、GoReplay环境搭建

1、Mac、Linux安装GoReplay环境

1,项目下载地址:

https://github.com/buger/goreplay/releases/tag/1.3.3

2,mac、Linux可以直接在终端输入

curl -L -O https://github..com/buger/goreplay/releases/download/1.3.3/gor_1.3.3_mac.tar.gz

3,解压压缩包

tar -zxvf gor_1.3.3_mac.tar.gz

4,配置环境变量,mac、Linux修改/ect/profile文件,在末尾添加

# 配置goreplay环境变量
GOR_HOME="yourPath/goreplay"
export PATH="$GOR_HOME:$PATH"

5,验证环境,显示版本号就安装完成

gor version

二、GoReplay录制与重播

1、搭建练习接口

你可以通过调用快速启动服务器gor file-server :8000,这将在端口上启动当前目录的简单文件服务器8000

gor file-server :8000

2、录制命令

1,录制所有http请求,以下命令是录制5000端口全部的http请求,接受之前的录制文件./log/logrequests_0.gor,并且把新的录制文件输出到./log/logrequests.gor文件,请注意,默认情况下 GoReplay 不跟踪响应,您可以使用--output-http-track-response选项启用它们,在文件名中使用日期变量:%Y-%m-%d-%H

sudo gor --input-raw 127.0.0.1:5000 --output-stdout --output-file='./log/logrequests.gor' -output-file-append --output-file-max-size-limit "4294967296"

  • --input-raw- 用于捕获HTTP流量,您应该指定IP地址或接口和应用程序端口。有关捕获和重放流量的更多信息。
  • --input-file- 接受之前使用 录制的文件--output-file。有关从文件保存和重播的更多信息

3、重播命令

1,下列这行命令展示了使用录制的文件重播请求,所有记录的请求都到达第二个服务器,并且它们将以与记录时相同的顺 序和完全相同的时间重播。--input-file参数接受录制的文件,--output-http参数接受需要重播的服务器,出现FileInput: end of file 提示,说明重播完成

gor --input-file='./log/logrequests_0.gor' --output-http='http://127.0.0.1:5000'

三、GoReplay单个命令

1、常用命令

当您需要仅捕获流量的特定部分(例如 API 请求)时,匹配非常有用。可以按 URL、HTTP 标头或 HTTP 方法进行匹配,匹配方式使用正则表达式。

-http-allow-header value 根据请求头匹配,其他内容将被排除
-http-allow-method value 根据请求方式匹配,其他内容将被排除
-http-allow-url value 根据请求url匹配,其他内容将被排除

-http-disallow-header value 根据请求头匹配,其他内容将被记录

-http-disallow-url value 根据请求url匹配,其他内容将被记录

-http-header-limiter value 根据请求头,接受一部分请求
-http-param-limiter value 根据url,接受一部分请求

-http-original-host 保留原始请求头,默认gor会用--output http提供的主机替换Host http头
-http-rewrite-header value 根据匹配的内容重写请求头
-http-rewrite-url value 根据匹配的内容重写请求url
-http-set-header value 向请求中添加额外的请求头
-http-set-param value 设置请求中的param参数,如果已经存在,将会被覆盖
-input-file value 从文件读取请求
-input-file-loop 循环读取文件,一般用于性能测试

-input-raw value 从给定端口捕获流量,需要root权限

-input-tcp-secure 启用TLS证书,需要指定证书跟密钥

-input-tcp-certificate string TLS开启时,指定的证书路

-input-tcp-certificate-key string TLS开启时,指定的密钥路径

-output-file value 将请求写入文件

-output-file-queue-limit int 区块队列的长度。默认值:256

-output-file-size-limit value 每个区块的大小。默认值:32mb

-output-http value  将传入请求转发到给定的http地址

--output-http-track-response 默认情况下 GoReplay 不跟踪响应,加上这个参数跟踪响应

--input-raw-track-response 默认情况下input-raw不拦截响应,仅拦截请求。您可以加这个参数开启响应跟踪。启用后,您将能够访问中间件和output-file

--input-file-dry-run 试运行模式,来预览需要多长时间以及给定文件输入中有多少个请求。它还会告诉您有用的信息,例如请求之间的最短和最长时间,以及第一次请求的时间。

--input-raw-max-wait 跳过大的延迟,选项(以秒为单位),该选项允许跳过录制文件中的长时间停顿。

--input-raw-allow-incomplete  如果打开,Gor将记录丢失数据包的HTTP消息

2、其他命令

-input-raw-engine libpcap 选择libpcap(默认)或者`raw_socket`拦截流量

-output-http-debug  启用http调试输出。

-input-raw-realip-header string 如果不为空,默认在请求头加上实际ip,X-Real-IP

-input-raw-track-response 如果启用,Gor将跟踪请求之外的响应,并且它们将可用于中间件和文件输出

-input-kafka-host string 向Kafka发送请求和响应统计信息
-input-kafka-json-format 启动表示消息是json格式而不是GoReplay格式
-input-kafka-topic string 向Kafka发送请求和响应统计信息

-output-kafka-host string  从Kafka读取请求和响应统计信息

-output-kafka-json-format  如果启用,它将把消息从GoReplay文本格式序列化为JSON

-output-kafka-topic string 从Kafka读取请求和响应统计信息

-input-dummy value 用于测试输出。每1s发出'get /'请求

-output-file-append  刷新的块是否附加到存在文件,只保留一个流量文件

-output-file-flush-interval duration 强制刷新文件缓冲区的时间间隔,默认为1s,一般不需要改动

-output-http-elasticsearch string 向ElasticSearch发送请求和响应统计信息

-output-http-redirects int 启用重定向的频率

-output-http-response-buffer int HTTP响应缓冲区大小,此大小之后的所有数据都将被丢弃

-output-http-stats  每5秒向控制台报告一次http输出队列统计信息

-output-http-timeout duration 指定HTTP请求/响应超时。默认情况下为5s

-output-http-track-response 如果启用,HTTP输出响应将设置为所有输出,如stdout、file等

-output-http-workers int 以多少个协程同时产生http请求,默认是动态,官方文档显示无限制,实际代码中设置了10,这块有争议

-output-null 用于测试输入。删除所有请求

-output-stdout 用于测试输入。只是将来自输入的数据打印到控制台。

-output-tcp value 用于Gor实例之间的内部通信sh

-output-tcp-secure 使用TLS安全连接–另一端的输入文件也应该打开TLS

-output-tcp-stats 每5秒向控制台报告一次TCP输出队列统计信息

-verbose 启用更详细的输出

3、命令示例

命令区分大小写,参数后面的精准匹配的时候不区分大小写,用正则表达式区分大小写

1,提示-bash: !': event not found,输入echo $-显示himBH,原因是确认是由于 H - histexpand 模式打开了导致。命令行下,双引号里面用了 ! 的话,Shell 会以为要执行历史展开,从而导致报错,解决方法:关闭 histexpand,输入set +H,再输入echo $-显示himB就可以了。

2,把双引号替换成单引号

从perf文件读取请求,添加param参数goreplay=1,添加header信息'perf':'yes',保留原始请求头,匹配url为^/user/authgetUserInfo$,输出到perf.log文件

goreplay --input-file='perf' --http-set-param 'goreplay=1' --http-set-header 'perf':'yes' --http-original-host  --output-file='perf.log' --http-allow-url ^/user/authgetUserInfo?.+

试运行模式,您无需执行实际重播即可获取有关文件内容的信息。仅支持goreplay1.3版本以上
例如,它可以告诉您文件中有多少个请求,以及重播这些请求需要多长时间。
报告示例:

gor --input-file=流量文件 --output-stdout --input-file-dry-run

找到的记录:192

格式错误的记录:<nil>

已处理的文件:1

处理的字节数:88512

最大等待时间:71.369ms

最短等待时间:15.884ms

首次等待:55.401ms

以目前的速度重放需要7.82033秒。

找到0条时间戳不正常的记录

添加请求头,goreplay:1

goreplay --input-file='perf' --http-original-host  --output-file='perf.log' --http-set-header 'goreplay:1'

添加param参数,perf=1

goreplay --input-file='perf' --http-original-host --output-file='perf.log' --http-set-param 'goreplay=1'

匹配header的Host字段包含baidu.com

goreplay --input-file='perf' --http-original-host  --output-file='perf.log' --http-allow-header '^Host: .*.baidu.com.*'

匹配url为/user开头的所有接口,后面路径包含空用*,不包含空用+,[^\/]表示除了匹配/所有的字符

goreplay --input-file='perf' --http-set-param 'goreplay=1' --http-set-header 'perf':'yes' --http-original-host  --output-file='perf.log' --http-allow-url ‘^\/user.+’

goreplay --input-file='perf' --http-set-param 'goreplay=1' --http-set-header 'perf':'yes' --http-original-host --output-file='perf.log' --http-allow-url '^\/user/[^\/]'

匹配以getUserInfo结尾的所有接口

goreplay --input-file='perf' --http-set-param 'goreplay=1' --http-set-header 'perf':'yes' --http-original-host  --output-file='perf.log' --http-allow-url ‘^.*getUserInfo?.+’

匹配url为/user开头,排除结尾是/getUserInfo的所有接口,输出到perf.log文件

以下是用--http-allow-url搭配--http-disallow-url参数组合匹配的结果,同时满足a跟b两个条件,可以正常匹配 

goreplay --input-file='perf' --http-set-param 'goreplay=1' --http-set-header 'perf':'yes' --http-original-host  --output-file='perf.log' --http-allow-url ’^\/user.*$' --http-disallow-url '.*getUserInfo$‘

更新头部信息跟param参数,如果参数存在,则更新,如果不存在,则添加,不能删除

goreplay --input-file='perf_0.log' --http-set-param 'goreplay=0' --http-set-header 'perf':'no' --http-original-host  --output-file='perf.log' 

重写请求url,匹配/user开头的url重写为/api/user开头,当重写跟匹配url一起时,先匹配url再重写url,需要匹配的url是重写之前的url

goreplay --input-file='perf' --http-set-param 'goreplay=1' --http-set-header 'perf':'yes' --http-original-host --output-file='perf.log'  --http-rewrite-url '/user/([^\/]+):/api/user/$1' --http-allow-url '^\/user.*$'

重写版本号,user重写为userv2

goreplay --input-file='perf' --http-set-param 'goreplay=1' --http-set-header 'perf':'yes' --http-original-host --output-file='perf.log' --http-rewrite-url '^/user/([^/]):/userv2/$1' --http-allow-url '^/user/[^/]'

匹配/user/orders/detail开头,结尾是大写字母+数字,8到18位的字符串

goreplay --input-file='perf' --http-set-param 'goreplay=1' --http-set-header 'perf':'yes' --http-original-host --output-file='perf.log' --http-allow-url '^/user/orders/detail/[A-Z0-9]{8,15}'

可以同时匹配到,/user/orders/detail/LBL67047,/user/orders/detail/GSHN7W61400M120,用^/user/orders/detail/[a-z0-9]{8,15},不能匹配大写字母

4、性能测试

  • 以50%的速度回放
  • goreplay --input-file='perf'  --http-original-host  --output-tcp '127.0.0.1:5000:50%'  
  • 以秒50的速度回放
  • goreplay --input-file='perf'  --http-original-host  --output-tcp '127.0.0.1:5000|50'  
  • 文件回放完继续循环
  • goreplay --input-file='perf'  --http-original-host  --output-tcp '127.0.0.1:5000'  --input-file-loop
  • 从文件读取输出到http
  • goreplay --input-file 'log_0.log' --output-http '127.0.0.1:5000' --output-stdout 
  • 从文件读取,输出到http,同时指定python中间件处理
  • goreplay --input-file 'log_0.log' --output-http '127.0.0.1:5000' --output-stdout --middleware 'python3 middleware.py'

5、正则表达式

  • 注意:goreplay无论哪个版本都不支持正反向正向预查和负向预查
  • 匹配以/user开头,^/user
  • 匹配以/user结尾,/user$
  • 匹配1个或1个以上,+
  • 匹配0,1或1个以上的,*
  • 匹配0或者1个,最多一个多,?
  • 匹配否定字符,[^]表示匹配任何字符集包括\n,[^abc]表示匹配非a或者b或者c的字符集,匹配u/s/e/r中的任一字符,[user]
  • 匹配a-z区间所有的大小写字母,[a-z][A-Z]
  • 匹配所有的字母下划线,/\w\g
  • 精准匹配以/abt开头/userinfo结尾,^/abt/userinfo$,可以匹配到/abt/userinfo,不能匹配到/abt/userinfo/a, /a/abt/userinfo,/abt/a/userinfo
  • 匹配以/abt开头/userinfo结尾,中间至少一个路径,^/abt/\w+/userinfo$,匹配/abt/aaa/userinfo,不能匹配/abt/userinfo,匹配以/abt开头/userinfo结尾,中间0-1一个路径,^/abt/\w*/userinfo$,匹配abt/aaa/userinfo,abt/userinfo
  • 匹配/user/orders/detail接口结尾是大写字母跟数字16位组合,^/user/orders/detail/[A-Z0-9]+$,/user/orders/detail/GSHN7Q02C002006
  • 匹配以'/user'开头并且不以'/auth/getUserInfo'结尾的任意字符串,^\/user(?!\/auth\/getUserInfo).*$ (不能在gor使用)
  • 匹配,/user/orders/track/GSHN7B38R00NGA4,/user/auth/mc/getKey,/user/auth,排除,/user/auth/getUserInfo

四、gorepaly组合命令

1、组合命令实例

  1. 这里用到了改变速率命令,以500%的速度输出用|500%,以每秒500个请求输出用:500
    如果输出的文件名称跟时间相关,输出的文件名优先级高,比如14跟15点都是同一个快内,但是文件名会拆分成两个
    用--output-file-queue-limit 0设置队列为0
    gor --input-file 'perf|500%' --output-file '%Y-%m-%d-%H.log' --http-disallow-url '^/user/orders/detail/[A-Z0-9]{8,15}$' --http-disallow-url '^/\w.*.html$'  --output-file-queue-limit 0
  2. 用命令匹配url同时允许多个url,允许a-url,同时允许b-url,匹配的结果会包括aurl或者b-url的所有url,url=a+b
    gor --input-file 'perf|2000%' --output-file 'perf.log' --http-allow-url '^/user/[a-zA-Z]+/[a-zA-Z]+?.+$' --http-allow-url '^/[a-zA-Z]+/auth/[a-zA-Z]+?.+$' --output-file-queue-limit 0
  3. 用命令匹配url同时不允许多个url,不允许a-url,不同时允许b-url,匹配的结果会包括除了满足a-url或者b-url的所有url,url=url-(a+b)
  4. gor --input-file 'perf|2000%' --output-file 'perf.log' --http-disallow-url '^/user/[a-zA-Z]+/[a-zA-Z]+?.+$' --http-disallow-url '^/[a-zA-Z]+/auth/[a-zA-Z]+?.+$' --output-file-queue-limit 0
  5. 用命令匹配url一个允许一个不允许,允许a-url,不同时允许b-url,匹配的结果会包括满足a-url减去b-url的所有url,url=a-b
  6. gor --input-file 'perf|2000%' --output-file 'perf.log' --http-allow-url '^/user/[a-zA-Z]+/[a-zA-Z]+?.+$' --http-disallow-url '^/[a-zA-Z]+/auth/[a-zA-Z]+?.+$' --output-file-queue-limit 0
  7. 用命令匹配允许url并且重写url跟header,允许a-url,允许b条件,重写a-url为/api/a-url,重写header为User-Agent: gor,允许处理原始数据,然后处理重写url跟header,输出后的内容,url=/api/a+b,header=重写后的a+重写后的b
  8. gor --input-file 'perf|2000%' --output-file 'perf.log' --http-allow-url '^/user/[a-zA-Z]+/[a-zA-Z]+?.+$' --http-allow-url '^/pdsearch/[0-9a-zA-Z]+/.+$'  --http-rewrite-url '(^/user/[a-zA-Z]+/[a-zA-Z]+?.+$):/api$1' --http-set-header 'User-Agent':'gor' --output-file-queue-limit 0
  9. 从url录制所有的请求,需要root权限
  10. sudo gor -input-raw '127.0.0.1:5000' --output-file 'test.gor'  --output-stdout --output-file-queue-limit 0
  11. gor命令搭配中间件处理
  12. gor --input-file 'test.gor|800%' --output-http '127.0.0.1:5000' --output-stdout --middleware 'python3 middleware.py'

2、gorepaly注意事项

1,gor录制的时候,流量会存在不完整的情况,如果直接使用中间件处理,容易报错或者出现异常,如果出现异常后,没有日志返回结束或者nohup.txt没有返回,但是gor进程已经结束了,这种情况需要手动关闭node中间件进程

2,出现异常流量的时候,建议更换流量文件或者先用gor回放到文件,然后在使用回放后的文件用中间件处理

3,回放时直接使用中间件&gor命令回放到服务器时,会消耗部分性能,比直接从流量文件回放效率低,建议流量文件先使用中间件或者命令回放一次到文件,然后直接使用文件回放到服务器,这样效率较高

4,录制的流量包体过大,需要加参数,--input-raw-override-snaplen

5、 回放流量的时候,有时候会流量波动大,偶尔流量比较小,需要加上参数--input-file-max-wait=200ms,允许跳过录制文件中的超过200ms的延迟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/483305.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宏海科技募资额有所缩减,最大销售和采购都重度依赖美的集团

《港湾商业观察》施子夫 11月29日,北交所上市审核委员会将召开2024年第24次上市委审议会议,届时将审议武汉宏海科技股份有限公司(以下简称,宏海科技)的首发上会事项。 在上会之前,宏海科技共收到北交所下…

驱动篇的开端

准备 在做之后的动作前,因为win7及其以上的版本默认是不支持DbgPrint(大家暂时理解为内核版的printf)的打印,所以,为了方便我们的调试,我们先要修改一下注册表 创建一个reg文件然后运行 Windows Registr…

渗透测试--Windows凭证收集

在渗透测试过程中,我们终究会遇到攻陷了某台加域Windows主机的情况。而这种情况下,我们很需要搜集当前主机的凭证信息。为进一步利用这些相互信任的凭证来进行横向打下基础。 在凭证收集中,我们主要有以下场景: 1.lsass.exe的DMP文…

PH热榜 | 2024-12-03

1. Vela OS 标语:利用人工智能,创业投资精准度提升十倍。 介绍:Vela操作系统是一个原生AI操作系统,它能让创业投资者的预测准确率比传统风投公司高出十倍。借助一群AI智能体,投资者可以发现蓬勃发展的市场、公司和人…

微信小程序 运行出错 弹出提示框(获取token失败,请重试 或者 请求失败)

原因是:需要登陆微信公众平台在开发管理 中设置 相应的 服务器域名 中的 request合法域名 // index.jsPage({data: {products:[],cardLayout: grid, // 默认卡片布局为网格模式isGrid: true, // 默认为网格布局page: 0, // 当前页码size: 10, // 每页大小hasMore…

Google Cloud 混合云部署连接方式最佳实践案例讲解

混合云部署连接方式 GCP 的混合云部署连接方式提供了多种选择,企业可以根据自身需求选择合适的解决方案。实施最佳实践,将有助于提高混合云架构的性能、安全性和可用性。通过合理的规划和管理,企业可以充分利用混合云的优势,实现…

nfs服务器搭建

目录 1,nfs服务端 1)安装 2)修改nfs配置文件 3)创建共享目录 4)启动服务nfs配置文件 2,客户端 3,测试 1)客户端 2)服务端查看 4,systemd实现客户…

从0开始学PHP面向对象内容之常用设计模式(策略,观察者)

PHP设计模式——行为型模式 PHP 设计模式中的行为模式(Behavioral Patterns)主要关注对象之间的通信和交互。行为模式的目的是在不暴露对象之间的具体通信细节的情况下,定义对象的行为和职责。它们常用于解决对象如何协调工作的问题&#xff…

Python办公——openpyxl处理Excel每个sheet每行 修改为软雅黑9号剧中+边框线

目录 专栏导读背景1、库的介绍①:openpyxl 2、库的安装3、核心代码4、完整代码5、最快的方法(50万行44秒)——表头其余单元格都修改样式总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍…

【AI系统】TVM 实践案例

TVM 实践案例 在本文我们探讨一下,如何利用 AI 编译器在新的硬件上部署一个神经网络,从算法设计到实际运行,有哪些需要考虑的地方?本节将以 TVM 为例,首先介绍一下 TVM 的工作流: 导入模型。TVM 可以从 Te…

【AI系统】昇腾异构计算架构 CANN

昇腾异构计算架构 CANN 本文将介绍昇腾 AI 异构计算架构 CANN(Compute Architecture for Neural Networks),这是一套为高性能神经网络计算需求专门设计和优化的架构。CANN 包括硬件层面的达芬奇架构和软件层面的全栈支持,旨在提供…

C++:map容器——自定义数据类型进行自定义排序规则

map容器和set容器自带排序操作,但是,对于自定义数据类型,二者必须指定排序规则。本文以map容器为例,针对自定义数据类型作为key值的指定排序进行程序实现。 首先,自定义数据类型:Person类,该类将…

Vue Web开发遇到问题汇总

1.Vue Web开发遇到问题汇总 1.1. vue项目main.js文件下import router from ‘./router‘默认导入router文件夹下index.js的原因 vue项目main.js文件下import router from ./router’默认导入router文件夹下index.js的原因 import router from ./router //等效于 //import rou…

lua download

https://www.lua.org/ https://www.lua.org/versions.html#5.4

CentOS7:MySQL 8.0.36升级到8.0.40

文章介绍RPM形式进行小版本升级。 1、查看系统版本 ldd --version 2、下载相应的MySQL rpm包 MySQL :: Download MySQL Community Server 3、查看现有MySQL安装的rpm rpm -qa |grep mysql 如图,有6个rpm包安装。 4、电脑上解压下载的rpm压缩包,对应…

【element-tiptap】添加公式编辑器【MathQuill】

前言:前面的文章【element-tiptap】实现公式编辑 中,已经实现了一种非常简单的公式编辑,键入latex公式直接在文档中转换。今天讲的另一个更加复杂的公式编辑器的扩展,双击公式的时候弹出公式编辑的弹窗,可以对公式进行…

SpringBoot源码-Spring Boot启动时控制台为何会打印logo以及自定义banner.txt文件控制台打印

1.当我们启动一个SpringBoot项目的时候,入口程序就是main方法,而在main方法中就执行了一个run方法。 SpringBootApplication public class StartApp {public static void main(String[] args) {// testSpringApplication.run(StartApp.class);} }publi…

【人工智能-基础】SVM中的核函数到底是什么

文章目录 支持向量机(SVM)中的核函数详解1. 什么是核函数?核函数的作用:2. 核技巧:从低维到高维的映射3. 常见的核函数类型3.1 线性核函数3.2 多项式核函数3.3 高斯径向基函数(RBF核)4. 总结支持向量机(SVM)中的核函数详解 支持向量机(SVM,Support Vector Machine)…

【Docker】Docker 容器日志过大导致磁盘爆满

docker容器的日志文件目录位于/var/lib/docker/containers/容器/容器-json.log 查看日志大小 cd /var/lib/docker/containers/ du -h --max-depth1 临时删一点 cd xxxxxxx/ tail -100 xxxxxxx-json.log > xxxxxxx-json.log 如图 解决方式(全局) …

SpringBoot集成Milvus|(实现向量的存储和查询)

此文章为转载文章: 原文链接 文章目录 SpringBoot集成Milvus|(实现向量的存储和查询)前言一、Milvus介绍二、Milvus数据库安装 1.Milvus安装环境准备(centos7)2.Milvus客户端安装3.attu新建Milvus集合 三、Milvus集成 1.依赖引入2…