![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
правильно подсчитать контрольную сумму IP пакета. [D7, WinXP]
Краб © (2010-05-03 11:55:00)Добрый день господа.
У меня возникла проблема в подсчёте чек суммы IP пакета перед отправкой.
Вот функция:
function Checksum(var Buffer; Size: word): WORD;
var i: Integer;
Sum: DWORD;
p: PWORD ;
begin
p:=@Buffer;
Sum := 0;
for i := 0 to Size - 1 do
begin
Sum := Sum + htons(p^);
inc(p);
end;
while (Sum shr 16) > 0 do
Sum := (Sum and $FFFF)+(Sum shr 16);
Sum := not Sum;
Result := Sum;
end;
Вроде должно работать правильно, но в итоге тем же самым WireShark'ом , мы замечаем:
Checksum: 0x4b28 [incorrect, should be 0x284b (maybe caused by "UDP checksum offload"?)]
или
Checksum: 0x7728 [incorrect, should be 0x2877 (maybe caused by "UDP checksum offload"?)]
Есть у кого-нибудь догадки : что я сделал не так ? =)
(искал другие функции, но найти подобный рабочий вариант у меня не получилось)
Краб (2010-05-03 14:18:00) [1]ошибку нашёл сам .
удалите/закройте пожалуйста тему.