其实这篇文章最核心就是处理怎么加参数,设置请求头等特殊处理的方法参数
依赖
要使用 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\.0\d
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的使用
来源:oschina
链接:https://my.oschina.net/newchaos/blog/4355380