AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie auf record schließen?

Ein Thema von Eichhoernchen · begonnen am 30. Mär 2006 · letzter Beitrag vom 31. Mär 2006
Antwort Antwort
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#1

Wie auf record schließen?

  Alt 30. Mär 2006, 14:11
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:
type TLogininfo = record
                   Name, Passwort : string[29];
                   Alter : integer;
                  end;

type TLogininfo = record
                   Alter : integer;
                   Passwort, Name : string[29];
                  end;
Jetzt hab ich 2 Records die die selben Werte fassen können aber anders aufgebaut sind, macht das einen Unterschied?




Danke schonmal Eichhoernchen
Angehängte Dateien
Dateityp: txt ts_208.txt (180 Bytes, 26x aufgerufen)
Jan
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#2

Re: Wie auf record schließen?

  Alt 30. Mär 2006, 14:52
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
Markus
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Wie auf record schließen?

  Alt 30. Mär 2006, 15:04
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?
Jan
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#4

Re: Wie auf record schließen?

  Alt 30. Mär 2006, 15:35
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.
Markus
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Wie auf record schließen?

  Alt 30. Mär 2006, 16:27
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:
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;
dann habe ich genau 3 verschiedene varianten von Records obwohl die alle das gleiche beinhalten.

Übrigens die 2. Variante war die einzige die ging.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Wie auf record schließen?

  Alt 30. Mär 2006, 17:31
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?
Jan
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Wie auf record schließen?

  Alt 31. Mär 2006, 09:04
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:
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
Delphi scheint wohl noch ne Textart mitzuliefern?
Jan
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Wie auf record schließen?

  Alt 31. Mär 2006, 09:12
Zitat von Corpsman:
Wenn ich also Deklariere.

Delphi-Quellcode:
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;
dann habe ich genau 3 verschiedene varianten von Records obwohl die alle das gleiche beinhalten.
Bla und Bla1 müssen identisch sein. Es ist lediglich eine andwere Schreibweise, die den Code aber in keinster Weise beeinflusst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#9

Re: Wie auf record schließen?

  Alt 31. Mär 2006, 09:46
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
Markus
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Wie auf record schließen?

  Alt 31. Mär 2006, 09:59
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:
F4 BE 03 aber was bedeutet das?
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.
Jan
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz