Delphi-Quellcode:
unit WSock;
interface
uses WinSock;
type
PIcmpHeader = ^TIcmpHeader;
TIcmpHeader =
record
MT : Char;
// ICMP Message Typ
MC : Char;
// Message Interner (Fehler-)Code
CS : Byte;
// Checksum, muss vor berechnung selbiger auf "00" gesetzt werden.
ID : Byte;
// ID des Pakets
Se : Byte;
// Sequenznummer, bei mehreren typgleichen, (sinn-)zusammenhängenden Paketen
TS : Cardinal;
// Zeitstempel beim Abesenden
end;
var Header: TIcmpHeader;
hd_addr: PIcmpHeader;
implementation
uses Unit1;
end.
das ist der anfang einer
unit zum erzeugen von icmp-packeten.
meine frage:
wie kann ich folgender procedure beibiegen, das sie mir eine checksumme
aus dem o.g. record liefert?
Delphi-Quellcode:
{*******************************************************************
** das original dieser procedure ist in c geschrieben und wurde, **
** soweit ich weiß, von Peter Below nach Delphi übersetzt. **
** bei von mir angepassten stellen folgt der original code **
** gekennzeichnet mit //[o] **
*******************************************************************}
procedure Checksum(PData: PWord; Count: Integer);
//[o] procedure Checksum(PData: PWord; Count: Integer): Word;
var
sum: Longword;
i: Integer;
begin
sum := 0;
for i:= 1 to Count do begin
sum := sum + PData^;
Inc(PData);
if (sum and $FFFF0000) <> 0 then
sum := (sum and $FFFF)+1;
end;
Header.usCheckSum:= not (sum and $FFFF);
//[o] result:= not (sum and $FFFF);
end;
wie die checksumme genau berechnet werden kann steht
hier.
danke!
mfg