码迷,mamicode.com
首页 > 其他好文 > 详细

IP首部校验和的计算     [网络协议分析的作业]

时间:2016-10-11 01:08:00      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:网络   协议   分析作业   

SHORT 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);

}

IP头:

  45 00    00 31

  89 F5    00 00

  6E 06    00 00(校验字段)

  DE B7   45 5D       ->    222.183.69.93

  C0 A8   00 DC     ->    192.168.0.220

  计算:  

  4500 + 0031 +89F5 + 0000 + 6e06+ 0000 + DEB7 + 455D + C0A8 + 00DC =3 22C4

  0003 + 22C4 = 22C7

  ~22C7 = DD38      ->即为应填充的校验和

  当接受到IP数据包时,要检查IP头是否正确,则对IP头进行检验,方法同上:

  计算:

  4500 + 0031 +89F5 + 0000 + 6E06+ DD38 + DEB7 + 455D + C0A8 + 00DC =3 FFFC

  0003 + FFFC = FFFF

  得到的结果是全一,正确。


本文出自 “12038626” 博客,谢绝转载!

IP首部校验和的计算     [网络协议分析的作业]

标签:网络   协议   分析作业   

原文地址:http://12048626.blog.51cto.com/12038626/1860032

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!