Page 1 of 1

Checksum Berechung bei IP-Header

Posted: 2005-06-07 23:43
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...

Re: Checksum Berechung bei IP-Header

Posted: 2005-06-08 05:27
by dodolin
Du meinst, du hast die Checksumme und willst nun validieren, ob das Paket in Ordnung ist?

Re: Checksum Berechung bei IP-Header

Posted: 2005-06-08 08:11
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

Vielen Dank!!!

Posted: 2005-06-10 10:13
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?