Registriert seit: 2. Mär 2004
5.508 Beiträge
Delphi 5 Professional
|
Re: Ip-Protokoll und (CRC-16) Berechnung... Und ich versteh
10. Feb 2005, 15:58
Zitat von Kedariodakon:
so nun habe ich hier mal ein IP-Packet:
Delphi-Quellcode:
Const
cProto: Array[ $00..$2D ] Of Byte =
( $45, $00, $00, $28, $A2, $EE, $40, $00, $80, $06, $0E, $55, $C0, $A8, $64, $39,
$C0, $A8, $64, $02, $06, $4D, $01, $BD, $0A, $62, $36, $C5, $47, $E8, $96, $1E,
$50, $10, $FC, $FD, $42, $12, $00, $00, $00, $00, $00, $00, $00, $00 );
Der Header sollte dann folgendes sein:
Delphi-Quellcode:
Const
cIPHeader: Array[ $00..$09 ] Of Byte = ( $45, $00, $00, $28,
$A2, $EE, $40, $00,
$80, $06 );
Aber wenn ich die Checksumme mit tools wie z.B. dem HxD-Hexeditor berechnnen lasse, komme nicht auf die Checksumme von 0x0E55 ...
laut Ethereal ist die Checksumme aber io.
Nein, der IP-Header hört nicht bei dem Eintrag "Header Checksum", sondern umfasst min. 6 * 4 Bytes = 24 Bytes.
Also grob so:
Delphi-Quellcode:
IPHeader : Array[0..12-1] of Word;
Result := 0;
for i:=0 to 12-1 do
begin
if i <> 5 then // das Feld Header Checksum auslassen
Inc(Result, not IPHeader[i]);
Result := not Result; // one's Complement
end;
Andreas
|