Помогите, плз. Как вычислить Checksum TCP пакета. Как я зная это двоичное дополнение сложения слов в псевдозаголовке TCP, в пакете TCP и данных. Вот кусок кода, но он почему-то вычисляет неправильную контрольную сумму:
unsigned short MakeCRC(unsigned short *Buffer, int len)
{
register int nleft=len;
register unsigned short *w=Buffer;
register unsigned short answer;
register int sum=0;
while(nleft>1)
{
sum+=*w;
w++;
nleft-=2;
}
if(nleft==1) sum+=*(unsigned char *)w;
answer=~sum;
return answer;
}
При этом вот код, который вызывает ф-ию:
PseudoTCPHeader ptcp;
ptcp.dest=ipp->iph.src;
ptcp.src=ipp->iph.dest;
ptcp.protocol=IPPROTO_TCP;
ptcp.lenght=htons(sizeof(ipp_send.tcph)+strlen(Data));
char *Buff;
Buff=new char[sizeof(ptcp)+sizeof(ipp_send.tcph)+strlen(Data)];
memset(Buff, 0, sizeof(ptcp)+sizeof(ipp_send.tcph)+strlen(Data));
Buff=(char *)memcpy(Buff, (void *)&ptcp, sizeof(ptcp));
memcpy(Buff+sizeof(ptcp), &ipp_send.tcph, sizeof(ipp_send.tcph));
memcpy(Buff+sizeof(ptcp)+sizeof(ipp_send.tcph), Data, strlen(Data));
Подскажите где ошибка.
WBR, AlexBSD.
... << RSDN@Home 1.0 beta 6a >>
Здравствуйте, AlexBSD, Вы писали:
ABS>Помогите, плз. Как вычислить Checksum TCP пакета.
ЗдесьАвтор: Linuxoid
Дата: 11.02.03
не смотрел?