Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Nutzdaten eines IP-Paketes (https://www.delphipraxis.net/5624-nutzdaten-eines-ip-paketes.html)

Chewie 13. Jun 2003 16:17


Nutzdaten eines IP-Paketes
 
Ich bastele gerade an einem kleinen IP-Sniffer herum. Die Pakete fange ich richtig ab, also TTL, Paketgröße, Quell-Adresse sind richtig.
Nun will ich die Nutzdaten auslesen, und da haperts.

So sieht mein IP-Paket aus:
Delphi-Quellcode:
type
  ip_hdr = packed record
    ip_verlen: u_char;                          //Version(4) und Länge(4)
    ip_tos: u_char;                             //TOS(8)
    ip_totallength: u_short;                    //Gesamtgröße(16)
    ip_id: u_short;                             //Identifikation(16)
    ip_offset: u_short;                         //Flags(3) und Fragment-Offset(13)
    ip_ttl: u_char;                             //Time-to-live(8)
    ip_protocol: u_char;                        //Protokoll(8)
    ip_checksum: u_short;                       //Header-Prüfsumme(16)
    ip_srcaddr: u_int;                          //Herkunftsadresse(32)
    ip_destaddr: u_int;                         //Zieladresse(32)
  end;
  TIPHdr = ip_hdr;
Und so les ich die Pakete:
Delphi-Quellcode:
procedure GetPackets; stdcall;
var
  recBytes: Integer;
  buf: Array[0..999] of Byte;
  sDisplay: string;
  IPHdr: TIPHdr;
  Inaddr: TInAddr;
  packData: String;
  dataSize: Integer;
  p:Pointer;
begin
  while true do
  begin
    recBytes := recv(S, buf, Length(buf), 0);
    if recBytes > 0 then
    begin
      CopyMemory(@IPHdr, @buf, Sizeof(IPHdr));
      InAddr.S_addr := IPHdr.ip_srcaddr;
      dataSize := recBytes - Sizeof(IPHdr);
     
      //hier versuche ich an den String zu kommen
      p := Pointer(Integer(@buf) + Sizeof(IPHdr));
      packData := String(p);
      SetLength(packData, recBytes - Sizeof(IPHdr));

      sDisplay := Format('%d Bytes erhalten: from %s with TTL %d. %d Bytes Nutzdaten %s:',[recBytes,inet_ntoa(InAddr),IPHdr.ip_ttl,dataSize,packData]);
      Form1.Listbox1.Items.Add(sDisplay);
      inc(recvPackets);
      recvBytes := recvBytes + recBytes;
      Form1.Statusbar1.Panels[0].Text := Format('%d Bytes in %d Paketen erhalten',[recvBytes,recvPackets]);
    end;
  end;
end;
In buf kommen meine Daten. An der markierten Stelle versuche ich, an den String zu kommen. Nur klappt das anscheinend nicht. Kann mir einer helfen?

Chewie 14. Jun 2003 14:00

Kann mir keiner helfen?

Hanswurst 14. Jun 2003 14:06

Niemand .. :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz