TCP Checksum [Konnte das Problem selber lösen]

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

dimaster

Betreff: TCP Checksum [Konnte das Problem selber lösen]

BeitragFr, März 14, 2008 11:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 15, 2008 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group