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