Вниз
Скачать: CL | DM;

Контрольная Сумма   Найти похожие ветки 

 
-=Demon=-   (2004-04-08 14:16) [0]

Необходимо расчитать контрольную сумму для поля Ip пакета. Как это делается?


 
Sha ©   (2004-04-08 15:12) [1]

USHORT ip_checksum(USHORT* buffer, int size)
{
   unsigned long cksum = 0;
   
   // Sum all the words together, adding the final byte if size is odd
   while (size > 1) {
       cksum += *buffer++;
       size -= sizeof(USHORT);
   }
   if (size) {
       cksum += *(UCHAR*)buffer;
   }

   // Do a little shuffling
   cksum = (cksum >> 16) + (cksum & 0xffff);
   cksum += (cksum >> 16);
   
   // Return the bitwise complement of the resulting mishmash
   return (USHORT)(~cksum);
}


 
Verg ©   (2004-04-08 15:18) [2]

Например так:

После заполнения всех полей заголовка IP, полю контрольной суммы присавиватся 0, а затем, по всему заголовку IP пакета (только по заголовку) просчитыавется число, которое и заносится опять же в поле контрольной суммы.

ushort net_checksum( void *data, size_t len )
{
   ulong sum = 0;
   ushort *dp = (ushort*)data;
   ushort sum_s;
   ushort 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;
}


Где data  - это указатель на начало IP пакета.



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.023 c
3-1084016146
Nazer
2004-05-08 15:35
2004.05.30
Не могу создать индекс


4-1080885334
Sapsi
2004-04-02 09:55
2004.05.30
Поиск edit и button в чужом окне


4-1082300345
Privet10
2004-04-18 18:59
2004.05.30
Как управлять PGP


6-1081437214
som
2004-04-08 19:13
2004.05.30
проблема с навигацией по FTP серверу


1-1085001494
killer
2004-05-20 01:18
2004.05.30
StringGrid.Canvas




   Наверх