{"id":13582026,"url":"https://github.com/utkusen/reqstress","last_synced_at":"2025-05-07T21:26:18.524Z","repository":{"id":43640947,"uuid":"374409809","full_name":"utkusen/reqstress","owner":"utkusen","description":"a benchmarking\u0026stressing tool that can send raw HTTP requests","archived":false,"fork":false,"pushed_at":"2022-09-24T22:46:30.000Z","size":32,"stargazers_count":166,"open_issues_count":0,"forks_count":14,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-11-05T21:45:37.957Z","etag":null,"topics":["benchmarking","ddos","dos-attack","stresser"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/utkusen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-06-06T16:29:23.000Z","updated_at":"2024-09-02T07:20:28.000Z","dependencies_parsed_at":"2022-09-13T11:01:30.912Z","dependency_job_id":null,"html_url":"https://github.com/utkusen/reqstress","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utkusen%2Freqstress","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utkusen%2Freqstress/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utkusen%2Freqstress/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utkusen%2Freqstress/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/utkusen","download_url":"https://codeload.github.com/utkusen/reqstress/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227324042,"owners_count":17764604,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmarking","ddos","dos-attack","stresser"],"created_at":"2024-08-01T15:02:23.579Z","updated_at":"2024-11-30T11:07:07.090Z","avatar_url":"https://github.com/utkusen.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# reqstress\r\n\r\nreqstress is a benchmarking\u0026stressing tool that can send raw HTTP requests. It's written in Go and uses [fasthttp](https://github.com/valyala/fasthttp) library instead of Go's default http library, because of its lightning-fast performance.\r\n\r\n## Why Do We Need Another Benchmarking Tool?\r\n\r\nThere are really great benchmarking tools out there such as [wrk](https://github.com/wg/wrk), [bombardier](https://github.com/codesenberg/bombardier), [hey](https://github.com/rakyll/hey), [ab](https://httpd.apache.org/docs/2.4/tr/programs/ab.html). Some of them don't support sending custom requests, they are only sending a GET request to a given URL. Some of them support custom requests but it's really hard to craft one by using command line parameters. I wanted to create a tool that can read a raw HTTP request from a text file and replays it. \r\n\r\nSo, you can copy your favorite request from Burp Suite, Fiddler etc. and pass it to the reqstresser directly. It would be useful for stressing authenticated endpoints and specific requests that create a huge load.\r\n\r\n## reqstress vs. Other Tools\r\n\r\nreqstresser is not the fastest benchmarking tool, but it's not bad either. I tested couple of popular tools on a $20 Linode server with same amount of threads. Here is the result:\r\n\r\n\r\n| Tool         | Num. of Sent Requests | Duration |\r\n|--------------|-----------------------|----------|\r\n| wrk          | ~45000                 | 10s      |\r\n| bombardier   | ~41000                 | 10s      |\r\n| ab           | ~40000                 | 10s      |\r\n| reqstress    | ~39304                 | 10s      |\r\n| hey          | ~35127                 | 10s      |\r\n| goldeneye.py | ~10913                 | 10s      |\r\n\r\n\r\n# Installation\r\n\r\n## From Binary\r\n\r\nYou can download the pre-built binaries from the [releases](https://github.com/utkusen/reqstress/releases) page and run. For example:\r\n\r\n`wget https://github.com/utkusen/reqstress/releases/download/v0.1.4/reqstress_0.1.4_Linux_amd64.tar.gz`\r\n\r\n`tar xzvf reqstress_0.1.4_Linux_amd64.tar.gz`\r\n\r\n`./reqstress --help`\r\n\r\n## From Source\r\n\r\n1. Install Go on your system\r\n2. Run: `go install github.com/utkusen/reqstress@latest`\r\n\r\n# Usage\r\n\r\nreqstress requires 6 parameters to run: \r\n\r\n`-r` : Path of the request file. For example: `-r request.txt`. Request file should contain a raw HTTP request. For example:\r\n\r\n```http\r\nPOST /wp-login.php HTTP/1.1\r\nHost: 1.1.1.1\r\nContent-Length: 107\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nOrigin: http://1.1.1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nReferer: http://1.1.1.1/wp-login.php?redirect_to=http%3A%2F%2F1.1.1.1%2Fwp-admin%2F\u0026reauth=1\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7\r\nCookie: wordpress_test_cookie=WP%20Cookie%20check\r\nConnection: close\r\n\r\nlog=admin\u0026pwd=asdadsasdads\r\n\r\n```\r\n\r\n`-w` : The number of workers to run (e.g `-w 750`). The default value is 500. You can increase or decrease this by testing out the capability of your system.\r\n\r\n`-d` : Duration of the test (in seconds) (e.g `-d 60`). Default is infinite.\r\n\r\n`-https` : Target protocol. Can be `true` or `false` (e.g `-https=false`). Default is `true`\r\n\r\n`-t` : Request timeout. (e.g `-t 1`). Default is 5(seconds) \r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Futkusen%2Freqstress","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Futkusen%2Freqstress","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Futkusen%2Freqstress/lists"}