![]() |
Packet-Sniffer
Hallo,
ich versuche, einen Packet-Sniffer zu bauen. Dabei benutze ich ![]() Habe mir dazu eine Form gebastelt, "On-Events" zugewiesen und versucht zu kompilieren. Der erste Fehler tritt auf: unit1.pas(213,14) Error: Identifier not found "pipheader2" Ich hoffte, dies sei ein Tippfehler vom Autor und habe alle pipheader2 durch pipheader ersetzt. Folgendes hat sich erledigt: Dann kommt aber eine Fehlermeldung, mit der ich nicht viel anfangen kann und mich aufhält: unit1.pas(214,16) Error: Illegal qualifier Das bezieht sich auf:
Delphi-Quellcode:
Damit ist (so glaube ich) gemeint, dass der Compiler mit dem ".Protocol" nicht anzufangen weiß, da sich dort auch der Cursor hinsetzt.
if pipheader.Protocol = 6 then ...
Es ist ja pipheader vom Typ TIPHeaderPtr. Der wurde ja am Anfang definiert (siehe Quelle):
Delphi-Quellcode:
Es ist auch (siehe Kommentar) Protocol als Eigenschaft/Property(?) definiert, es wird aber nicht darauf zugegriffen.
TIPHeaderPtr = ^TIPHeader;
TIPHeader = packed record VerLen: byte; TOS: byte; TotalLen: word; Identifer: word; FragOffsets: word; TTL: byte; Protocol: byte; // Da ist auch "Protocol" CheckSum: word; SourceIp: DWORD; DestIp: DWORD; Options: DWORD; end; ... Was soll ich tun ? Es sind vielleicht Einstellungen im Compiler zu machen ? UPDATE Nun habe ich folgendes ausprobiert, was mir geholfen hat, sodass das Projekt compiliert!
Delphi-Quellcode:
Nun gibts einen Fehler hier:
//{$mode objfpc}{$H+}
{$mode delphi}{$H+}
Delphi-Quellcode:
Habe die Exception mittels "on e:Except..." abgefangen:
Result := bind(RawSocket, sa, sizeof(sa));
if Result = SOCKET_ERROR then raise Exception.Create('bind failed'); Exception : bind failed Was soll ich nun tun ? (Habe das Projekt mal angehängt.) Vielen Dank THOMAS |
AW: Packet-Sniffer
Ich weiß nicht, wie es bei FreePascal ist, aber bei Delphi werden Pointer-Referenzen wenn nötig standardmäßig automatisch aufgelöst.
Delphi-Quellcode:
entspricht also eigentlich
pipheader.protocol
Delphi-Quellcode:
.
pipheader^.protocol
|
AW: Packet-Sniffer
Hallo,
(Siehe Update) zur Vollständigkeit möchte ich die veränderte Version hochladen. Ich habe ein "on e:except do..." eingebunden, um Fehler auszuwerten. Vielen Dank |
AW: Packet-Sniffer
Mit GetLastError erhalte ich:
Exception : bind failed / 10013 / Der Zugriff auf einen Socket war aufgrund der Zugriffsrechte des Sockets unzul?ssig. Habe über die Fehlermeldung nichts Brauchbares finden können. Was bedeutet dieser Fehler ? |
AW: Packet-Sniffer
Hallo,
einen RAW_SOCKET kann in der Regel nur der root user (bzw. ein User mit dessen Rechten) öffnen. Grüße Klaus |
AW: Packet-Sniffer
Falls du das meinst, was ich meine:
Mir ist gerade (auch) aufgefallen, dass es mit Admin-Rechten klappt. Warum geht das denn als "eingeschränkter, normaler" Nutzer nicht :?: |
AW: Packet-Sniffer
Zitat:
Ich denke, dass es aus Sicherheitsgründen eingeschränkt ist. Grüße Klaus |
AW: Packet-Sniffer
Ok, das wäre natürlich möglich.
So habe ich wenigstens den Fehler gefunden. Danke sehr. |
AW: Packet-Sniffer
Zitat:
Daher ergibt sich auch die Lösung von thomasschaf das
Delphi-Quellcode:
durch
{$mode objfpc}
Delphi-Quellcode:
zu ersetzen.
{$mode delphi}
Gruß, Sven |
AW: Packet-Sniffer
Wo man dann gerade dabei ist:
Wenn ich am Anfang
Delphi-Quellcode:
setze, bedeutet das dann, dass der Compiler auf den Delphi-Modus umstellt, also alles wie in Delphi-Language behandelt wird ?
{$mode delphi}
Wozu kaufen sich dann die Leute Delphi ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 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