Arama butonu
Bu konudaki kullanıcılar: 1 misafir
1
Cevap
269
Tıklama
0
Öne Çıkarma
WinPcap TCP Checksum sorunu
P
10 yıl
Er
Konu Sahibi

Merhabalar, winpcap ile karşı sunucuya tcp syn paketi göndermek istiyorum fakat şuana kadar denediğim her yöntemde checksum yanlış çıkıyor

Bu gönderdiğim paket
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

Pakete wireshark ile baktığımda tcp checksum hariç hiçbir sorunu yok

Bu tcp checksum için kullandığım en son yöntem
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);


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 >

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi Polkakorowakurwa -- 6 Temmuz 2015; 17:54:50 >

G
10 yıl
Onbaşı

Aynı sorunla bende 2 yıl önce karşılaşmıştım bende çözümü bulamadım şuan c++yı bırakalı çok oldu aklımda kalan bilgi hesap makinesi yapacak düzeyde bile değil yinede bilen biri arkadaşa cevap verebilir mi?




Bu mesajda bahsedilenler: @Polkakorowakurwa
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.