{"id":33013397,"url":"https://github.com/isgasho/finshir","last_synced_at":"2025-12-14T23:40:03.947Z","repository":{"id":192594926,"uuid":"185894065","full_name":"isgasho/finshir","owner":"isgasho","description":":dizzy: A coroutines-driven Low \u0026 Slow traffic sender, written in Rust","archived":false,"fork":false,"pushed_at":"2019-05-08T16:03:42.000Z","size":716,"stargazers_count":32,"open_issues_count":0,"forks_count":18,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-15T23:03:25.511Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://crates.io/crates/finshir","language":"Rust","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/isgasho.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-05-10T01:03:58.000Z","updated_at":"2025-02-16T22:01:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"956fa278-a638-4846-a0a9-650d113d12e9","html_url":"https://github.com/isgasho/finshir","commit_stats":null,"previous_names":["isgasho/finshir"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/isgasho/finshir","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isgasho%2Ffinshir","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isgasho%2Ffinshir/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isgasho%2Ffinshir/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isgasho%2Ffinshir/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/isgasho","download_url":"https://codeload.github.com/isgasho/finshir/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isgasho%2Ffinshir/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27739362,"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","status":"online","status_checked_at":"2025-12-14T02:00:11.348Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2025-11-13T17:00:33.177Z","updated_at":"2025-12-14T23:40:03.908Z","avatar_url":"https://github.com/isgasho.png","language":"Rust","funding_links":[],"categories":["Network"],"sub_categories":["Scanning / Pentesting","DDoS Tools"],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003efinshir\u003c/h1\u003e\n  \n  \u003ca href=\"https://gitter.im/Gymmasssorla/finshir\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/chat-on%20gitter-pink.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://travis-ci.com/Gymmasssorla/finshir\"\u003e\n    \u003cimg src=\"https://travis-ci.com/Gymmasssorla/finshir.svg?branch=master\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/Gymmasssorla/finshir/blob/master/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-GPLv3-blue.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://crates.io/crates/finshir\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/crates.io-v0.1.0-orange.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://semver.org\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/semver-follows-green.svg\"\u003e\n  \u003c/a\u003e\n  \n  \u003cimg src=\"ICON.png\" width=\"520px\"\u003e\u003cbr\u003e\n  \n  You are seeing a high-performant, coroutines-driven, and fully customisable implementation of [Low \u0026 Slow](https://www.cloudflare.com/learning/ddos/ddos-low-and-slow-attack/) load generator designed for real-world pentesting. Its complete undetectability is achieved by connecting through [Tor](https://en.wikipedia.org/wiki/Tor_%28anonymity_network%29).\n  \n  \u003ch4\u003e\n    \u003ca href=\"https://github.com/Gymmasssorla/finshir/pulse\"\u003ePulse\u003c/a\u003e \u0026middot;\n    \u003ca href=\"https://github.com/Gymmasssorla/finshir/stargazers\"\u003eStargazers\u003c/a\u003e \u0026middot;\n    \u003ca href=\"https://github.com/Gymmasssorla/finshir/releases\"\u003eReleases\u003c/a\u003e \u0026middot;\n    \u003ca href=\"https://github.com/Gymmasssorla/finshir/blob/master/CONTRIBUTING.md\"\u003eContributing\u003c/a\u003e\n  \u003c/h4\u003e\n\u003c/div\u003e\n\n----------\n\n## Contents\n - [Features](https://github.com/Gymmasssorla/finshir#features)\n - [Installation](https://github.com/Gymmasssorla/finshir#installation)\n   - [Building from crates.io](https://github.com/Gymmasssorla/finshir#building-from-cratesio)\n   - [Building from sources](https://github.com/Gymmasssorla/finshir#building-from-sources)\n   - [Pre-compiled binaries](https://github.com/Gymmasssorla/finshir#pre-compiled-binaries)\n - [Options](https://github.com/Gymmasssorla/finshir#options)\n - [Overview](https://github.com/Gymmasssorla/finshir#overview)\n   - [Minimal command](https://github.com/Gymmasssorla/finshir#minimal-command)\n   - [Using the Tor network](https://github.com/Gymmasssorla/finshir#using-the-tor-network)\n   - [Test intensity](https://github.com/Gymmasssorla/finshir#test-intensity)\n   - [Connections count](https://github.com/Gymmasssorla/finshir#connections-count)\n   - [Custom data portions](https://github.com/Gymmasssorla/finshir#custom-data-portions)\n   - [Logging options](https://github.com/Gymmasssorla/finshir#logging-options)\n - [Gallery](https://github.com/Gymmasssorla/finshir#gallery)\n   - [Initialisation](https://github.com/Gymmasssorla/finshir#initialisation)\n   - [Errors](https://github.com/Gymmasssorla/finshir#errors)\n   - [Being verbose](https://github.com/Gymmasssorla/finshir#being-verbose)\n - [Contributing](https://github.com/Gymmasssorla/finshir#contributing)\n - [Target platform](https://github.com/Gymmasssorla/finshir#target-platform)\n - [Legal disclaimer](https://github.com/Gymmasssorla/finshir#legal-disclaimer)\n - [Project links](https://github.com/Gymmasssorla/finshir#project-links)\n - [Contacts](https://github.com/Gymmasssorla/finshir#contacts)\n\n----------\n\n## Features\n - **Coroutines-driven.** Finshir uses [coroutines](https://en.wikipedia.org/wiki/Coroutine) (also called lightweight threads) instead of ordinary threads, which lets you open many more connections with fewer system resources.\n\n - **Generic.** Unlike other Low \u0026 Slow utilities, Finshir lets you transmit arbitrary data sets over the [TCP](https://en.m.wikipedia.org/wiki/Transmission_Control_Protocol) protocol. It may be partial HTTP headers, empty spaces, and so on.\n \n - **Written in Rust.** How you can see, all the logic is written completely in [Rust](https://www.rust-lang.org/), which means that it leverages bare-metal performance and high-level safety (no SIGSEGV, SIGILL, and other \"funny\" stuff).\n\n----------\n\n## Installation\nCurrently, this project requires unstable standard library features, so this is why you must switch to the nightly channel to avoid compilation errors:\n\n```\n$ rustup override set nightly-2019-04-25\n```\n\n### Building from crates.io\n```bash\n$ cargo install finshir\n```\n\n### Building from sources\n```bash\n$ git clone https://github.com/Gymmasssorla/finshir.git\n$ cd finshir\n$ cargo build --release\n```\n\n### Pre-compiled binaries\nThe easiest way to run Finshir on your system is to download the pre-compiled binaries from the [existing releases](https://github.com/Gymmasssorla/finshir/releases), which doesn't require any external software (unlike the two previous approaches).\n\n----------\n\n## Options\n```\nfinshir 0.1.0\nTemirkhan Myrzamadi \u003cgymmasssorla@gmail.com\u003e\nA coroutines-driven Low \u0026 Slow traffic sender, written in Rust\n\nUSAGE:\n    finshir [FLAGS] [OPTIONS] --receiver \u003cSOCKET-ADDRESS\u003e\n\nFLAGS:\n    -h, --help       Prints help information\n        --use-tor    Torify all sockets by connecting to a SOCKS5 proxy running\n                     on 127.0.0.1:9050\n    -V, --version    Prints version information\n\nOPTIONS:\n        --connect-timeout \u003cTIME-SPAN\u003e\n            If a timeout is reached and a socket wasn't connected, the program\n            will retry the operation later.\n            \n            Note that this option currently doesn't work on sockets which are\n            trying to connect through Tor. [default: 30secs]\n    -c, --connections \u003cPOSITIVE-INTEGER\u003e\n            A number of connections the program will handle simultaneously. This\n            option also equals to a number of coroutines [default: 1000]\n        --date-time-format \u003cSTRING\u003e\n            A format for displaying local date and time in log messages. Type\n            `man strftime` to see the format specification [default: %X]\n        --failed-count \u003cPOSITIVE-INTEGER\u003e\n            A number of failed data transmissions used to reconnect a socket to\n            a remote web server [default: 5]\n        --ip-ttl \u003cUNSIGNED-INTEGER\u003e\n            Specifies the IP_TTL value for all future sockets. Usually this\n            value equals a number of routers that a packet can go through\n    -f, --portions-file \u003cLOCATION\u003e\n            A file consisting of a custom JSON array of data portions, specified\n            as strings\n    -r, --receiver \u003cSOCKET-ADDRESS\u003e\n            A receiver of generator traffic, specified as an IP address and a\n            port number, separated by a colon\n    -d, --test-duration \u003cTIME-SPAN\u003e\n            A whole test duration, after which all spawned coroutines will stop\n            their work [default: 64years 64hours 64secs]\n    -v, --verbosity \u003cLEVEL\u003e\n            Enable one of the possible verbosity levels. The zero level doesn't\n            print anything, and the last level prints everything [default: 3]\n            [possible values: 0, 1, 2, 3, 4, 5]\n    -w, --wait \u003cTIME-SPAN\u003e\n            A waiting time span before test execution used to prevent a launch\n            of an erroneous (unwanted) test [default: 5secs]\n        --write-periodicity \u003cTIME-SPAN\u003e\n            A time interval between writing data portions. This option can be\n            used to modify test intensity [default: 30secs]\n        --write-timeout \u003cTIME-SPAN\u003e\n            If a timeout is reached and a data portion wasn't sent, the program\n            will retry the operation later [default: 30secs]\n\nBy default, Finshir generates 100 empty spaces as data portions. If you want to\noverride this behaviour, consider using the `--portions-file` option.\n\nFor more information see \u003chttps://github.com/Gymmasssorla/finshir\u003e.\n```\n\n----------\n\n## Overview\n\n### Minimal command\nThe following command spawns 1000 coroutines, each trying to establish a new TCP connection. When connections are established, it sends empty spaces every 30 seconds, thereby order a server to wait as long as it can:\n\n```bash\n# Specify one of the Google's IP addresses as a target web server\n$ finshir --receiver=64.233.165.113:80\n```\n\n### Using the Tor network\nYou can do this by specifying the `--use-tor` flag. It connects to your local SOCKS5 proxy running on 9050 port, which is typically used by Tor proxies. Also consider modifying the default configuration file located in `/etc/tor/torrc`.\n\n```bash\n# Connect to the Google's address through your local Tor proxy\n$ finshir --receiver=64.233.165.113:80 --use-tor\n```\n\n### Test intensity\nLow \u0026 Slow techniques assume to be VERY SLOW, which means that you typically send a couple of bytes every N seconds. For instance, Finshir uses the 30 seconds interval by default, but it's modifiable as well:\n\n```bash\n# Test the Google's server sending data portions every one minute\n$ finshir --receiver=64.233.165.113:80 --write-periodicity=1min\n```\n\n### Connections count\nThe default number of parallel connections is 1000. However, you can modify this limit using the `--connections` option, but be sure that you system is able to handle such amount of file descriptors:\n\n```bash\n# Modify the default limit of file descriptors to 17015\n$ sudo ulimit -n 17015\n\n# Test the target server using 17000 parallel TCP connections\n$ finshir --receiver=64.233.165.113:80 --connections=17000\n```\n\n### Custom data portions\nBy default, Finshir generates 100 empty spaces as data portions to send. You can override this behaviour by specifying your custom messages as a file, consisting of a single JSON array. This example is focused on Google:\n\n```bash\n# Send partial HTTP headers to Google using `--portions-file`\n$ finshir --receiver=64.233.165.113:80 --portions-file files/google.json\n```\n\n### Logging options\nConsider specifying a custom verbosity level from 0 to 5 (inclusively), which is done by the `--verbosity` option. There is also the `--date-time-format` option which tells Finshir to use your custom date-time format.\n\n```bash\n# Use a custom date-time format and the last verbosity level\n$ finshir --receiver=64.233.165.113:80 --date-time-format=\"%F\" --verbosity=5\n```\n\n----------\n\n## Gallery\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3\u003eInitialisation\u003c/h3\u003e\n  \u003cimg src=\"gallery/INITIALISATION.png\"\u003e\n  \n  \u003ch3\u003eErrors\u003c/h3\u003e\n  \u003cimg src=\"gallery/ERRORS.png\"\u003e\n  \n  \u003ch3\u003eBeing verbose\u003c/h3\u003e\n  \u003cimg src=\"gallery/VERBOSE.png\"\u003e\n\u003c/div\u003e\n\n----------\n\n## Contributing\nYou are always welcome for any contribution to this project! But before you start, you should read [the appropriate document](https://github.com/Gymmasssorla/finshir/blob/master/CONTRIBUTING.md) to know about the preferred development process and the basic communication rules.\n\n----------\n\n## Target platform\nLike most of pentesting utilities, this project is developed, tested, and maintained for only Linux-based systems. If you are a Windows user, you probably need a [virtual machine](https://en.wikipedia.org/wiki/Virtual_machine) or another computer with GNU/Linux.\n\n----------\n\n## Legal disclaimer\nFinshir was developed as a means of testing stress resistance of web servers, and not for hacking, that is, the author of the project **IS NOT RESPONSIBLE** for any damage caused by your use of his program.\n\n----------\n\n## Project links\n - https://www.reddit.com/r/rust/comments/bm6ttn/finshir_a_coroutinesdriven_low_slow_ddos_attack/\n - https://www.producthunt.com/posts/finshir\n\n----------\n\n## Contacts\n[Temirkhan Myrzamadi](https://github.com/Gymmasssorla) \u003c[gymmasssorla@gmail.com](mailto:gymmasssorla@gmail.com)\u003e (the author)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisgasho%2Ffinshir","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisgasho%2Ffinshir","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisgasho%2Ffinshir/lists"}