2016-03-19 10 views
0

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; 
    } 
+1

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. –

+0

@Ron so, Sie sagen, dass sie (Header-Prüfsumme und IP-Header Prüfsummen Berechnungsmethoden) sind nicht das Gleiche? –

Antwort

1

RFC 791 - Internet Protocol ...

Header-Prüfsumme: 16 Bit

Eine Prüfsumme auf dem einzigen Header. Da einige Kopffelder ändern (z. B. Lebenszeit), wird dies neu berechnet und an jedem Punkt verifiziert, dass der Internet-Header verarbeitet wird.

Der Prüfsummen-Algorithmus ist:

The checksum field is the 16 bit one's complement of the one's 
complement sum of all 16 bit words in the header. For purposes of 
computing the checksum, the value of the checksum field is zero. 

Dies ist eine einfache Prüfsumme und experimentelle Beweise berechnen gibt es ausreichend ist, aber es ist vorläufig und kann durch eine CRC-Verfahren ersetzt werden, auf weitere Erfahrungen abhängig .

Hinweis: Die "CRC-Prozedur" wurde nie implementiert.

RFC 792 - Internet Control Message Protocol ...

Kopfbereichprüfsumme

The 16 bit one's complement of the one's complement sum of all 16 
bit words in the header. For computing the checksum, the checksum 
field should be zero. This checksum may be replaced in the 
future. 

Hinweis: Wieder wurde dieser Algorithmus nie ersetzt.

Also, es ist sicher anzunehmen, dass beide Algorithmen die gleichen sind, und ja, Sie können den gleichen BSD-Code (natürlich aus Gründen der Vernunft struct ip Zeug) für die Berechnung einer ICMP-Header-Prüfsumme verwenden.

Verwandte Themen