您的位置:首页 > 理论基础 > 计算机网络

网络第二课(3)---ip协议中的校验和。

2013-10-24 20:56 274 查看
check_sum计算:

1.校验和置0;

2.ip头部中(20字节),以两个字节为一组(short型),相加。

3.判断这个和是否超出了short型 的范围,如果超出了把超出部分与,下面的16位数相加;

4.最后对这个结果取反。

#include <stdio.h>

unsigned short check_sum(unsigned char *data, int len);

int main()

{

//0xb88f

unsigned char data[1024] = {//下面这段数据是我们通过抓包程序,抓下来的(ip协议头)

0x45, 0x00,
0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
0x00, 0x00, 0xc0, 0xa8, 0x00, 0x0f, 0xc0, 0xa8,
0x00, 0xde

};

unsigned short sum = check_sum(data, 20);//首地址与长度。

printf("sum is %x\n", sum);
}

unsigned short check_sum(unsigned char *data, int len)

{

unsigned short sum = 0;

unsigned int tmp = 0;

int i= 0;

for(i=0;i<len-1;i=i+2)//求和


{

tmp = tmp + ((data[i]<<8) + (data[i+1]));

}

while(tmp > 0x10000)//查看是否超出short型数据的范围。


{

tmp = ((tmp & 0xffff0000)>>16) + (tmp & 0xffff);

}

return 0xffff-tmp;//取反


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: