看流星社区

 找回密码
 注册账号
查看: 1949|回复: 0

计算ICMP头的校验和:

[复制链接]

该用户从未签到

发表于 2017-6-2 11:07:50 | 显示全部楼层 |阅读模式
计算ICMP头的校验和:
USHORT checksum(USHORT* buff, int nSize)
{
        unsigned long cksum=0;
        //将数据以字为单位加到cksum
        while (nSize > 1)
        {
                cksum += *buff++;
                nSize -= sizeof(USHORT);
        }

        //如果为奇数, 将最后一个字扩展到双字,再累加
        if (nSize)
        {
                cksum += *(UCHAR*)buff;
        }
        //将cksum的高16位与低16位相加,取反后得到校验和
        cksum = (cksum>>16) + (cksum&&0xffff);
        cksum += (cksum>>16);
        return (USHORT)(~cksum);
}
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-20 02:52

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表