TCP Checksum [Konnte das Problem selber lösen]
Übersicht

![]() |
dimasterBetreff: TCP Checksum [Konnte das Problem selber lösen] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo zusammen,
Ich habe Probleme mit der Berechnung der TCP Checksum (bei der nutzung von RAW-Sockets) in C. Kann mir vielleicht jemand von euch sagen, wieso mein Code nicht funktioniert? Ich bekomme 2 Bytes zurück, diese sind jedoch falsch. Sofern ich das richtig verstanden habe wird die checksumme mit dem TCP Header + Data und dem Pseudo-Header errechnet, was ich unten ja mache... Code: [AUSKLAPPEN] ... struct pseudo_header { unsigned int s_addr; unsigned int d_addr; unsigned char zer0; unsigned char protocol; unsigned short length; }; ... u_short in_cksum(const u_short *addr, register u_int len) { int nleft = len; const u_short *w = addr; u_short answer; int sum = 0; while (nleft > 1) { sum += *w++; nleft -= 2; } if (nleft == 1) sum += htons(*(u_char *)w<<8); sum = (sum >> 16) + (sum & 0xffff); sum += (sum >> 16); answer = ~sum; return (answer); } ... pseudo->protocol = IPPROTO_TCP; pseudo->length = htons(sizeof(struct tcphdr)); pseudo->s_addr = inet_addr("192.168.168.251"); pseudo->d_addr = inet_addr("194.109.192.114"); ... tcp->th_sport = htons(sport); tcp->th_dport = htons(dport); tcp->th_seq = htonl(random()%time(NULL)); tcp->th_ack = htonl(random()%time(NULL)); tcp->th_off = 5; tcp->th_flags = TH_FIN; tcp->th_win = htons(12000); tcp->th_sum = 0; tcp->th_sum = in_cksum((unsigned short *)(outPacket+sizeof (struct ethdr)+sizeof (struct iphdr)), sizeof(struct tcphdr) + sizeof(struct pseudo_header)); ... Ich hoffe jemand kann mir helfen. mfg dimaster Ich hoffe ihr könnt mir meinen |
||
![]() |
Elvis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es wäre wünschenswert, dass du uns deinen Lösungsweg offenbarst, wenn es sich dabei nicht um menschliches Versagen, etwas privates oder zu spezifisches gehandelt hat.
Vielleicht hat in 2-3 Wochen jemand ein ähnliches Problem und ist gewillt, die Forensuche zu verwenden. Grüße, Elvis |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group