关于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);

}

烦请各位大侠赐教。 谢谢!^_^
...全文
52 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧