Einerkomplement die Zweite

mstank

Mitglied
Hallo an alle Proger!

Für einen IP-Header brauche ich eine Prüfsumme. Sie ist das Einerkomplement der Summe aller 16-Bit Einerkomplemente des Headers. Die Prüfsumme wird zur Berechnung Null gesetzt.

Code:
#define IP_Vers_IHL_TOS 0x0011 //Vers 4, IHL 5, TOS Priority
#define IP_Flags_FO 0x0011 //Flags Offset enable, FO 0x0
#define IP_TTL_PROT 0x0011 //TTL 32, PROT 17 = UDP
#define IP_Source 0xC0A80201 //Quelldresse 192.168.0.255
#define IP_Destination 0xeffffffa //Zieladresse 192.168.0.218
unsigned char UDP_Frame[100];
unsigned int UDP_Laenge;
unsigned char IP_Frame[120];
unsigned int IP_Laenge;
unsigned long IP_Pruefsumme;
unsigned int IP_Identification;
int IP_HeaderLaenge = 20;
/**************************************************************/
void IP_Header_Pruefsumme (void)
{
unsigned int summe = 0;
IP_Identification = 0x0011;
IP_Pruefsumme = 0x0011;

summe += ((unsigned int) IP_Vers_IHL_TOS << 8) | IP_Vers_IHL_TOS;
summe += ((unsigned int) IP_Laenge << 8) | IP_Laenge;
summe += ((unsigned int) IP_Identification << 8) | IP_Identification;
summe += ((unsigned int) IP_Flags_FO << 8) | IP_Flags_FO;
summe += ((unsigned int) IP_TTL_PROT << 8) | IP_TTL_PROT;
summe += ((unsigned int) IP_Pruefsumme << 8) | IP_Pruefsumme;
/* summe += ((unsigned int) ~IP_Source << 24) | ~IP_Source << 16;
summe += ((unsigned int) ~IP_Source << 8) | ~IP_Source;
summe += ((unsigned int) ~IP_Destination << 24) | ~IP_Destination << 16;
summe += ((unsigned int) ~IP_Destination << 8) | ~IP_Destination; */


IP_Pruefsumme = summe;
}

Hier summiere bisher nur.
Setze ich für die nicht auskommentierten Zeilen 0x1111 ein, Ergebnis 0x6666 OK
Bei 0x0011 Ergebnis 0x6666 ?, Bei 0x1100 ERgebnis 0x0066 ?

Ich bastel heute schon den ganzen Tag daran rum:-(((

Wer kann mir helfen?

Großes Lob und Danke im Voraus

Gruß Markus
 
Zurück