这个ip校验和代码是什么意思看不懂!求高手!c语言版的! 5

shortchecksum(ushortbufferintsize)//这两个变量是什么意思类型为什么要这样定义?????{unsignedlongcksum=0//类型... short checksum(ushort buffer int size)//这两个变量是什么意思 类型为什么要这样定义?????
{
unsigned long cksum = 0 //类型为什么要定义成long????????

while(size> 1)//为什么size要大于1
{
cksum += buffer++ //???????????
size -= sizeof(ushort) //???????????
}

if(size)
{
cksum += (uchar)buffer
}
cksum = (cksum> > 16) + (cksum& 0xffff) //将高16bit与低16bit相加(&与运算把最高位去除 得到他的后16位)(整数移位后会只取整数部分)
cksum += (cksum> > 16) //将进位到高位的16bit与低16bit 再相加,为什么这里不进行与运算????

return (ushort)(~cksum) //~取反(转换成短整型)
}
展开
 我来答
戚文柏Ro
2013-12-11 · TA获得超过336个赞
知道小有建树答主
回答量:400
采纳率:100%
帮助的人:387万
展开全部
这个应该是ICMP协议的checksum
short checksum(ushort buffer int size) //这里定义的是指针吧 unsigned short *buffer,为ICMP的协议类型ICMP_ECHO值为8,size为发送封包大小,因为ip header占20字节,所以你发送一个最短的64bytes的数据包,size为44
unsigned long cksum = 0 //32位系统占4个字节,32个位,后面有低位和高位运算

while(size> 1)//为什么size要大于1
{
cksum += buffer++ //这个应该是cksum += *buffer++,指针偏移
size -= sizeof(ushort) //size -= 2,判断循环执行次数
}

if(size)
{
cksum += (uchar)buffer //如果packet为奇数,例如65,那个再加一次buffer
}
cksum = (cksum> > 16) + (cksum& 0xffff) //将高16bit与低16bit相加(&与运算把最高位去除 得到他的后16位)(整数移位后会只取整数部分)
cksum += (cksum> > 16) //将进位到高位的16bit与低16bit 再相加,为什么这里不进行与运算????

return (ushort)(~cksum) //~取反(转换成短整型)
}
SmartProxy
2023-10-24 广告
SmartProxy企业级海外住宅IP代理服务商,覆盖全球200+国家和地区,高匿稳定,动态住宅代理/静态住宅代理/账密提取,100%原生住宅IP,城市级定位,支持HTTP/HTTPS/SOCKS5协议,不限带宽,纯净高匿,网络集成更快捷,... 点击进入详情页
本回答由SmartProxy提供
code2
2013-12-11 · TA获得超过1268个赞
知道小有建树答主
回答量:1316
采纳率:79%
帮助的人:336万
展开全部
你的代码不太正确,看下面代码及解释:
unsigned short checksum(unsigned short *buffer,int size) //校验和的求法
{
unsigned long cksum=0;
while(size>0) //各位求和
{
cksum+=*buffer++;
size-=sizeof(unsigned short);
}
if(size)
cksum+=*(unsigned char *)buffer;
cksum=(cksum>>16)+(cksum & 0xffff); //移位,位与运算
cksum+=(cksum>>16);
return (unsigned short)(~cksum); //再取反
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式