Sind die icmp-Header-Prüfsummen- und ip-Header-Prüfsummenberechnungsmethoden gleich? Ich meine, sie können ähnlich sein. Aber ich fand this Code für IP-Header-Prüfsumme. Kann ich diesen Code auch für die icmp-Header-Prüfsumme verwenden? Jede andere Hilfe wäre großartig.ICMP-Header und IP-Header-Prüfsummenberechnungen
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;
}
Sie sollten RFC 792 für das ICMP überprüfen "_Header Checksum - Das 16-Bit-Einerkomplement der Einerkomplement-Summe aller 16-Bit-Wörter im Header. Für die Berechnung der Prüfsumme sollte das Prüfsummenfeld Null sein. Diese Prüfsumme darf ersetzt in der Zukunft._ "RFCs 1071 und 1141 buchstabieren, wie IP-Prüfsummen zu tun. –
@Ron so, Sie sagen, dass sie (Header-Prüfsumme und IP-Header Prüfsummen Berechnungsmethoden) sind nicht das Gleiche? –