Пишем миниатюрный HTTP-flooder на Python 3

Пишем миниатюрный HTTP-flooder на Python 3

ims0rry

Вступление

Для начала, хотелось бы отметить, как 80% типов, выучивших питон пишут HTTP-флуд:

Так делать не стоит, потому что, сами видите (с одного потока):

Этот метод сжирает очень много времени и не особо эффективен. Разве что, в плане удобства.

Мы же обратимся в сторону сокетов. На их основе можно написать флудер и под TCP, и под UDP протоколы, причем, весьма неплохой. Разумеется, все в этой статье рассматривать я не буду, найти код отправки данных по udp/tcp через сокеты в питоне можно одним запросом в гугл.

Шаг 1

Изменяем наш цикл (через скрин выше) на реализацию с сокетом:

И получаем очень неплохой результат (с одного потока):


Шаг 2

Набросав каркас самой атаки, можно перейти к юзабилити нашего скрипта. Параметры будем передавать через командную строку: ссылку, порт, потоки, длительность (в минутах).

Разбиваем строку ссылки таким образом, чтоб в хост попал домен, а в url - путь до файла и/или параметры.

Шаг 3

Далее переносим функционал отправки запроса в цикле в отдельный класс-поток:

И меняем основной цикл на цикл запусков потоков:

После запуска всех потоков спим указанное время (после окончания слипа программа завершится и все потоки вместе с ней).

Итог

Тестируем полученный результат на 10(!) потоках:

На 100 потоках результат должен получиться примерно такой же, как и на моей Курияме.

К слову, с более стабильным интернетом результат будет гораздо лучше. Также, на производительность влияет процессор.

Тесты проводились на i7-6500U 2.5GHz, 4 cores, интернет 12 mb/s

Ссылки

Исходник - https://github.com/ims0rry/HTTP-flooder-python

----------------------------------

Автор @ims0rry

https://t.me/ims0rryblog