IP首部校验和计算

根据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 }

 

转载于:https://www.cnblogs.com/gtxvs/p/6016806.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值