2009-04-29 12 views
0

Ist es möglich, eingehende Nachrichten mit Indy zu emulieren (wenn es von Bedeutung ist: Ich verwende Indy 10 und Delphi 2009)? Ich möchte in der Lage sein, diese Nachrichten lokal zu erstellen, und ich möchte, dass Indy glaubt, dass sie von bestimmten Clients im Netzwerk kommen. Die gesamte interne Indy-Behandlung (Auswahl des Threads, in dem die Nachricht empfangen wird und solche Sachen) sollte genau so sein, als wäre die Nachricht über das Netzwerk angekommen.Emulieren eingehende Netzwerknachrichten für Indy

Irgendwelche Ideen dazu? Vielen Dank im Voraus für irgendwelche Tipps.

Antwort

5

Was Sie tun wollen, hat nichts mit Indy zu tun, da Sie dies auf einer viel niedrigeren Ebene tun müssten. Der einfachste Weg, Indy glauben zu machen, dass Nachrichten von einem bestimmten Client stammen, besteht darin, richtig vorbereitete Pakete in den Netzwerkstapel zu injizieren. Lesen Sie TCP Packet Injection auf Google oder Wikipedia. EtterCap ist ein solches Tool, mit dem Pakete in etablierte Verbindungen injiziert werden können. Dies geht jedoch definitiv in Grauzonen, da einige Tools in einigen Ländern illegal sind.

Wie auch immer, all das ist IMHO viel zu kompliziert. Ich weiß nicht, was genau Sie tun möchten, aber ein speziell vorbereiteter Client oder Server ist ein viel besseres Werkzeug, um ein bestimmtes Verhalten bei der Entwicklung von Server- oder Client-Anwendungen zu emulieren. Sie können sie lokal ausführen, oder wenn Sie unterschiedliche IP-Adressen oder Subnetze benötigen, können Sie viel mit virtuellen Maschinen tun.

+1

+1 wie üblich, gute Antwort! Schlechte Nachrichten für mich aber :( – jpfollenius

0

Indy hat keine eingebauten Mechanismen, aber ich denke, von ganzem Herzen würde ich empfehlen, eine kleine Testanwendung (oder eine Suite) aufzubauen, die lokal auf Ihrem Entwicklungscomputer läuft und eine Verbindung zu Ihrem Indy-Server herstellt Anwendung zur Wiedergabe von Nachrichten.

Es sollte für Ihre Indy-Server-Anwendungen irrelevant sein, ob eine TCP-Verbindung entweder lokal oder von einem Remote-Host hergestellt wird, da die Mechanismen, mit denen ein Server-Thread erstellt und ein Befehl verarbeitet wird, mit beiden Szenarien identisch sind.

Mein letzter Auftritt beinhaltete die Verwendung von Indy und alle unsere Tests wurden mit einer ähnlichen Anwendung des Resender-Typs durchgeführt, die lokale Nachrichtendateien laden und diese an die Indy-Server-App senden würde.

HTH und viel Glück!

+0

ABER: Indy wird dann die IP-Adresse und die Portnummer der lokal laufenden Anwendung abrufen und die Verarbeitung der eingehenden Nachricht wird in einem zusätzlichen Listener-Thread ausgeführt, der für diese Verbindung erstellt wurde. Es hat nicht den gleichen Effekt wie ein anderer Client, der die Nachricht sendet. Aber danke für die Antwort trotzdem! – jpfollenius

+0

Ich finde Ihren Kommentar etwas verwirrend, da Indy einen neuen Listener-Thread für jede eingehende Verbindung erstellt, sei es lokal oder remote. Ich nehme an, dass Sie TIDTCPServer verwenden und Ihre Befehlshandler definiert haben. TidTCPServer erstellt einen neuen Thread einer neuen Verbindung und verarbeitet die Befehlshandler im Kontext des neu erstellten Threads. – Nazar

+0

Genau! Und ich möchte, dass ein Befehl in einem Client-spezifischen Listener-Thread ausgeführt wird, ohne dass der Client eine Nachricht senden muss. Verstehen? – jpfollenius

0

Eine Sache, die Sie tun können, wäre virtuelle Maschinen zum Ausführen Ihrer Test-Clients zu erstellen, auf diese Weise werden sie nicht als "lokale Maschine" betrachtet, und es ist ziemlich einfach, ein komplexes Netzwerk mit VMS zu erstellen - vorausgesetzt, Sie haben genug Speicherplatz und Speicherplatz. Der andere Vorteil des Testens mit VMs besteht darin, dass Sie die Entwicklungsumgebung vollständig eliminieren können, wenn Sie sich auf die Bereitstellung konzentrieren möchten. Erstaunlich, wie viel Zeit das alleine spart.

VirtualPC ist ein kostenloser Download von Microsoft und funktioniert ziemlich gut. VMWare hat eine andere Option, kostet aber ein wenig mehr, um loszulegen. Für Entwicklungszwecke bevorzuge ich die Desktop-Versionen, aber die Server-Versionen funktionieren auch gut. Sie benötigen weiterhin eine Lizenz zum Installieren des virtuellen Betriebssystems. MSDN Mitgliedschaft ist wahrscheinlich der billigste Weg zu gehen, und ermöglicht es Ihnen, Testumgebungen für andere Aromen des Betriebssystems zu erstellen.

+0

VMWare Server ist kostenlos, ist auch VMWare ESXi und Sun VirtualBox – mjn

0

Indy hat einen abstrakten Stack-Mechanismus für Crossplatform-Unterstützung (IDStack.pas) Ich denke, Sie können den Stack für Windows (IdStackWindows.pas) hacken. Es ist eine Klasse. U kann sogar in Betracht ziehen, es zu derivatisieren und einige Funktionen zu überschreiben, um den Hack zu machen.