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