![]() |
Re: LAN-Anbindung
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Du musst Wincap auch installieren, sollte bei der Programminstallation mitinstalliert werden. Meines wissens, erscheint da ein separater Dialog wenn der Wincap Treiber zu installieren ist. Schau nochmals auf Sourceforge ob Du auch die Vollinstall gesaugt hast. Du kannst natürlich auch einen anderen Networksniffer verwenden, Packetyzer ist aber mein Favorit. Zitat:
Reiter Connections, die betreffende Verbindung auswählen, und mit Show Packets und oder mit Analyze TCP Flow, die Ergebnisse uns mitteilen. Anbei gleich mal ein Server, an dem Du die zu empfangenden Pakete schon mal im Debuger ansehen kannst. Du musst nur den Listening Port anpassen, und wenn die Kommunikation von Deiner Hardware TCP ist, dann siehst Du schon mal was bei einem Verbindungsaufbau passiert. Sourcen musst Du natürlich an die Gegebenheiten eventuell leicht anpassen. lg. Astat |
Re: LAN-Anbindung
Liste der Anhänge anzeigen (Anzahl: 1)
So,
hat bis jetzt wunderbar geklappt. Hier mal das Ergebniss. Ich habe die Datei Decode.Cap in die Decode.Cap umbenannt. Gruß Jens |
Re: LAN-Anbindung
Ja, sollte kein Problem sein.
Der Header ist so aufgebaut: 4Byte Längenangabe + 13 Byte Daten:
Delphi-Quellcode:
Also starte den Testserver (Port kann als Start-Parameter übergeben werden), und(** Request - Response (6 x Requests + Response) 00 00 00 0D C1 92 BD 73 2A BE 2E 47 24 F3 03 01 00 00 00 0D 2E 47 24 F3 2A BD C1 92 BD 74 03 01 00 00 00 0D C1 92 BD 74 2A BC 2E 47 24 F4 03 01 00 00 00 0D 2E 47 24 F4 2A BB C1 92 BD 75 03 01 00 00 00 0D C1 92 BD 75 2A BA 2E 47 24 F5 03 01 00 00 00 0D 2E 47 24 F5 2A B9 C1 92 BD 76 03 01 00 00 00 0D C1 92 BD 76 2A B8 2E 47 24 F6 03 01 00 00 00 0D 2E 47 24 F6 2A B7 C1 92 BD 77 03 01 00 00 00 0D C1 92 BD 77 2A B6 2E 47 24 F7 03 01 00 00 00 0D 2E 47 24 F7 2A B5 C1 92 BD 78 03 01 00 00 00 0D C1 92 BD 78 2A B4 2E 47 24 F8 03 01 00 00 00 0D 2E 47 24 F8 2A B3 C1 92 BD 79 03 01 Alle Requests sortiert 00 00 00 0D C1 92 BD 73 2A BE 2E 47 24 F3 03 01 00 00 00 0D C1 92 BD 74 2A BC 2E 47 24 F4 03 01 00 00 00 0D C1 92 BD 75 2A BA 2E 47 24 F5 03 01 00 00 00 0D C1 92 BD 76 2A B8 2E 47 24 F6 03 01 00 00 00 0D C1 92 BD 77 2A B6 2E 47 24 F7 03 01 00 00 00 0D C1 92 BD 78 2A B4 2E 47 24 F8 03 01 Alle Responses sortiert 00 00 00 0D 2E 47 24 F3 2A BD C1 92 BD 74 03 01 00 00 00 0D 2E 47 24 F4 2A BB C1 92 BD 75 03 01 00 00 00 0D 2E 47 24 F5 2A B9 C1 92 BD 76 03 01 00 00 00 0D 2E 47 24 F6 2A B7 C1 92 BD 77 03 01 00 00 00 0D 2E 47 24 F7 2A B5 C1 92 BD 78 03 01 00 00 00 0D 2E 47 24 F8 2A B3 C1 92 BD 79 03 01 **) //--Headeraufbau type TDataRec = packed record cbData : integer; Data1 : DWORD; Data2 : DWORD; Data3 : DWORD; end; //-- Beispiel für Datenaufbereitung (Serverapplikation verwenden) var DataRec: TDataRec; Buffer: array of Byte; .... //-- Im Socket Empfangsbuffer werden die 17 Bytes abgelegt. cbRcv := Recv(ClientSocket, Buffer[cb], 32768, 0); //-- Daten in die record struct schreiben move(Buffer, DataRec, SizeOf(TDataRec)); //-- NetworkByteOrder DataRec.cbData := ntohl(DataRec.cbData); DataRec.Data1 := ntohl(DataRec.Data1); DataRec.Data2 := ntohl(DataRec.Data2); DataRec.Data3 := ntohl(DataRec.Data3); Debug alles durch ob der Header so passt, und du die erwarteten Daten bekommst. Eventuell musst du noch ein Paar Bytes offsetten, aber Du kennst ja am ehesten die Daten, die du erwartest. Einfach mal durchprobieren wenns nicht gleich geht, gibt ja nicht viele Möglichkeiten, bei so konstanter flacher Headerstruktur. Guten Rutsch, ich geh jetzt FEIERN!! lg. Astat |
Re: LAN-Anbindung
Danke erstmal für die Hilfe,
ich denke ich gehe jetzt auch erstmal feiern um einen klaren Kopf zu bekommen. Irgendwie versteh ich das noch nicht so ganz. Aber vieleicht ist morgen ja besser. Also, erst nochmal danke und auch einen guten Rutsch. Gruß Jens |
Re: LAN-Anbindung
Also,
ich habe mich jetzt den ganzen Nachmittag damit versucht zu beschäftigen. Leider ohne Erfolg. Ich weiß echt nicht wie ich das machen soll. Ich finde noch nicht mal einen Anfang. Vieleicht ist das doch noch eine Nummer zu Groß für mich. Trotzallem, würde ich mich freuen, wenn Du mir das eventuell nochmal erklären könntest. Gruß Jens |
Re: LAN-Anbindung
Zitat:
1. Du hast eine Hardware, die mit einer Server-Software eine TCP/IP Socket Verbindung, zwecks Messdatenübermittlung unterhält. 2. Du möchtest herausfinden, wie das Protokoll zwischen Hardware und Server-Software aussieht, um im Endeffekt einen eigenen Software Server nachzubauen. Was ist bisher bekannt? 1. Das Protokoll und der Datentransport über Socket Das Protokoll besteht aus: 4 Byte Längenangabe + 13 Byte Daten Das ist einfach so zu verstehen, dass 17 Byte Daten von deiner Hardware, in den Empfangsbuffer des Socket geschrieben werden.
Delphi-Quellcode:
cbRcv := Recv(ClientSocket, Buffer[cb], 32768, 0);
Weitere Vorgehensweise. 1. Du brauchst erstmals einen Server 2. Wie kann man nun auf die Längeninformationen die in den ersten 4 Byte des Header enthalten sind zugreifen. 3. Wie sind die restlichen 13 Byte Daten im Header aufgebaut, und wie kann man darauf zugreifen? Also gehen wir dies mal der Reihe nach durch. Punkt 1. Du brauchst erstmals einen Server. Wenn du gut in Socket API Programmierung eingearbeitet bist, kein Problem für Dich. Wenn nicht, verwende den Server den ich Dir upgeloaded habe, dort sind nur recv und send für Dich interessant (Debug Breakpont). Grundzüge der Socket API Programmierung sollten vorhanden sein, send, recv, select und Network Byte Order. Socket API desshalb, weil für die Datenanalyse (13 Byte und Handshake = send) die API geeigneter ist, als eine Komponente. Wenn Du genau die Internas einer Server-Komponente kennst, kannst Du natürlich auch diese verwenden. Punkt 2. Wie kann man nun auf die Längeninformationen die in den ersten 4 Byte des Header enthalten sind zugreifen. Da die Längeninformation in den ersten 4 Byte des Empfangsbuffers "Buffer" enthalten sind, einfach die ersten 4 Byte in eine 4 Byte Variable (integer) kopieren.
Delphi-Quellcode:
danach mit ntohl (TCP/IP network order to host byte order) in die Längeninfo umwandeln.
move(Buffer, IntegerVariable, SizeOf(Integer));
Auf Punkt 3. Wie sind die restlichen 13 Byte Daten im Header aufgebaut, und wie kann man darauf zugreifen? möchte ich erst dann genauer eingehen, wenn du Punkt 1 + 2 (Server + Längeninformationen) hast. lg. Astat |
Re: LAN-Anbindung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Astat,
erstmal ganz großes Danke für die Erklärung. Ich glaube sogar, das ich das soweit verstanden habe. Ich habe mich jetzt mal mit den API Befehlen und mit deinem Server Programm versucht zu beschäftigen. Alles soweit verständlich. Allerdings habe ich noch zwei fragen. 1. Wenn ich dein Server Programm starte und die Breakpoints an den entsprechenden Stellen setzte, passiert erstmal gar nichts. Dann habe ich mir mal die Sachen im Form.Create angesehen.
Delphi-Quellcode:
Jetzt meine Frage, muss ich jetzt irgendwie Daten senden, um welche empfange zu können. Oder muss eine Verbindung des Original Programms bestehen und ich lausch sozusagenmit.
InitializeCriticalSection(_SocketLock);
_wnd := handle; _bOnlyAccept := Pos('ONLYACCEPT', cmdline) <> 0; _Port := 8016; if ParamCount > 0 then begin {$R+}{$Q+} try _Port := 8016;//StrToInt(ParamStr(1)); Habe ich wegen Fehlermeldung raus Kommentiert. Und den Port hier auch auf 8016 //gesetzt. //Wenn ich es richtig verstanden habe, muss hier der PORT für die Verbindung zur Hardware rein,der normal // über einen Parameter der EXE gesetzt werden kann Programm.exe 8016 oder so //Im Anhang habe ich mal einen Screenshot der Eigenschaften der Hardware except _Port := 8016; end; {$R-}{$Q-} end; Ist es relevant, wie ich im Netzwerk hänge. Mein Heimnetzwerk, ist über einen W-LAN Router aufgebaut. Und zwar in folgender Art & Weise... Laptop mit Windows Vista über W-LAN -> Fritz-WLAN-Router -> Einbruchmeldeanlage über LAN-Anschluss direkt am Router Danke nochmal, macht echt trotz schwierigkeiten voll Spass das hier zu tüfteln. [EDIT] Anhang eingefügt. Sorry. Gruß Jens |
Re: LAN-Anbindung
Zitat:
Zitat:
Zitat:
verbindet. Teste das mal durch, und finde bitte heraus, wer nun wirklich der Client und der Server ist? lg. Astat |
Re: LAN-Anbindung
Also
die Hardware ist eine Einbruchmeldeanlage, auf die ich mich einloggen muss. Und zwar gibt es dafür zwei Varianten. Die 1. Ist die Konfigurationssoftware der Zentrale. In dieser sage ich Verbindung herstellen, wie im Screenshot von meinem letzten Beitrag. Die 2. Ist ein Managmentsystem, über welches ich mir an einem PC die Zuständen der Zentrale ansehen kann. Auch hier, wird beim Start der Software eine Verbindung zur Zentrale aufgebaut. Steht diese Verbindung, wird von der Zentrale kontinuierlich gesendet, und von der Software empfangen. Screenshot hier Einstellung Port 8015 (Bedarfsgesteuert) Bedarfsgesteuert bedeutet in diesem Fall, das wenn eine Ereigniss auftritt, diese über TCP/IP versendet wird. Also, müsste ja meine Software der Server und meine Hardware der Client sein. Gruß Jens |
Re: LAN-Anbindung
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Anbei ein Client, zum testen. Versuch mal damit eine Verbindung und ein Logon zu bekommen. lg. Astat |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 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