Capture Traffic dan Replay Menggunakan GoReplay (gor)

GoReplay atau gor adalah tool open source untuk memonitor traffic yang datang ke server mu. Tool ini dibuat menggunakan Go. Kita dapat merekam traffic dan menulisnya ke suatu file, kemudian me-replay kembali ke URL yang ditentukan. Tool ini sangat berguna.

Saya biasanya menggunakan gor untuk debugging. Tapi ada banyak kegunaannya selain itu, seperti untuk monitoring dan analisa traffic, mensimulasikan live traffic di server staging, load testing, dan sebagainya. Kita akan membahas penggunaan basic dari gor pada artikel ini.

Cara install gor

Kita bisa download binary gor di sini, atau bisa download source code nya di https://github.com/buger/goreplay dan compile sendiri.

Capture traffic menggunakan gor

Kita dapat menggunakan command ini untuk memulai men-capture traffic dengan gor. Sudo diperlukan untuk menjalankan command ini.

sudo ./gor --input-raw :5005 --input-raw-track-response --output-file sampletraffic.gor
--input-raw :5005 untuk mencapture traffic pada port 5005.
--input-raw-track-response untuk menuliskan responsenya juga, karena by default gor tidak men-track response.
--output-file menentukan output file.

Pencet CTRL + C untuk berhenti mencapture request.

Dibawah ini adalah contoh request yang sudah disimpan ke output file.

1 a61949821661947949487690 1612733390214758300 2029300
GET /get_books?category=comic HTTP/1.1
Host: localhost:5005
User-Agent: curl/7.64.1
Accept: */*


🐵🙈🙉
2 a61949821661947949487690 1612733390214806800 2410000
HTTP/1.1 200 OK
Date: Sun, 07 Feb 2021 21:29:50 GMT
Content-Length: 42
Content-Type: text/plain; charset=utf-8

{"data": ["batman", "naruto", "doraemon"]}
🐵🙈🙉
1 84da72211661948c8678eadc 1612733472845589300 2162600
POST /add_books HTTP/1.1
Host: localhost:5005
User-Agent: curl/7.64.1
Accept: */*
Content-Length: 39
Content-Type: application/x-www-form-urlencoded

{"name":"superman", "category":"comic"}
🐵🙈🙉
2 84da72211661948c8678eadc 1612733472845632700 2560000
HTTP/1.1 200 OK
Date: Sun, 07 Feb 2021 21:31:12 GMT
Content-Length: 21
Content-Type: text/plain; charset=utf-8

{"status": "success"}
🐵🙈🙉
1 7f20725e16619497b6461f40 1612733520889231200 5138400
POST /add_user HTTP/1.1
Host: localhost:5005
User-Agent: curl/7.64.1
Accept: */*
Content-Length: 16
Content-Type: application/x-www-form-urlencoded

{"name":"logan"}
🐵🙈🙉
2 7f20725e16619497b6461f40 1612733520889298700 5932700
HTTP/1.1 400 Bad Request
Date: Sun, 07 Feb 2021 21:32:00 GMT
Content-Length: 24
Content-Type: text/plain; charset=utf-8

{"error": "bad request"}
🐵🙈🙉

Kita dapat melihat URL, header, dan body dari request dan response. Ini sangat berguna untuk debugging dan analisa. Selain itu kita juga dapat me-replay request yang sudah disimpan ke suatu URL server.

Replay traffic menggunakan gor

Kita bisa menggunakan command ini untuk mereplay traffic yang sudah disimpan di sebuah file.

sudo gor --input-file sampletraffic_0.gor --output-http "http://localhost:5005"
--input-file menentukan input file.
--output-http URL tujuan dari request yang akan direplay.

Setelah semua request di file tersebut sudah di replay, kita akan mendapatkan message ini.

2021/02/07 21:49:00 [PPID 10 and PID 36] Version:1.2.0
[DEBUG][elapsed 13.5535466s]: [INPUT-FILE] FileInput: end of file 'sampletraffic_0.gor'

Kesimpulan

GoReplay atau gor merupakan tool yang berguna untuk men-capture dan me-replay request. Tool ini sudah banyak membantu saya. Penggunaan gor yang dibahas pada artikel ini adalah penggunaan dasar. Ada lebih banyak yang bisa dilakukan dengan gor. Kita akan membahasnya lain waktu.


See also