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

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
RSAC
Posts: 4009
Joined: 2003-01-21 01:59
Location: Sinsheim/Karlsruhe

Re: Checksum Berechung bei IP-Header

Post by dodolin » 2005-06-08 05:27

Du meinst, du hast die Checksumme und willst nun validieren, ob das Paket in Ordnung ist?

mydani
RSAC
Posts: 228
Joined: 2003-08-18 19:34

Re: Checksum Berechung bei IP-Header

Post by mydani » 2005-06-08 08:11

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

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?