Форум: "Сети";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
ВнизКонтрольная Сумма Найти похожие ветки
← →
-=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;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.035 c