Конференция "Сети" » правильно подсчитать контрольную сумму IP пакета. [D7, WinXP]
 
  • Краб (03.05.10 11:55) [0]
    Добрый день господа.
    У меня возникла проблема в подсчёте чек суммы 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"?)]


    Есть у кого-нибудь догадки : что я сделал не так ? =)
    (искал другие функции, но найти подобный рабочий вариант у меня не получилось)
  • Краб (03.05.10 14:18) [1]
    ошибку нашёл сам .
    удалите/закройте пожалуйста тему.
 
Конференция "Сети" » правильно подсчитать контрольную сумму IP пакета. [D7, WinXP]
Есть новые Нет новых   [134437   +29][b:0][p:0.001]