![]() |
Wie auf record schließen?
Liste der Anhänge anzeigen (Anzahl: 1)
Hab da mal ne Frage:
Ich würde gern ein Programm nachschreiben was sich auf einen Server connectet und dann dinge tut, nun das Problem: Ich kann die Pakete abfangen die das Programm sendet(ist ein Delphi Programm) und für mich sieht das stark nach nem Record aus was da gesent wird, jedoch bekomme ich nicht alle Felder raus die in dem record sind. Wie kann ich z.B. unterschreiden ob in dem record ein string[29] oder rein array[0..28] of char ist? Im Anhang befindet sich mal ein Paket, dass ich mit Hilfe von Ethereal abgefangen hab, dass ist jetzt nur der Teil des Paketes den Ethereal als das Datenpaket ansieht. Nächste Frage: Darf ich das überhaupt? Die Daten von nem Programm abfangen und mit deren Hilfe ein ähnliches Programm schreiben? Ich möchte dann ja mit dem Server kommunizieren, würde es dann nen Unterschied machen wenn ich die Records verdrehen würde:
Delphi-Quellcode:
Jetzt hab ich 2 Records die die selben Werte fassen können aber anders aufgebaut sind, macht das einen Unterschied?
type TLogininfo = record
Name, Passwort : string[29]; Alter : integer; end; type TLogininfo = record Alter : integer; Passwort, Name : string[29]; end; Danke schonmal Eichhoernchen |
Re: Wie auf record schließen?
Hallo!
Ich denke, dass es sich um einen Stream handelt. Wegen Array of Char<>String: Einem String geht eine Angabe über die Länge voraus, es müsste also eine Zahl (als byte oder word encoded) zu finden sein, die zum String passt. Was die Array-Reihenfolge betrifft: die ist egal, es kommt auf die Sende-Reihenfolge an, es wird ja ein Stream geschickt und ein Stream am anderen Ende geparst. Ach ja, was das Rechtliche betrifft: meines Wissens nach ist das sogenannte Reverse-Engeneering nicht verboten und wird in der Open-Source-Welt tagtäglich gemacht. mfG Markus |
Re: Wie auf record schließen?
Ahh danke schonmal für die Infos.
Das heißt wenn da nen String gesendet wird steht da z.B.: 29ABC Aber warum meinst du, dass da ein Stream gesendet wird? Glaub es dir ja aber wie kommst du darauf? |
Re: Wie auf record schließen?
Aaalso:
1. Wenn da ein String mit der Länge 150 gesendet wird, sieht das ganze so aus: "-abcdef..." Wenn du dir "-" im Hex-Editor anschaust wirst du feststellen, dass es 150 als ord(-) ergibt. Und warum ich tippe, dass es ein Stream ist? Nun, weil jeder Datenverkehr als Stream ebtrachtet werden kann, ein Gespräch kann man als Stream sehen, ein Bild, Netztwerkverkehr etc. Es muss ja hier etwas in einer bestimmten Reihenfolge übertragen werden, das heisst wir haben einen Datenstrom (den du aufgefangen hast), und den können wir dann auch so interperetieren, nämlich Byte für Byte, bzw. als Grupee von Items, aus denen er zusammengesetzt wurde. mfG Markus EDIT: Wenn du dir mal das "Kästchen" vor jedem String im Hex-Editor betrachtest, stellst du fest, dass der Byte-Wert der Länge des Strings entspricht. Mit den übrigen Zwischenräumen und Kästchen kann ich aber nichts anfangen, das ist dein Job. EDIT2: Für das Reverse-Engeneering wäre es sinnvoll, zu wissen, welche Daten übertragen werden, wenn du mehrere Vergleichsdatensätze auffängst, dann lassen sich nämlich gewisse Muster herauslesen. |
Re: Wie auf record schließen?
Ho,
Ich hab mal ein Programm geschrieben in dem ich aus einer Datei Recors via Stream auslesen wollte. Ich wuste wie das Record aussah das reingeschrieben wurde. Also dachte ich das ist ganz einfach . Nach ettliche Versuchen muste ich feststellen das da serh wohl unterschiede sind. Wenn ich also Deklariere.
Delphi-Quellcode:
dann habe ich genau 3 verschiedene varianten von Records obwohl die alle das gleiche beinhalten.
Type
Bla = Record x,y,z : Integer; data : Byte; end; Bla1 = Record x:Integer; y:integer; z:Integer; data:Byte; end; Bla2 = Record data : Byte; x,y,z : Integer; end; Übrigens die 2. Variante war die einzige die ging. |
Re: Wie auf record schließen?
so, ich denke ich habe jetzt alle Sachen bis auf 3/2 herausbekommen:
In dem Connect Dialog gibt es einmal 2 Radiobuttons und ne Checkbox, bei der checkbox denk ich mal es wir ein Boolean sein, bei den 2 Radioboxen könnte es auch oder eben nen Integer vllt. So sieht der hex Code aus in allen zuständen:
Delphi-Quellcode:
Checkbox = true
Radiobutton 1 E1 A3 24 FD ---------- Checkbox = true Radiobutton 2 94 0D F2 D3 ---------- Checkbox = false Radiobutton 1 D0 80 3E ED ---------- Checkbox = false Radiobutton 2 A5 2E E8 C3 Das ist jeweils der Hexcode der sich ändert aber der sagt mir nicht wirklich was, müsste ich nicht z.B. eine Gemeinsamkeit beim 1 und 2 feststellen? Da dort jeweil die Checkbox auf true steht? EDIT: Hab was übersehn, das da oben gibt wohl nicht den Status der boxen an hab noch was anderes übersehn, da ist mittendrinn noch immer nen block wo: 01 01 oder 01 02 oder 00 01 oder 00 02 denke mal der 1. block ist die checkbox und die andere der Radiobutton, aber mit welchen typ wird der Radiobutton übergeben? byte? Aber nichts desto trotz die anderen Werte ändern sich auch immer nur wenn ich die boxen ändern, was können die bedeuten? |
Re: Wie auf record schließen?
Hab noch nen problem, wenn ich nen Record habe mit nem String und den beispielsweise mit write() in eine Datei schreibe kommt hinterher im hexeditor folgendes:
Delphi-Quellcode:
So kommt es raus:
00000000h: 09 54 65 61 6D 53 70 65 61 6B 00 00 00 00 00 00 ; .TeamSpeak...... 00000010h: F0 FD 12 00 A8 05 D2 77 BC 84 D1 77 C8 ; ðý..¨.Òw¼„ÑwÈ Aber warum sind da noch so viel andere Sachen müsse es nicht so aussehen: 00000000h: 09 54 65 61 6D 53 70 65 61 6B 00 00 00 00 00 00 ; .TeamSpeak...... 00000010h: 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ............. Im record steht ein string[29] an der Stelle wenn ich es mit einen array[0..28] of char mache dann sieht es so aus wie das 2. nur eben ohne die Längenangabe ganz am Anfang. Also warum schreibt delphi in den Reststring noch so viel Müll rein? Bzw. Wie schaff ich es, dass es dass nicht tut? Hab es jetzt mal über den umweg über einen Pointer reingeschrieben, dann erhalte ich folgendes:
Delphi-Quellcode:
Delphi scheint wohl noch ne Textart mitzuliefern?
00000000h: 09 54 65 61 6D 53 70 65 61 6B 00 00 0D 00 00 00 ; .TeamSpeak......
00000010h: 4D 53 20 53 61 6E 73 20 53 65 72 69 66 ; MS Sans Serif |
Re: Wie auf record schließen?
Zitat:
|
Re: Wie auf record schließen?
Genau was ich sagte, aber zu Eichörnchen Problem: Du musst den String vorher leeren, ich habe keine Ahnung ob es dafür eine Funktion gibt, aber im Zweifelsfalle, mach dich einfach mit einer Schleife den String erstmal mit Leerzeichen voll.
mfG Markus |
Re: Wie auf record schließen?
hmm das Problem tritt nur auf wenn ich es aus einer VCL Form raus in die Datei rein schriebe bei einer Konsolenanwendung sieht es richtig aus.
Ich hänge aber immer noch etwas in der 1. Datei die ich oben angehängt habe sind die ersten 3 Bytes die Folgenden:
Delphi-Quellcode:
aber was bedeutet das?
F4 BE 03
F4 ist ja 244 also hab ich an nen shortstring gedacht aber das kann ja nicht sein, das ganze Paket hat ja nur 180 byte BE ist 190 naja das sagt mir mal gar nix 03 ist 3 und naja toll ... Weiter im Text kommt nur noch ne 01 und dann noch die Bytes die sich immer ändern wenn ich die Checkboxen änder, die aber nicht deren Wert angeben. Und später mitten drinn kommen noch mal nen paar konstante Byte wofür die stehen weiß ich noch nicht, aber die ändern sich wenigstens net egal wie ich es einstelle. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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