sdssly
驱动牛犊
驱动牛犊
  • 注册日期2003-03-04
  • 最后登录2016-01-09
  • 粉丝2
  • 关注0
  • 积分344分
  • 威望47点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
阅读:917回复:0

checksum的代码!希望对大家有帮助

楼主#
更多 发布于:2003-05-20 10:00
正在搞这个东西,今天研究了一下这个原代码:
   USHORT 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);

}

上面代码对于ICMP和IP是正确的(windows 2000平台上)。有以下几个注意点:

1。网络字节顺序问题:在packet中0x4500要转为0x0045。

2。checksum只是对于IP、ICMP数据头进行check。不包含数据。

3。初始化的时候,checksum数据段应该是0x0000


游客

返回顶部