1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| procedure Init(rGHeader: PGLOBAL_HEADER); overload; begin rGHeader^.magic_number := StrToInt('$A1B2C3D4'); rGHeader^.version_major := 2; rGHeader^.version_minor := 4; rGHeader^.thiszone := 0; rGHeader^.sigfigs := 0; rGHeader^.snaplen := 65535; rGHeader^.network := 1; end;
procedure Init(rPHeader: PPACKET_HEADER); overload; begin rPHeader^.ts_sec := StrToInt('$5AA5438E'); rPHeader^.ts_usec := 0; rPHeader^.incl_len := 0; rPHeader^.orig_len := 0; end;
function GetGlobalHeaderBinary: TBytes; var ms: TMemoryStream; rG: PGLOBAL_HEADER; begin New(rG); Init(rG);
ms := TMemoryStream.Create; ms.WriteData(rG, SizeOf(TGLOBAL_HEADER));
ms.Position := 0; SetLength(Result, ms.Size); ms.ReadData(Result, ms.Size);
ms.Free; Dispose(rG); end;
function GetPacketHeaderBinary(b: TBytes): TBytes; var ms: TMemoryStream; rP: PPACKET_HEADER; begin New(rP); Init(rP);
rP^.incl_len := Length(b); rP^.orig_len := Length(b);
ms := TMemoryStream.Create; ms.WriteData(rP, SizeOf(TPACKET_HEADER)); ms.WriteData(b, Length(b));
ms.Position := 0; SetLength(Result, ms.Size); ms.ReadData(Result, ms.Size);
ms.Free; Dispose(rP); end;
function GetPcapBinary(b: TBytes): TBytes; begin Result := GetGlobalHeaderBinary + GetPacketHeaderBinary(b); end;
|