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); }