Problem bei Verbindung Aufbau mittels Raw Sockets
-
Hallo,
beschäftige mich derzeit mit den Raw Sockets. Ich will einen simplen 3-Way-Handshake schreiben doch leider scheitert es schon bei meinem ersten SYN Packet.
Irgendwie wird der Header nicht richtig geschrieben und ich finde meinen Fehler nicht:dataSize=sizeof(iphdr)+sizeof(tcphdr); iphdr.h_verlen = (4 << 4 | sizeof(IP_HEADER) / sizeof(unsigned long)); iphdr.total_len = htons(sizeof(IP_HEADER) + sizeof(TCP_HEADER)); iphdr.ident = 1; iphdr.frag_and_flags = 0; iphdr.ttl = 128; iphdr.proto = IPPROTO_TCP; iphdr.checksum = 0; iphdr.destIP = sin.sin_addr.s_addr; tcphdr.th_dport = sin.sin_port; tcphdr.th_sport = htons(rand() % 1025); tcphdr.th_seq = htonl(0x12345678); tcphdr.th_ack = 0; tcphdr.th_flag = 2; tcphdr.th_lenres = (sizeof(TCP_HEADER) / 4 << 4 | 0); tcphdr.th_win = htons(16384); tcphdr.th_urp = 0; tcphdr.th_sum = 0; psdhdr.saddr = iphdr.sourceIP; psdhdr.daddr = iphdr.destIP; psdhdr.mbz = 0; psdhdr.ptcl = IPPROTO_TCP; psdhdr.tcpl = htons(sizeof(tcphdr)); memcpy(szBuffer, &psdhdr, sizeof(psdhdr)); memcpy(szBuffer + sizeof(psdhdr), &tcphdr, sizeof(tcphdr)); tcphdr.th_sum = checksum((USHORT *)szBuffer, dataSize); memcpy(szBuffer, &iphdr, sizeof(iphdr)); memcpy(szBuffer + sizeof(iphdr), &tcphdr, sizeof(tcphdr)); memset(szBuffer + sizeof(iphdr) + sizeof(tcphdr), 0, 4); iphdr.checksum = checksum((USHORT *)szBuffer, dataSize); memcpy(szBuffer, &iphdr, sizeof(iphdr)); sendto(sock,szBuffer,dataSize,0,(struct sockaddr *)&sin,sizeof(sin));Kann jemand mal den Code überfliegen?
Sitze jetzt schon knapp ne Stunde da dran und finde den Fehler einfach nicht....