Главная страница
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.072 c
1-1084783750
OlegM
2004-05-17 12:49
2004.05.30
Идиотский вопрос но есть application.Minimize; а обратная функция


14-1084287827
ИМХО
2004-05-11 19:03
2004.05.30
Начинать с нуля


11-1073511541
reagent
2004-01-08 00:39
2004.05.30
Глюки ICS


1-1084961468
saysu
2004-05-19 14:11
2004.05.30
Как в делфи писать на казахском языке?


3-1083670240
maxz
2004-05-04 15:30
2004.05.30
FindKey