关于icmp报文中的校验和的计算...
以下是一个icmp报文,
类型0x00
代码0x00
校验和 0x5ca7
标识符 0x965c
序列号 0x0200
data: 24 59 20 4B D3 52 0A 00 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37
以上报文中的校验和是怎么算出来的呢?我算了好几遍也没算对.请高手指点一下!先谢谢了!
[解决办法]
我也根据RFC文档做了个计算校验和的函数,在windows下测试通过
unsigned short GetCheckSum(unsigned char * p, int pl){ unsigned short re; unsigned short tp; unsigned int sum,sump; unsigned char ttth,tttl; sum=0; for(int ipl=0;ipl<pl;ipl++) { if(ipl==pl-1) { ttth=p[ipl]; tttl=0x00; } else { ttth=p[ipl]; ipl++; tttl=p[ipl]; } tp= (ttth<<8)+ tttl; sum=sum+tp; } sump=(sum & 0xFFFF) + ((sum>>16) &0xFFFF); re=0xFFFF-((sump & 0xFFFF) + ((sump>>16) &0xFFFF)); return re;}