=0,Len=52) [15:26:33] RECV:ICMP Packet from 202.108.37.36 (Type=0,Code=0,Len=52) [15:26:33] RECV:ICMP Packet from 202.108.36.206 (Type=0,Code=0,Len=52) [15:26:33] RECV:ICMP Packet from 210.192.103.30 (Type=0,Code=0,Len=52) [15:26:33] RECV:ICMP Packet from 202.108.37.36 (Type=0,Code=0,Len=52) [15:26:33] RECV:ICMP Packet from 202.108.36.206 (Type=0,Code=0,Len=52) [15:26:33] RECV:ICMP Packet from 210.192.103.30 (Type=0,Code=0,Len=52) =================================================================
可以看出,攻击者使用的是32bytes的ECHO请求,所以服务器返回52-20=32bytes的REPLY报文,在这个情况下,天网是不会报警的。
还是那句话,报警也没用了。
八、自己编写ICMP Flooder
以上说的都是理论,如何才能自己写一个呢?相信很多人已经跃跃欲试了,下面就用VC6.0来写一个直接的ICMP Flooder(能在Win98/Me环境使用)……先等等——最重要的是原理。
1.程序原理
当然不能用IcmpSendEcho来做,我们必须自己从最原始的IP报文里做一个。构造一个SOCK_RAW报文后,填充ICMP数据和计算校验和(CheckSum),循环sendto发出去就完成了,so easy!
2.ICMP报文的声明
一个ICMP报文包括IP头部、ICMP头部和ICMP报文,用IPPROTO_ICMP创建这个类型的IP包,用以下结构填充:
typedef struct _ihdr { BYTE i_type; //8位类型 BYTE i_code; //8位代码 USHORT i_cksum; //16位校验和 USHORT i_id; //识别号 USHORT i_seq; //报文序列号 ULONG timestamp; //时间戳 }ICMP_HEADER;
这样我们就声明了一个ICMP报文结构,就等后面的填充了。
3.校验和
计算方法:先设置头校验和域的数值为0,然后对整个数据报头按每16位求异或,再把结果取反,就得到了校验和。
函数:
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); }
4.必须注意的问题
由于Win98/Me系统不支持IP-Spoof,所以无法用setsockopt设置IP_HDRINCL让用户自己填充IP头部,所以Win98/Me不能实现IP伪造!如 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页 |