读书人

关于icmp报文中的校验和的计算.该如何

发布时间: 2012-02-13 17:20:26 作者: rapoo

关于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下测试通过

C/C++ code
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;} 

读书人网 >网络协议

热点推荐