0
icmp頭校驗和和IP頭校驗和計算方法相同嗎?我的意思是,他們可能是相似的。但是我發現this代碼用於ip頭校驗和。我是否也可以使用此代碼進行icmp頭校驗?任何其他的幫助將是偉大的。ICMP頭和IP頭校驗和計算
unsigned short cksum(struct ip *ip, int len){
long sum = 0; /* assume 32 bit long, 16 bit short */
while(len > 1){
sum += *((unsigned short*) ip)++;
if(sum & 0x80000000) /* if high order bit set, fold */
sum = (sum & 0xFFFF) + (sum >> 16);
len -= 2;
}
if(len) /* take care of left over byte */
sum += (unsigned short) *(unsigned char *)ip;
while(sum>>16)
sum = (sum & 0xFFFF) + (sum >> 16);
return ~sum;
}
您應該檢查RFC 792中的ICMP「_Header Checksum - 標題中所有16位字的補碼總和的16位補碼,爲了計算校驗和,校驗和字段應該爲零,這個校驗和可能是在未來取代。「RFC RFC 1071和1141詳細說明了如何進行IP校驗和。 –
@Ron所以,你說他們(頭校驗和和頭校驗和計算方法)不一樣? –