{"id":13466516,"url":"https://github.com/erkexzcx/stoppropaganda","last_synced_at":"2025-10-09T05:31:25.617Z","repository":{"id":40691213,"uuid":"463820029","full_name":"erkexzcx/stoppropaganda","owner":"erkexzcx","description":"A special DOS application to stop pro-Russian aggression websites. Support Ukraine!","archived":true,"fork":false,"pushed_at":"2022-05-24T09:27:52.000Z","size":2675,"stargazers_count":447,"open_issues_count":6,"forks_count":70,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-01-27T03:34:02.414Z","etag":null,"topics":["ddos","denial-of-service","dos-attack","ukraine"],"latest_commit_sha":null,"homepage":"https://en.wikipedia.org/wiki/Putin_khuylo!","language":"Go","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/erkexzcx.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":"2022-02-26T10:21:16.000Z","updated_at":"2025-01-01T03:30:49.000Z","dependencies_parsed_at":"2022-09-07T10:51:49.152Z","dependency_job_id":null,"html_url":"https://github.com/erkexzcx/stoppropaganda","commit_stats":null,"previous_names":[],"tags_count":58,"template":false,"template_full_name":null,"purl":"pkg:github/erkexzcx/stoppropaganda","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erkexzcx%2Fstoppropaganda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erkexzcx%2Fstoppropaganda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erkexzcx%2Fstoppropaganda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erkexzcx%2Fstoppropaganda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/erkexzcx","download_url":"https://codeload.github.com/erkexzcx/stoppropaganda/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erkexzcx%2Fstoppropaganda/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000745,"owners_count":26082932,"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-10-09T02:00:07.460Z","response_time":59,"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":["ddos","denial-of-service","dos-attack","ukraine"],"created_at":"2024-07-31T15:00:45.442Z","updated_at":"2025-10-09T05:31:24.814Z","avatar_url":"https://github.com/erkexzcx.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# StopPropaganda\n\n[![Github All Releases](https://img.shields.io/github/downloads/erkexzcx/stoppropaganda/total.svg)](https://github.com/erkexzcx/stoppropaganda/releases)\n[![Docker Hub Pulls](https://img.shields.io/docker/pulls/erikmnkl/stoppropaganda)](https://hub.docker.com/r/erikmnkl/stoppropaganda)\n[![Go Report Card](https://goreportcard.com/badge/github.com/erkexzcx/stoppropaganda)](https://goreportcard.com/report/github.com/erkexzcx/stoppropaganda)\n\nRussia has invaded Ukraine and committed various war crimes. Russian media denies any of its attacks on civilian as well as any Russian troops casualties. According to them, they are doing this \"special operation\" to protect Ukrainians from...Ukraine. On top of that, some foreign media and even countries (e.g. Belarus) publicly support Russian aggression, therefore I created this simple DOS application that targets those websites/endpoints in order to take them down or significantly disrupt their services.\n\nMykhailo Federov (Vice Prime Minister and Minister of Digital Transformation of Ukraine) has shared [this twitter post](https://twitter.com/FedorovMykhailo/status/1497642156076511233) encouraging cyber attack on certain targets via Telegram group. This will be primary source of the target websites for this application.\n\n*Русский военный корабль, иди нахуй!*\n\n**DISCLAIMER**: (D)DOS'ing is **illegal**! Usage of this tool is intended for educational purposes only.\n\n- [Usage](#usage)\n  * [Docker](#docker)\n  * [docker-compose](#docker-compose)\n  * [Kubernetes](#kubernetes)\n  * [Android](#android)\n  * [Binaries](#binaries)\n- [Configuration](#configuration)\n  * [algorithm](#algorithm)\n  * [anticache](#anticache)\n  * [bind](#bind)\n  * [dialconcurrency](#dialconcurrency)\n  * [dialspersecond](#dialspersecond)\n  * [dnstimeout](#dnstimeout)\n  * [dnsworkers](#dnsworkers)\n  * [maxprocs](#maxprocs)\n  * [proxy](#proxy)\n  * [proxybypass](#proxybypass)\n  * [timeout](#timeout)\n  * [useragent](#useragent)\n  * [workers](#workers)\n- [Web UI](#web-ui)\n- [Building from source](#building-from-source)\n- [Troubleshooting](#troubleshooting)\n  * [Too many open files](#too-many-open-files)\n  * [Crashing](#crashing)\n  * [Detected as virus](#detected-as-virus)\n- [Recommendations](#recommendations)\n- [Inspiration](#inspiration)\n\n\u003csmall\u003e\u003ci\u003e\u003ca href='http://ecotrust-canada.github.io/markdown-toc/'\u003eTable of contents generated with markdown-toc\u003c/a\u003e\u003c/i\u003e\u003c/small\u003e\n\n# Usage\n\n## Docker\n\nUsage:\n```bash\ndocker pull erikmnkl/stoppropaganda # Download latest docker image\ndocker rm -f stoppropaganda         # Remove existing container (if any)\n\n# Run container\ndocker run --name stoppropaganda -d --ulimit nofile=128000:128000 -p \"8049:8049/tcp\" erikmnkl/stoppropaganda\n```\n\nAlso see [Configuration](#configuration) and [Web UI](#web-ui). For `docker run`, pass environment variables using `-e` argument, for example `-e SP_WORKERS=50 -e SP_DNSWORKERS=500`.\n\n## docker-compose\n\n[docker-compose.yaml](https://github.com/erkexzcx/stoppropaganda/raw/main/docker-compose.yaml) and other docker-compose YAML examples are available.\n\nUsage:\n```bash\ndocker-compose pull  # Pull latest image\ndocker-compose up -d # Create/recreate container\n```\n\nSee [Docker](#docker) for additional information. Also see [Configuration](#configuration) and [Web UI](#web-ui).\n\n## Kubernetes\n\nSee [stoppropaganda.yaml](https://github.com/erkexzcx/stoppropaganda/raw/main/stoppropaganda.yaml).\n\nYou can also use `kubectl`:\n```bash\nkubectl create ns stoppropaganda\nkubectl apply -f stoppropaganda.yaml\n```\n**NOTE**: edit `stoppropaganda.yaml` with required number of replicas.\n\nSee [Docker](#docker) for additional information. Also see [Configuration](#configuration) and [Web UI](#web-ui).\n\n## Android\n\nIn order to use on Android:\n- Install [Termux from Google Play](https://play.google.com/store/apps/details?id=com.termux).\n- Install [Automate from Google Play](https://play.google.com/store/apps/details?id=com.llamalab.automate).\n- Download [StopPropaganda_launcher.flo](https://github.com/erkexzcx/stoppropaganda/raw/main/StopPropaganda_launcher.flo) and import (simply opening it with Automate will import it).\n- Launch imported Flow into Automate app and it will guide you step by step.\n\n**NOTE**: On startup it will pull the latest version automatically, so in order to update - stop the app in Termux and re-run this Flow.\n\nMore advanced users might want to edit Automate flow themselves to further customize configuration. See [Configuration](#configuration) and [Usage](#usage).\n\n## Binaries\n\nDownload binary from [releases](https://github.com/erkexzcx/stoppropaganda/releases/).\n\nAdditional steps needed for Linux prior usage:\n```bash\n# Make downloaded binary executable\nchmod +x stoppropaganda_v0.0.1_linux_x86_64\n\n# Increase open files limit for current terminal session to a maximum allowed by a kernel\nulimit -n unlimited\n```\n\nUsage:\n```bash\n# Execute binary\n./stoppropaganda_v0.0.1_linux_x86_64 --help\n\n# Example\n./stoppropaganda_v0.0.1_linux_x86_64 --workers 10000 --dnsworkers 50000\n```\n\nLinux users might want to autostart this on boot, see [stoppropaganda.service](https://github.com/erkexzcx/stoppropaganda/raw/main/stoppropaganda.service). Upload that file to `/etc/systemd/system/stoppropaganda.service` with updated `ExecStart` value and then usage;\n```bash\n# Reload SystemD daaemon (after editing service file)\nsystemctl daemon-reload\n\n# Then usage\nsystemctl enable stoppropaganda.service\nsystemctl disable stoppropaganda.service\nsystemctl start stoppropaganda.service\nsystemctl stop stoppropaganda.service\nsystemctl status stoppropaganda.service\nsystemctl kill stoppropaganda.service\njournalctl -f -u stoppropaganda.service\n```\n\n# Configuration\n\nConfiguration can only be done in 2 ways:\n* Command line arguments\n* Environment variables\n\n## algorithm\n\nConfiguration via command line argument `-algorithm fair` or via environment variable `SP_ALGORITHM=\"fair\"`.\n\nThe algorithm defines in what manner you want websites to be DOS'ed. It directly impacts resource usage and performance of this application.\n\nAvailable algorithms:\n- `fair` (Default)\n  - Known as \"workers per website\" (specified amount of workers will be divided equally for each website).\n  - Specifying less workers than websites will result in some websites without workers.\n  - Uses less CPU and RAM.\n  - By nature it wastes more traffic and generally has bigger impact.\n- `rr`\n  - Similar to slow loris, but more random.\n  - Known as \"pool of workers\" (each worker will take the next pending website from the queue).\n  - Can be used with as low as 1 worker.\n  - Uses more CPU and RAM.\n  - By nature it prioritizes slower websites.\n\n## anticache\n\nConfiguration via command line argument `-anticache true` or via environment variable `SP_ANTICACHE=true`.\n\nDefault value of `true` means that randomly generated query and cookie will be sent with each request.\n\n## bind\n\nConfiguration via command line argument `-bind \":8049\"` or via environment variable `SP_BIND=\":8049\"`.\n\nDefault value of `:8049` is the same as `0.0.0.0:8049` which means web interface is accessible externally on port `8049`. If you want to limit web interface to be accessible only from the same host, use `127.0.0.1:8049`.\n\n## dialconcurrency\n\nConfiguration via command line argument `-dialconcurrency 10000` or via environment variable `SP_DIALCONCURRENCY=10000`.\n\nDefault value of `10000` means that there will be maximum of 10000 concurrent dials from fasthttp.\n\n## dialspersecond\n\nConfiguration via command line argument `-dialspersecond 2500` or via environment variable `SP_DIALSPERSECOND=2500`.\n\nDefault value of `2500` means that there will be maximum of 2500 TCP SYN packets sent per second from fasthttp.\n\n## dnstimeout\n\nConfiguration via command line argument `-dnstimeout 1s` or via environment variable `SP_DNSTIMEOUT=1s`.\n\nDefault value of `1s` means that worker will wait for a DNS server response for `1s` until it gives up.\n\n## dnsworkers\n\nConfiguration via command line argument `-dnsworkers 100` or via environment variable `SP_DNSWORKERS=100`.\n\nDefault value of `100` means that there will be a pool of 100 workers that will DOS all the defined DNS servers.\n\n## maxprocs\n\nConfiguration via command line argument `-maxprocs 1` or via environment variable `SP_MAXPROCS=1`.\n\nDefines amount of system threads (`runtime.GOMAXPROCS`) used by the program.\n\nDefault value of 1 provides some optimization, because Golang doesn't have to use mutexes, atomics \nand inter-process synchronization mechanisms.\n\n## proxy\n\nConfiguration via command line argument `-proxy \"\"` or via environment variable `SP_PROXY=\"\"`.\n\nProxy supports SOCKS4, SOCKS5 and HTTP proxies (or comma separated proxy chains). For example `-proxy \"socks5://tor:9050\"`.\n\nUsage of this parameter can be combined with `proxybypass` parameter.\n\n## proxybypass\n\nConfiguration via command line argument `-proxybypass \"\"` or via environment variable `SP_PROXYBYPASS=\"\"`.\n\nFor example `-proxybypass \"localhost\"`.\n\nThis parameter is only applicable when used with [proxy](#proxy) parameter.\n\n## timeout\n\nConfiguration via command line argument `-timeout 10s` or via environment variable `SP_TIMEOUT=10s`.\n\nDefault value of `10s` means that worker will wait for a website response for `10s` until it gives up.\n\n## useragent\n\nConfiguration via command line argument `-useragent \"...\"` or via environment variable `SP_USERAGENT=\"...\"`.\n\nDefault value is `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4896.127 Safari/537.36`. User agent is sent with HTTP requests to defined websites.\n\n## workers\n\nConfiguration via command line argument `-workers 1000` or via environment variable `SP_WORKERS=1000`.\n\nDefault value of `1000` means that there will be a pool of 1000 workers that will DOS all the defined websites.\n\n# Web UI\n\nAs of now there is no fancy web interface, only a JSON pre-formatted output.\n\nThe following endpoints are available:\n```\nhttp://127.0.0.1:8049/status\nhttp://127.0.0.1:8049/dnscache\nhttp://127.0.0.1:8049/downloaded\n```\n\nExample usage on Linux:\n```bash\n# Simple:\ncurl http://127.0.0.1:8049/status\n\n# Using JQ to format output\ncurl http://127.0.0.1:8049/status | jq .\n```\n\nAlso see [bind](#bind) for host and port configuration.\n\n# Building from source\n\nUninstall any existing Golang installations if you installed from official Linux repos. They are usually outdated and might not work at all.\n\nDownload and install Golang using [these instructions](https://go.dev/doc/install). Validate if Golang binary works:\n```bash\n$ go version\ngo version go1.17.7 linux/amd64\n```\n\nDownload this repo:\n```bash\ngit clone https://github.com/erkexzcx/stoppropaganda.git\ncd stoppropaganda\n```\n\nNow you have 2 options to run this application:\n```bash\n# Increase open files limit for current terminal session to a maximum allowed by a kernel\nulimit -n unlimited\n\n# Run without compiling to binary\ngo run cmd/stoppropaganda/main.go --help\n\n# Build binary and run it\ngo build -o stoppropaganda cmd/stoppropaganda/main.go\n./stoppropaganda --help\n```\n\nYou can also build for other architectures/platforms as well, see `build.sh` file.\n\n# Troubleshooting\n\n## Too many open files\n\nMost Linux distributions have limits on how many files (connections) can be opened to prevents things like [fork bomb](https://en.wikipedia.org/wiki/Fork_bomb).\n\nMore information on how to increase them [here](https://stackoverflow.com/questions/880557/socket-accept-too-many-open-files).\n\n## Crashing\n\nReason 1: Make sure you have enough RAM. It is also wise to monitor RAM and CPU usage once application is started. Since March 3, with the latest release it was switched from workers per website/dns to pool of workers. Once you find a sweet spot resource-wise, there should be no need to change it with updates.\n\nReason 2: Work in progress. Always check if (a) Russians are still invading Ukraine and (b) there is a new release available.\n\n## Detected as virus\n\nSome anti-virus applications detect this application as virus. This application is not a virus and it has no malicious code in it. In fact, this application is open source and by the nature - everyone is free to inspect the code, improve it and build their own binaries by themselves (if you don't trust my binaries).\n\nThere are several reasons why this application might be tagged as virus:\n* Putin wants this application to be treated as virus. [Haters do exist](https://github.com/erkexzcx/stoppropaganda/issues?q=label%3AAsshole). **EDIT**: I've disabled `Issues` tab since [some russian users](https://github.com/cpueasy) decided to scare me by spamming issues, spamming emails using haveibeenpwned websites via \"forgot password\" mechanism and d0xxing.\n* This application has hardcoded Yandex DNS servers (helps with some russian websites \"geoblocking\") that ignores your network settings.\n* At the moment this application has ~400 hardcoded targets, which is not common in regular applications.\n* Malware that is used to DDOS targets is usually working in pretty much the same manner as this application, so this application might be treated as such.\n\n# Recommendations\n\n* Increase `workers`/`dnsworkers` count for a greater effect. For example, `-workers 1000000` worked great with 1GBPS internet.\n* Adjust `dnstimeout` based on your location. Change to something like `200ms` and see how it behaves. If \"success\" queries are low and thus \"timeout errors\" increase - increase timeout.\n* Change `useragent` to yours (used for websites only). See [this](https://www.whatismybrowser.com/detect/what-is-my-user-agent/).\n* General recommendation is to use VPN, but this is not necessary. Remember - DOS/DDOS is **illegal**.\n\n# Inspiration\n\nThis application was inspired by the following projects:\n* https://www.reddit.com/r/hacking/comments/t1a8is/simple_html_dos_script_for_russian_sites/\n* https://norussian.xyz/\n* https://stop-russian-desinformation.near.page/\n* https://russianwarshipgofuckyourself.club/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferkexzcx%2Fstoppropaganda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferkexzcx%2Fstoppropaganda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferkexzcx%2Fstoppropaganda/lists"}