GoReplaygor学习和使用笔记

编程

其实这篇文章最核心就是处理怎么加参数,设置请求头等特殊处理的方法参数

 

依赖

要使用 gor , 你需要先有一个 web server. 当然, 也可以使用 gor 自带的文件服务器, 启动如下:

 

1

 

gor file-server :8000

表示将当前目录作为文件服务器的根目录, 监听端口为 8000

安装

下载编译好的二进制文件 download

也可以自行编译.

捕获 web 流量

运行如下命令:

 

1

 

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

这命令表示: 监听所有活跃于开放的端口 8000, 并且将它 log 到标准输出.

这时, 你就可以在浏览器中访问 http://localhost:8000 , 或使用 curl http://localhost:8000 就可以看到它的输出了.

注意: 默认情况下, GoReplay 不会跟踪响应, 你可以这样子开启这个功能: --output-http-track-response

回放

 

1

 

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

"http://localhost:8001"

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

保存到文件,然后再回放

 

1

2

3

4

5

 

保存到文件:

sudo ./gor --input-raw :8000 --output-file=requests.gor

 

回放

./gor --input-file requests.gor --output-http=

"http://localhost:8001"

回放到多个站点

 

1

 

sudo ./gor --input-tcp :28020 --output-http

"http://staging.com" --output-http

"http://dev.com"

分割流量

按轮询方式

 

1

 

sudo ./gor --input-raw :80 --output-http

"http://staging.com" --output-http

"http://dev.com" --split-output

true

输入输出选项

输入

  • --input-raw
  • --input-file
  • --input-tcp

输出

  • --output-http
  • --output-file
  • --output-tcp
  • --output-stdout

跟踪重定向

 

1

 

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

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

HTTP 超时设置

 

1

 

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

性能测试

 

1

 

gor --input-file

"requests.gor|200%" --output-http

"staging.com"

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

查看统计信息

 

1

 

--stats --output-http-stats

一直不断重放

 

1

 

--input-file-loop

速率限制

绝对值

 

1

 

gor --input-tcp :28020 --output-http

"http://staging.com|10"

表示最大不超过 10 QPS

百分比

 

1

 

gor --input-raw :80 --output-tcp

"replay.local:28020|10%"

不超过原流量的 10%

过滤请求

允许的 url 正则

 

1

 

gor --input-raw :8080 --output-http staging.com --http-allow-url /api

表示只允许 /api 的请求

禁止的 url 正则

 

1

 

gor --input-raw :8080 --output-http staging.com --http-disallow-url /api

 /api 之外的请求

基于方法

 

1

 

gor --input-raw :80 --output-http

"http://staging.server" --http-allow-method GET --http-allow-method OPTIONS

表示只允许 GET , OPTIONS 的请求

基于请求头

 

1

2

3

 

gor --input-raw :8080 --output-http staging.com --http-allow-header api-version:^1.0d

 

gor --input-raw :8080 --output-http staging.com --http-disallow-header

"User-Agent: Replayed by Gor"

重写请求

 

1

 

gor --input-raw :8080 --output-http staging.com --http-rewrite-url /v1/user/([^\/]+)/ping:/v2/user/

$1/ping

设置 url 参数

 

1

 

gor --input-raw :8080 --output-http staging.com --http-set-param api_key=1

设置 HEADER

 

1

 

gor --input-raw :80 --output-http

"http://staging.server" --http-header

"User-Agent: Replayed by Gor" --http-header

"Enable-Feature-X: true"

导出到 ES

 

1

 

./gor --input-raw :8000 --output-http http://staging.com --output-http-elasticsearch localhost:9200/gor

ES的格式

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

 

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 的支持

要 0.16.1 及以上版本

 

1

 

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

Author emacsist

LastMod 2018-04-12

License CC BY-NC-ND 4.0

其他参考:

http流量复制工具goreplay

ttps://blog.csdn.net/zhengwish/article/details/79361612

 

流量回放的实践--goreplay的使用

https://t880216t.github.io/2019/10/22/gor/

以上是 GoReplaygor学习和使用笔记 的全部内容, 来源链接: utcz.com/z/518239.html

回到顶部