Einzelnen Beitrag anzeigen

Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#7

Re: Ip-Protokoll und (CRC-16) Berechnung... Und ich versteh

  Alt 14. Feb 2005, 11:58
hier meine Routine:

Delphi-Quellcode:
Function CalcIPChecksum(Const Packet : Pointer;Const Bytes : LongWord) : Word;
Var
  Checksum : LongWord;
  X : Integer;
begin
  Checksum:=0;
  For X:=1 To (Bytes shr 1) Do Checksum:=Checksum + PWords(Packet)^[X - 1];
  If ((Bytes and 1) > 0) Then Checksum:=Checksum + PBytes(Packet)^[Bytes - 1];
  CheckSum:=(CheckSum shr 16) + (CheckSum and $FFFF);
  CheckSum:=CheckSum + (CheckSum shr 16);
  Result:=Word(not Checksum);
end;
die Checksumme wird von den ersten n Bytes des Packets berechnet, wobei n die Header-Länge gemäss IP-Header ist.

Zu beachten ist:
- vor der Berechnung wird das Feld der Checksumme im IP-Header auf $0000 gesetzt
- die Checksumme liegt im Packet in Network-Byte-Order vor.... mittels WinSock.NToHS lässt sich ein Word (S-hort) von Network-Byte-Order zu Host-Byte-Order wandeln (WinSock.HToNS für Gegenrichtung)
  Mit Zitat antworten Zitat