Checksum Berechung bei IP-Header

FreeBSD, Gentoo, openSUSE, CentOS, Ubuntu, Debian
nurre
Posts: 10
Joined: 2003-06-22 15:39
 

Checksum Berechung bei IP-Header

Post by nurre »

Hallo Zusammen,

ich suche zur Zeit den Alg. zur Berechnung der Checksum im IP-Header... Das Problem ist nicht die Berechnung, sondern eher was ich mit dem Ergebnis der Berechung machen muss?

Direkt vergleichen, Einer-Komplement bilder? Addieren?

Wäre schön wenn mir da jemand helfen könnte!

Schönen Abend noch...
dodolin
Posts: 3840
Joined: 2003-01-21 01:59
Location: Sinsheim/Karlsruhe
 

Re: Checksum Berechung bei IP-Header

Post by dodolin »

Du meinst, du hast die Checksumme und willst nun validieren, ob das Paket in Ordnung ist?
mydani
Posts: 152
Joined: 2003-08-18 19:34
 

Re: Checksum Berechung bei IP-Header

Post by mydani »

Code: Select all

/*
 * Recalculate any IP checksum.
 */
unsigned short
svz_raw_ip_checksum (svz_uint8_t *data, int len)
{
  register unsigned checksum = 0;

  /* 
   * Calculate 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.
   */
  while (len > 1)
    {
      /* This is the inner loop */
      checksum += *data | (*(data + 1) << 8);
      len -= 2;
      data += 2;
    }

  /* Add left-over byte, if any */
  if (len > 0)
    checksum += *data;

  /* Fold 32-bit checksum to 16 bits */
  while (checksum >> 16)
    checksum = (checksum & 0xffff) + (checksum >> 16);
  checksum = ~checksum;

  return htons ((unsigned short) checksum);
}
Add.
http://www.ietf.org/rfc/rfc791.txt
nurre
Posts: 10
Joined: 2003-06-22 15:39
 

Vielen Dank!!!

Post by nurre »

Danke für die Antworten,

ich denke die einfachste Methode ist die Summe alle 4-Byte-Wörter (in Hex) zu addieren, und wenn das FFFF ergibt (bzw. das 1er Komplement 0000) dann ist der Header korrekt?!

Was meint ihr?