关于ICMP校验和的源代码
kialo 2003-11-04 06:33:31 有谁可以提供一个在ICMP校验和的代码?在下今天试了一下PING的代码,发现关于校验和的一个函数(ChkSum)是错的。编译时提示说^(异或)运算是错的。
代码是这样的:
u_short ChkSum( u_short * pIcmpData, int iDataLen ){
u_short iSum;
u_short iOddByte;
iSum = 0;
while ( iDataLen > 1 ) {
iSum = iSum ^ (pIcmpData++); /* 和下一个数据作异或操作 */
iDataLen -= 2;
}
if ( iDataLen == 1 ) { /* 剩下的奇数位 */
iOddByte = 0;
*((u_char *)&iOddByte) = *(u_char *)pIcmpData;
iSum ^= iOddByte;
}
iSum ^= 0xffff; /* 取反操作 */
return(iSum);
}
烦请各位大侠赐教。 谢谢!^_^