Являются ли контрольные суммы заголовка 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-разрядных слов в заголовке. Для вычисления контрольной суммы поле контрольной суммы должно быть равно 0. Эта контрольная сумма может быть равна заменены в будущем ». RFC 1071 и 1141 разъясняют, как выполнять контрольные суммы IP. –
@ Ron, вы говорите, что они (контрольная сумма контрольной суммы и методы вычисления контрольной суммы ip-заголовка) не одинаковы? –