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

IP首部校验和计算

时间:2016-10-31 18:50:24      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:ret   方法   span   写代码   bsp   编写   实例   sum   head   

根据RFC1071文档的计算方法,编写代码实现IP首部校验和的计算

 

计算步骤:

1.首先将IP首部中校验和字段置0

2.将IP首部每16bit进行相加,如果有进位产生,则将进位加到最低位。

3.将计算的结果取反即可

 

 1 unsigned short checksum(int count,unsigned short* addr)
 2 {
 3     long sum = 0;
 4 
 5     while(count > 1)
 6     {
 7         sum   +=*addr++;
 8         count -= sizeof(unsigned short);
 9     }
10 
11     if(count > 0)
12     {
13         sum  +=*(unsigned char*)addr;
14     }
15 
16     while(sum >> 16)
17     {
18         sum = (sum & 0xFFFF) + (sum >> 16);
19     }
20     
21     return (unsigned short)(~sum);
22 }
23 int main(int argc,char* argv[])
24 {
25     unsigned char IpHeader[] = "\xa1\x00\x00\x45\x00\x00\x21\x2c\x00\x00\x11\x01\x2f\x0a\x1e\xac\xfa\xff\xff\xef"; //抓包实例  检验和是0xe6e3
26 
27     printf("0x%0x\n",checksum(sizeof(IpHeader)-1,(unsigned short *)IpHeader));
28   
29     return 0;
30 }

 

IP首部校验和计算

标签:ret   方法   span   写代码   bsp   编写   实例   sum   head   

原文地址:http://www.cnblogs.com/gtxvs/p/6016806.html

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