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....


Anmelden zum Antworten