计算IP首部检验和:
如上图,计算????是多少?
计算:
从08 00之后开始计算到后面的08 00即(两个字节的相加)
45 00+00 20+D5 56+00 00+80 01+DE B7+45 5D+C0 A8+00 DC
等于 3800F
然后溢出的再次加到后面即
800F+3
等于 8012
最后用FFFF-8012
得出校验和 7F ED
如上图计算得检验和为 59 B2
ping命令用的是ICMP的0和8类型字段:
分别为
0 响应应答(ECHO-REPLY)
8 响应请求(ECHO-REQUEST)
校验和计算函数:
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
// 把缓冲区中的数据相加
while(size >1) {
cksum+=*buffer++ ;
size -=sizeof(USHORT);
}
if(size ) {
cksum += *(UCHAR*)buffer;
}
while(cksum >> 16)
cksum = (cksum >> 16) + (cksum & 0xffff);
return (USHORT)(~cksum) ;
}