Delphi-PRAXiS

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)

Seren200018 1. Okt 2008 14:09


Packets von und an ein bestimmtes Programm auslesen
 
Wie der Titel schon sagt will ich packets von und an ein bestimmtes Programm auswerten.

Das Problem ist das das Program in verschiedenen Instanzen gestartet werden kann und ich diese getrennt auswerten will.

Ich bin für jede Idee dankbar und da ich nur Hobbyprogrammierer bin bitte wenn möglich einen kurzen Beispielcode anfügen oder etwas
erläutern.

Seren200018 2. Okt 2008 12:12

Re: Packets von und an ein bestimmtes Programm auslesen
 
Keiner ne Idee? :(

jokerfacehro 2. Okt 2008 12:19

Re: Packets von und an ein bestimmtes Programm auslesen
 
netzwerkpakete oder was für pakete ?

Seren200018 2. Okt 2008 12:48

Re: Packets von und an ein bestimmtes Programm auslesen
 
Ja Netzwerkpakete die vom Server an das Program geschickt werden und zurück.

Wenn das Programm nicht in mehreren Instanzen laufen würde könnte ich das einfach über einen IP-Filter regeln aber so
muss ich noch irgendwie unterscheiden welches Paket an welche Instanz geht. Die Ports wechseln leider auch permanent dadurch kann ich auch
da nicht groß ansetzen.

jokerfacehro 2. Okt 2008 12:53

Re: Packets von und an ein bestimmtes Programm auslesen
 
das programm worauf du zugreifst, ist das dein eigenes oder fremdsoftware ?

du könntest ja mal nen paketscanner nutzen und schaun ob du die einzelnen instanzen durch bestimmte pakete identifizieren kannst.

Seren200018 2. Okt 2008 12:58

Re: Packets von und an ein bestimmtes Programm auslesen
 
Ja ist Fremdsoftware ich habe aber eine verläufige Erlaubniss vom Betreiber solange ich ihm den Qellcode bei Fertigstellung zur Verfügung stelle.

Mir ist grade schon eine Idee gekommen trotzdem wär mir ein direkter weg lieber.

Seren200018 3. Okt 2008 14:29

Re: Packets von und an ein bestimmtes Programm auslesen
 
HA hab was gefunden da ist auch ein Source Code dabei. Damit müsste es gehen ich werd mich in den nächsten Tagen mal da durch arbeiten!

Hier die Adresse

jokerfacehro 3. Okt 2008 15:30

Re: Packets von und an ein bestimmtes Programm auslesen
 
Zitat:

Ja ist Fremdsoftware ich habe aber eine verläufige Erlaubniss vom Betreiber solange ich ihm den Qellcode bei Fertigstellung zur Verfügung stelle.
aber du behälst die Rechte daran oder wie ? :shock:

Seren200018 3. Okt 2008 16:08

Re: Packets von und an ein bestimmtes Programm auslesen
 
Das ist mir eigentlich egal da ich das ganze freiwillig mache. Ich darf weiterhin das Programm verändern muss aber vor der
Veröffentlichung das ganze Checken lassen das ich nicht etwa verbotene Dinge eingebaut habe.

Und bevor es so weit ist muss ich das Programm erst mal fertigstellen.

jokerfacehro 3. Okt 2008 17:19

Re: Packets von und an ein bestimmtes Programm auslesen
 
dat könne die ja sowieso nich checken, woher solln die wissen dass das wirklich der endgültige source ist xD

dazu müssten se deine compilierte exe mit deren compilierte exe vergleichen, aber du schickst denen ja nicht jedesmal wenn du das proggi bentutz denen ne version ^^

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 21:33 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