Пишем миниатюрный HTTP-flooder на Python 3
ims0rry![](https://i.imgur.com/qGOAq2Q.png)
Вступление
Для начала, хотелось бы отметить, как 80% типов, выучивших питон пишут HTTP-флуд:
![](https://image.prntscr.com/image/rgTFLekgTYCCvV9u41BG2g.png)
Так делать не стоит, потому что, сами видите (с одного потока):
![](https://image.prntscr.com/image/40G7ySqCR9GPd6bdmO3htA.png)
Этот метод сжирает очень много времени и не особо эффективен. Разве что, в плане удобства.
Мы же обратимся в сторону сокетов. На их основе можно написать флудер и под TCP, и под UDP протоколы, причем, весьма неплохой. Разумеется, все в этой статье рассматривать я не буду, найти код отправки данных по udp/tcp через сокеты в питоне можно одним запросом в гугл.
Шаг 1
Изменяем наш цикл (через скрин выше) на реализацию с сокетом:
![](https://image.prntscr.com/image/mSH81C-dRBevSWbev5ji1w.png)
И получаем очень неплохой результат (с одного потока):
![](https://image.prntscr.com/image/qtIyEyc2SrOruFp60Pxt5A.png)
Шаг 2
Набросав каркас самой атаки, можно перейти к юзабилити нашего скрипта. Параметры будем передавать через командную строку: ссылку, порт, потоки, длительность (в минутах).
![](https://image.prntscr.com/image/riAdKIwfQTipULqGStbuTw.png)
Разбиваем строку ссылки таким образом, чтоб в хост попал домен, а в url - путь до файла и/или параметры.
Шаг 3
Далее переносим функционал отправки запроса в цикле в отдельный класс-поток:
![](https://image.prntscr.com/image/l7Pla3MXTH6KOZQq12TR8A.png)
И меняем основной цикл на цикл запусков потоков:
![](https://image.prntscr.com/image/1XQTajUiQSylDUgFr-jO3A.png)
После запуска всех потоков спим указанное время (после окончания слипа программа завершится и все потоки вместе с ней).
Итог
Тестируем полученный результат на 10(!) потоках:
![](https://image.prntscr.com/image/UDYIwGyFSUupZNkTA-EKBg.png)
На 100 потоках результат должен получиться примерно такой же, как и на моей Курияме.
К слову, с более стабильным интернетом результат будет гораздо лучше. Также, на производительность влияет процессор.
Тесты проводились на i7-6500U 2.5GHz, 4 cores, интернет 12 mb/s
Ссылки
Исходник - https://github.com/ims0rry/HTTP-flooder-python
----------------------------------
Автор @ims0rry