Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Packets von und an ein bestimmtes Programm auslesen (https://www.delphipraxis.net/121628-packets-von-und-ein-bestimmtes-programm-auslesen.html)

hamburcher 3. Okt 2008 17:48

Re: Packets von und an ein bestimmtes Programm auslesen
 
Im Prinzip fährst Du also einen Man-in-the-Middle Angriff aus. Da würde ich trotz Erlaubnis des Auftraggebers vorsichtig sein...

Seren200018 3. Okt 2008 18:04

Re: Packets von und an ein bestimmtes Programm auslesen
 
Sie werden das Programm auch hosten.

Aber ihr braucht euch keine Sorgen machen. Es handelt sich nur um eine G15 Unterstützung für ein Onlinerollenspiel. Die Übertragenen Informationen sind weder von besonders brisanter Bedeutung noch verschlüsselt.

Seren200018 7. Okt 2008 22:14

Re: Packets von und an ein bestimmtes Programm auslesen
 
hmm ich bin jetzt etwas Ratlos.

Ich habe das Packetauslesen nun in mein Programm eingebaut. Problem ist ich bekomme regelmäßig Error.

"Project xxx faulted with message 'access violation at 0x00405be5: write of adress 0x01500e48' Process Stopped.
Use Step or Run continue."

Ich ahne schon warum das Problem auftritt.(Es tritt vor allem auf wenn ich aus einem Rechenintensiven Programm austabbe).

Die Cpu ansicht zeigt "push $00000400" als Fehlerstelle an.

Der warscheinlich defekte code ist der hier:

Delphi-Quellcode:
setlength(t,packetinfo.PacketLen);
    move(packetinfo.databuf,t[0],packetinfo.PacketLen);
    if (started) then packetanalysermain(t);
t ist hierbei ein Array of Byte . Packetinfo.Databuf ein pointer auf ein Array of byte.Packetlen ist die Größe von Databuf.

Irgendwelche Ideen wie ich das umgehe?

jokerfacehro 8. Okt 2008 10:20

Re: Packets von und an ein bestimmtes Programm auslesen
 
du kannst dieses problem ziemlich easy lösen.
zuerst leitest du die pakete von den instanzen auf localhost um.
das machst du entweder, indem du direkt die serverdaten in den dateien des proggis änderst oder du baust dir nen indytunnel. das ist eine art man-in-the-middle angriff.

so hast du leicht zugriff auf die einzelnen instanzen.

und dein proggi schickt dann die pakete weiter an den server

Seren200018 8. Okt 2008 10:56

Re: Packets von und an ein bestimmtes Programm auslesen
 
ah ich habe vergessen zu erwähnen das das Programm bereits die packets auslesen kann und auch den Instanzen zuordnet. Das ganze funktioniert also (außer die gesendeten packete die will er irgendwie nicht finden warscheins liegt es an meinem wlan Adapter aber egal geht auch ohne) Problem ist halt nur der besagt Error.

Der Indytunnel ist eine gute idee ich bin aber etwas skeptisch da das Programm dem server den Port mitteilt an dem es horcht und dies auch bei Portänderung tut. Darum wird der Indytunnel schnell umgangen und bei Programmänderung oder Packetänderung kriege ich das Programm wohl nicht als offiziell durch.

Und noch was: Ich habe bereits versucht den Fehler durch eine try Bedingung zu umgehen. Das Resultat war zwar keine Fehlermeldung dafür schließt sich das Programm selbst.

Benutzen tue ich Winpcap zusammen mit den Overbyte und leicht abgewandelten Magenta komponenten.(Ich habe bei MagentaHlpapi noch eine Funktion eingebaut die mir bei angabe einer Process Id einen Port ausspuckt und eine die das umgekehrt macht sowie bei Monpcap den Typ von Databuf vom für mich wehrtlosen String zu einem Array of byte geändert) Was mich aber wundert ist das das Orginaldemo Programm keines dieser Probleme hat ich aber noch nicht genau weiß wieso. Kann es daran liege das ich Databuf extern bearbeite? Ich kopiere doch aber um genau das zu vermeiden Databuf auf das Array selber länge T? Oder sollte ich vieleicht um ein Overflow zu verhindern die größe von T fest machen bei zum beispiel 10000byte?

Danke Danke schon mal für die Antwort. Ach ja sobald ich wieder die Überschrift des Themas ändern darf ändere ich sie auf "Hilfe bei meinem kleinen Projekt" das es nicht zu missverstädnissen kommt

jokerfacehro 8. Okt 2008 11:55

Re: Packets von und an ein bestimmtes Programm auslesen
 
schreib ma die sourcecode stelle samt aufgerufener funktionen wo er meckert, denn schau ich mir das nacher mal an :)

Seren200018 8. Okt 2008 12:23

Re: Packets von und an ein bestimmtes Programm auslesen
 
HA Ich habe den Fehler grade gefunden.
Danke für den Hinweis auf die Call funktionen.

Hier die Fehlstelle:
Delphi-Quellcode:
Move ( ((PackPtr) + OFFSET_IP)^, DataBuf [1], DataLen) ;
und hier die Reparatur
Delphi-Quellcode:
Move ( ((PackPtr) + OFFSET_IP)^, DataBuf [0], DataLen) ;
Das Problem war das ich ein Move in Magentamonpcap übersehen hatte in dem das Array of Byte auf das andere geschickt wird.
Da aber nun ja ein string bei 1 anfängt aber ein Array bei 0 gab es regelmäßig bei kaputten packeten einen overload.
Ich hatte das ganze schon weiter oben ein mal korriegiert aber den Teil weiter unten übersehen.

Läuft jetzt Tadellos damit kann ich endlich weitermachen.

Seren200018 8. Okt 2008 20:45

Re: Packets von und an ein bestimmtes Programm auslesen
 
Ein Problem besteht noch. Irgendwie fange ich keine ausgehende packets auf. Die würden mir das leben sehr vereinfachen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 Uhr.
Seite 2 von 2     12   

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