1. sayfa
unsigned char* vnPSon; vnPSon = new unsigned char[54]; memset((void*)vnPSon, '\0', 54); //ETHERNET II memcpy((void*)vnPSon, (void*)"\xFF\xFF\xFF\xFF\xFF\xFF", 6); //Broadcast memcpy((void*)(vnPSon+6), (void*)srcMac, 6); //Source MAC memcpy((void*)(vnPSon+12), (void*)"\x08", 2); //IP Header //IP HEADER memcpy((void*)(vnPSon+14), (void*)"\x45", 1); //IPV4 memcpy((void*)(vnPSon+15), (void*)"\x00", 1); //Differnatied Services unsigned short kpr = htons(46); memcpy((void*)(vnPSon+16), (void*)&kpr , 2); //Header boyutu memcpy((void*)(vnPSon+18), (void*)"\x0000", 2); //Id memcpy((void*)(vnPSon+20), (void*)"\x40", 1); //IP Header flag memcpy((void*)(vnPSon+21), (void*)"\x00", 1); //Offset memcpy((void*)(vnPSon+22), (void*)"\x5F", 1); //TTL 255 saniye memcpy((void*)(vnPSon+23), (void*)"\x06", 1); //Protokol memcpy((void*)(vnPSon+24), (void*)"\x00\x00", 2); //Checksum memcpy((void*)(vnPSon+26), (void*)&srcIp, 4); //Yerel ip memcpy((void*)(vnPSon+30), (void*)&dstIp, 4); //Hedef ip //TCP HEADER memcpy((void*)(vnPSon+34), (void*)"\x0020", 2); //Kaynak port unsigned short test = htons(dstPort); memcpy((void*)(vnPSon+36), (void*)&test, 2); //Hedef port memcpy((void*)(vnPSon+38), (void*)"\x00\x00\x00\x00", 4); //Sequence number memcpy((void*)(vnPSon+42), (void*)"\x00\x00\x00\x00", 4); //Ack number memcpy((void*)(vnPSon+46), (void*)"\x50", 1); //TCP Offset memcpy((void*)(vnPSon+47), (void*)"\x02", 1); //Flag syn memcpy((void*)(vnPSon+48), (void*)"\xFF", 2); //Window memcpy((void*)(vnPSon+50), (void*)"\x0000", 2); //Checksum memcpy((void*)(vnPSon+52), (void*)"\x0000", 2); //Urgent point
unsigned short *tempTcp = (unsigned short*)malloc(32); memcpy((void*)tempTcp, (void*)(vnPSon+26), 8);//Kaynak ve hedef ip memcpy((void*)(tempTcp+8), (void*)"\x00", 1);//Reserved memcpy((void*)(tempTcp+9), (void*)"\x06", 1);//Protokol memcpy((void*)(tempTcp+10), (void*)"\x0014", 2);//TCP Length memcpy((void*)(tempTcp+12), (void*)(vnPSon+34), 20); register unsigned long csum=0; unsigned short *buffer=(unsigned short*)tempTcp; unsigned short size=32; while(size>1) { csum += *buffer++; size -= 2; } if(size>1) csum += *(unsigned char*)buffer; csum = (csum>>16) + (csum & 0xFFFF); csum += (csum>>16); return htons(~csum);
Bu gönderdiğim paket
Pakete wireshark ile baktığımda tcp checksum hariç hiçbir sorunu yok
Bu tcp checksum için kullandığım en son yöntem
Başka yöntemler için bolca araştırdım bulduğum her yöntemi denedim fakat hepsi yanlış çıkıyor şimdiden teşekkürler
Ek olarak paket
< Resime gitmek için tıklayın >
< Bu mesaj bu kişi tarafından değiştirildi Polkakorowakurwa -- 6 Temmuz 2015; 17:54:50 >