Пишем миниатюрный 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