阅读:917回复:0
checksum的代码!希望对大家有帮助
正在搞这个东西,今天研究了一下这个原代码:
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 |
|