16 Bit IP Checksumme berechnen
-
Hallo,
ich habe in einem String den Header von einem IP-Paket.
um an Pos 11 und 12 die IP-Checksumme eintragen zu können, brauche ich eine Berechnungsfunktion.
Mit der Beispielfunktion vonkomme ich wegen meinem unglücklichen Zahlenformat nicht weiter.
Ich habe:
-----------------
char Puffer[60];
strcpy (Puffer, "45 00 0a 0a 0a 0a 40 00 0a 06 00 00 c0 a8 06 02 c0 a8 06 05");
------------------
bringt mir eine Umwandlung mit "StrTointEX" etwas?
-
sscanf kann dir helfen

USHORT IpCrc16(char* Buffer, int iLenght) { UINT uSum = 0, uFirst, uNext; char sz[6] = {0}; for (int i = 0; i < iLenght; i += 6) { sz[0] = Buffer[i], sz[1] = Buffer[i + 1]; sz[3] = Buffer[i + 3], sz[4] = Buffer[i + 4]; ::sscanf(sz,"%02x",&uFirst), ::sscanf(sz + 3,"%02x",&uNext); uSum += ((uFirst << 8) & 0xff00) + (uNext & 0xff); } while (uSum >> 16) uSum = (uSum & 0xffff) + (uSum >> 16); uSum = ~uSum; return uSum & 0xffff; }
-
Vielen Dank,
die Funktion klappt super.
Kann ich die Funktion auch für die TCP Checksumme nutzen?
Die Funktion auf www.netfor2.com/tcpsum.htm schein die ganze Aufgabe einfach nur Scheibenweise zu erzeugen oder?
Mehrfach die Summe bilden und am Ende das Komplement?
-
richtig, die Vorgehensweise ist genau die selbe.
