Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.23;
Скачать: CL | DM;

Вниз

Help. CRC Tcp пакета   Найти похожие ветки 

 
JorSand   (2003-08-27 00:33) [0]

Нужен алгоритм расчета CRC TCP пакета, если кто писал бросьте исходник-с плиз. Очень надо. Да, и RFC я уже читал, может конечно плохо, итог - у меня не вышел каменный цветок.


 
JorSand   (2003-08-27 10:30) [1]

всем участвовавшим в обсуждении этого вопроса - большое человеческое спасибо.


 
Verg ©   (2003-08-27 10:39) [2]

Писал, только на С:

ushort net_checksum( void *data, size_t len )
{
ulong sum = 0;
ushort *dp = (ushort*)data;
ushort sum_s;
int words = len >> 1;

while( words -- )
sum += *dp ++;

if( len & 1 )
sum += *(uchar*) dp;

sum = (ushort) sum + (sum >> 16) & 0xffff;
sum_s = (ushort) sum + (ushort)(sum >> 16);
return sum_s != 0xffff ? ~sum_s : sum_s;
}

ushort net_chksum_add( ushort s1, ushort s2 )
{
ulong sum = (ulong) s1 + (ulong) s2;
ushort usum = (ushort) sum;

sum = sum > 0xffff ? usum + 1 : usum;
if( !sum && (s1 || s2) )
return 0xffff;
else
return sum;
}


Кс TCP пакета:
Сумма котрольных кодов TCP пакета вместе с данными и псевдозаголовка TCP:

ushort get_udp_checksum(ip_header *iph, tcp_hdr* tcph, size_t size) {
tcp_pseudohdr ph;
ph.tph_saddr = iph -> ip_src;
ph.tph_daddr = iph -> ip_dst;
ph.tph_zero = 0;
ph.tph_proto = IP_PROTO_TCP;
ph.tph_len = tcph -> uh_ulen;
return net_chksum_add(
net_checksum( &ph, sizeof( ph ) ),
net_checksum( tcph, size ));
};


 
Verg ©   (2003-08-27 10:45) [3]

Ошибочка:


> ushort get_tcp_checksum(ip_header *iph, tcp_hdr* tcph,
> size_t size) { // длина TCP пакета - заголовок+данные
> tcp_pseudohdr ph;
> ph.tph_saddr = iph -> ip_src;
> ph.tph_daddr = iph -> ip_dst;
> ph.tph_zero = 0;
> ph.tph_proto = IP_PROTO_TCP;
> ph.tph_len = size;
> return net_chksum_add(
> net_checksum( &ph, sizeof( ph ) ),
> net_checksum( tcph, size ));
> };


 
JorSand   (2003-08-28 10:25) [4]

IP_PROTO_TCP равен 6 ????
Длина в псевдозаголовке (size) это есть = длина заголовока TCP пакета + кол-во байт данных?


 
Jeer ©   (2003-08-28 12:39) [5]

http://www.programme.ru/archive/2001/1/012001_3_2.phtml


 
JorSand   (2003-08-28 13:46) [6]

спасибо



Страницы: 1 вся ветка

Текущий архив: 2003.10.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
3-74027
Буфер обмена
2003-10-03 14:30
2003.10.23
Clipboard.AsText - белеберда какая-то


1-74269
Developerr
2003-10-11 12:58
2003.10.23
Как установить Tidestone Formula One 6 в Delphi.


3-73993
havez
2003-09-25 14:34
2003.10.23
TExcelWorksheet


3-74072
LinOS
2003-10-02 11:18
2003.10.23
CLientDataSet+SELECT 2 таблиц


1-74235
GreySerg
2003-10-08 20:12
2003.10.23
Как определить процедуру на определённое событие у дина...