ping包的checksum校验和


PING包发送里面有一个比较关键的就是checksum即校验和

checksum本来就是ICMP包内的数据 怎么又从ICMP包开始计算?后来看了一下文档,就是就算ICMP的时候checksum本身

的字段要置零

//计算网际效验和函数 pBuf指向ICMP数据开始的地方
uint16_t checksum(uint16_t *pBuf,int iSize)
{
    uint32_t cksum=0;
    pBuf[1]=0;//checksum字段本身应该置零
    while(iSize>1)
    {
        cksum+=*pBuf++;
        iSize-=sizeof(uint16_t);
    }
    if(iSize)
    {
        cksum+=*(uint16_t*)pBuf;
    }
    cksum=(cksum>>16)+(cksum&0xffff);
    cksum+=(cksum>>16);
    return(uint16_t)(~cksum);
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM