Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.054 c
1-1085049530
Sirruf
2004-05-20 14:38
2004.05.30
Ширина текста в TWinControl


1-1084793163
Alek_1
2004-05-17 15:26
2004.05.30
Как скопировать динамический масив?


1-1084625634
Zelius
2004-05-15 16:53
2004.05.30
Вопрос по работе с TdxTreeList


8-1080052987
Pa5ha
2004-03-23 17:43
2004.05.30
Сохранение изображения на холсте в Direct3D


3-1084048202
Я Ламер
2004-05-09 00:30
2004.05.30
Компоненты прямого доступа к MSSQL