GoReplay là gì?

Github: https://github.com/buger/goreplay

  • Nó capture các request HTTP mà server nhận được và sau đó sao chép traffic đến một server khác.
  • Ví dụ: khi bạn cần test traffic live của version mới service của bạn trên môi trường production, bạn có thể kiểm tra khả năng đáp ứng của service bằng cách sao chép traffic trên live bằng GoReplay.
  • Điều này có thể được thực hiện mà không ảnh hưởng đến service và traffic live hiện có. (Vì GoReplay sử dụng libpcap, lấy các gói tin ở mức L2, cũng như tcpdump)
  • Giải quyết vấn đề của các shadows proxy một phương pháp được sử dụng cho mục đích tương tự. 

Chúng ta sẽ thử các ví dụ sau

  • Capture các request package HTTP và sao chép chúng
  • Lưu package vào file, khôi phục nó từ file
  • Filtering request packets
  • Rewriting request headers

Cài đặt GorePlay

Bạn có thể tải xuống rpm, deb và tar.gz từ
https://github.com/buger/gor/releases

Đối với AmazonLinux, bạn có thể lấy tar.gz của file binary. Nếu bạn lấy tar.gz và giải nén nó, bạn sẽ nhận được file “gor”.

Cách sử dụng đơn giản.

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

Theo mặc định, response sẽ không được tiếp nhận.
Bạn có thể nhận chúng bằng cách thêm tùy chọn --output-http-track-response.

Tiếp theo chúng ta sẽ chuyển tiếp các package đến server đích:

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

Lưu các request vào một tệp

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

Khôi phục và gửi các request được lưu trữ trong tệp đến server đích

sudo ./gor --input-file requests.gor --output-http="http://localhost:8001"

Bạn cũng có thể chỉ định nhiều địa chỉ IP để gửi request đến bằng tính năng round-robin.

Phần thân response được thiết kế để nhận tối đa 200KB theo mặc định.

Hỗ trợ basic authentication. Bạn có thể chỉ định user:pass@ trước URL.

sudo ./gor --input-raw :80 --output-http "http://user:pass@staging.com"

Filtering Requests.
Chỉ copy traffic các request tới /api

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

Chỉ loại trừ các request tới /api

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

Trường hợp sử dụng ví dụ 1

  • Capture các gói HTTP đến /production/submit trên cổng 80
  • Đường dẫn thay đổi từ /production/submit thành /staging/submit/
  • Lưu địa chỉ IP nguồn của các package
  • Chuyển lại gói đến https://staging.abc.com
sudo ./gor --input-raw :80 --output-http 'https://staging.abc.com '
--http-allow-url /production/submission
--http-rewrite-url /production/submission:/staging/submission --input-raw-realip-header "X-Real-IP"

Trường hợp sử dụng ví dụ 2

Ghi lại các request và lưu nó vào một file.
AUTH-TOKEN được viết lại thành một giá trị tùy ý cho người dùng thử nghiệm trên môi trường staging.
Không lưu các request sign_in, sign_out.

sudo ./gor --input-raw :80 --output-file=requests.gor 
--input-raw :80 --output-file=requests.gor
--http-set-header "X-HTTP-AUTH-TOKEN: abcdefghijk"
--http-disallow-url /sign_in
--http-disallow-url /sign_out
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments