Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Netzwerk mit Delphi (https://www.delphipraxis.net/1124-netzwerk-mit-delphi.html)

doc 21. Okt 2002 19:17


Netzwerk mit Delphi
 
HI

Ich hab folgendes Problem:
Eine Delphi 5-Anwendung soll ein auf einem anderen PC installiertes Program aufrufen (also auf dem anderen PC starten), auf dass das Programm dann eine bestimmte Meldung zurückgibt, die auch an meinen PC verschickt wird.

Ist des irgendwie möglich? (Eigentlich eine doofe Frage denn bei dem tausenden Trojanern, die es gibt, muss des einfach funzen)

Und wenn JA: wie? ?:


MfG doc

----
PS: Sch**** habs ins falsche Forum gepostet ( :oops: ; könnte des ein Mod verschieben, wenns net zu viel ausmacht?)

[edit=FuckRacism]Verschoben in Inet; Hast es ja selber schon bemerkt :wink: [/edit]

RomanK 21. Okt 2002 19:28

Hi
also eine Anwendung auf einem Anderen PC zu starten ist meineswissens nicht möglich ... aber wenn das Program schon installiert ist könntest du doch einfach im Hintergrund auf den Befehl per TCP/IP warten und dann wir das proggy aktiv! Und die Message zurück zu deinem PC kannst du dann ja auch wieder per TCP/IP machen

Falls ich mich irre, von wegen starten auf anderem PC, dann belehrt mich eines besseren!! :oops:

d3g 21. Okt 2002 20:25

Hi doc,

es ist einfach so nicht möglich, dass ein Programm auf einem anderem Rechner zu starten. Das Prinzip eines Trojaners ist, dass er aus zwei Teilen beteht: der Server läuft auf dem Rechner, wo das Programm ausgeführt wird und der Client, der den Befehl zum Ausführen schickt.

Du müsstest also ein zweites Programm schreiben, dass auf dem Zielrechner als Server fungiert. Wenn es z.B. einen String 'exec AnExecutable.exe' zugeschickt bekommt, dann startet es ShellExecute oder CreateProcess oder was auch immer und erhält den Rückgabewert, den du haben willst. Daraufhin sendet der Server wieder an den Client einen String, z.B. 'return exec AnExecutable.exe 1234567890'. Der wertet das dann aus.

MfG,
d3g

doc 21. Okt 2002 20:54

des triffts ziemlich genau.

ich will zu einem programm des auf dem anderen rechner installiert ist und des aktiv ist, Verbindung aufnehmen, und des irgendein anderes Programm starten lassen,

Die Frage ist: Wie kann ich des Quellcodmäßig machen (des Prinzip hab ich ja)

MfG doc und danke für die schnellen Antwworten

Thurgen 21. Okt 2002 23:34

hm mit VB habe ich sowas mal mit der winsock komponente gemacht, allerdings konnte ich diese jetzt auf die schnelle unter delphi 5 nicht finden. Mit VB waren das nur wenige zeilen code solange du nur UDP und nicht TCP benutzt. Allerdings ist das nicht ganz ohne was du vorhast. Sowas kann schnell als trojaner enden und fals eine Firewall vorhanden ist wird dein Programm nicht laufen wenn du den Port den du benutzten willst nicht vorher von der Firewall freigeschalted wird

Thurgen 22. Okt 2002 00:15

glaube mit delphi funktioniert das so :)

http://www.tipps.delphi-source.de/LA...020914-1.shtml

Daniel 22. Okt 2002 08:08

Hallo,

das Starten eines Programmes auf einem anderen Rechner demonstriert u.A. eine Anwendung von Sysinternals: psExec.
Der Austausch von Daten wiederum ist eine andere Angelegenheit :-) - dies wird ja zum Beispiel in dem von Thurgen zizierten Link bechrieben.

doc 23. Okt 2002 20:54

Liste der Anhänge anzeigen (Anzahl: 1)
Hi
Ich hab des jetzt mit dem Verbinden übers Netzwerk probiert, aber nach kurzem kommt ne Fehlermeldung (s.h. Bild.) und ich hab keine Ahnung woran des liegen könnte (wahrscheinlich mach ich grad einen typischen Anfängerfehler auf dem Gebiet aber sei´s drum...)

Des mit dem psexec probier ich auch noch, aber erst muss ich mal ne gescheite netzwerkverbindung herstellen...

MfG doc

Ach übrigens: Ich hab noch gar nicht gesagtm, wozu ich des programm verwenden will, wenns fertig ist...
Des soll mal sowas wie ein Netzwerk-Scanner werden, also kein Port-Scanner, sondern ein Programm, das den Scanner auf dem anderen Pc "bedient" und die Bilddateien gleich auf meinen Pc transferiert.

PPS: Ich aberbeite mit Windows ME........

Christian Seehase 23. Okt 2002 21:37

Moin Doc,

Fehler 11001 besagt:

WSAHOST_NOT_FOUND

Mit anderen Worten:
Der angegebene Host ist unbekannt. (Originalmeldung von Windows (2000))

Wie sprichst Du denn den Rechner an?

Christian Seehase 23. Okt 2002 21:46

Moin Thurgen,

ich hab' mir mal Dein Tut angesehen:
Es wäre besser das deaktivieren der Sockets jeweils im OnDestroy zu machen, da das OnClose nicht immer aufgerufen wird (z.B. bei Application.Terminate)

doc 24. Okt 2002 15:28

Hi Christian

Na ich nehm einfach die IP im Netzwerk (in meinem Fall "192.168.0.1" die stimmt au)

Des müsste duoch eigentlich gehen aber ich kanns auch mal über die Internet IP versuchen. das Dumme ist nur, die ändert sich dauernd...
... :coder:...
:cry: geht au net(wär aber auch doof gewesen...)

Ich hab grad wirklich keinen Plan, woran des liegen könnte :( .

MfG doc

---
Danke für die Hilfe!!!

Salomon 24. Okt 2002 15:33

Hi doc,
zum testen eines Netzwerk Programmes würde ich den Client und den Server auf einem Rechner ausführen.

Die IP des Rechners ist dann immer "localhost" also 127.0.0.1

Mfg Salomon

Christian Seehase 24. Okt 2002 15:45

Moin Zusammen,

ja, die 127.0.0.1 ist die Loopback Adresse.
Wenn man Client und Server lokal testet, geht's allerdings auch mit der "normalen" IP-Adresse, oder, so man eine Namensauflösung eingerichtet hat, auch mit dem Namen des Rechners.
(Zumindest bei der Verwendung von TClientSocket/TServerSocket).

doc 25. Okt 2002 11:45

Mit 127.0.0.1 gehts aber eben net mit sowas wie 192.168.0.1 (o.ä.).....


MfG doc

Christian Seehase 25. Okt 2002 11:55

Moin Doc,

also bei mir geht's mit einer nicht öffentlichen Adresse.
Könnte daran liegen, dass Du 192.168.0.1 hast. Wenn es geht, versuch's mal mit 192.168.1.1

doc 25. Okt 2002 16:42

Kann ich probieren aber:
Ne andere Möglichkeit wär mir lieber, da ich sonst unser gesamtes Netzwerk umkrempeln müsste.Und:
127.0.0.1 hat auch Nullen...


Über andere Möglichkeiten "wär ich also erfreut".

MfG doc

Hansa 25. Okt 2002 16:52

Hi,

Zitat:

192.168.0.1
Dort ungefähr fangen die, wie Christian Seehase schreibt, "öffentlichen Adressen" an. Aber er hat nicht so geschrieben, daß es verständlich ist. :spin:

Gruß
Hansa

doc 25. Okt 2002 17:00

:shock:
Du aber au net (auf jeden Fall kapier ich net so richtig, was du meinst...

MfG doc

Hansa 25. Okt 2002 17:36

Hi,

wird bei Dir eigentlich automatisch eine IP-Adresse vergeben oder nicht ? Da würde ich mal anfangen zu suchen. Die 192.168....er IP-Adressen dienen dazu, diese MANUELL einzutragen !!

Gruß
Hansa

doc 25. Okt 2002 20:47

Nene die lokal. Netzwerk 192.168.... hab ich schon manuell eingetragen...

Die Internet IP´s sind nat. dynamisch.

MfG doc

Christian Seehase 25. Okt 2002 20:51

Moin Hansa,

Zitat:

Zitat von Hansa
Die 192.168....er IP-Adressen dienen dazu, diese MANUELL einzutragen !!

Wieso das?
Das zeigt nur ein Class C Netz mit privaten Adressen an.
Ob ich die nun per DHCP verteile oder statisch spielt dabei doch keine Rolle.

Jan 26. Okt 2002 01:52

Hi Ihr alle!
Also ich hab mal das Tut ausprobiert, welches hier in diesem Thread gelinkt wurde, und das hat auch alles einwandfrei geklappt, auch über LAN, nicht nur über localhost.
Jetzt hab ich also so ne kleine Anwendung geschrieben und hab eine simple Frage:
1. ich möchte nicht, dass die ip fest im Programm verankert ist, weil ich dann jedesmal, wenn sich die ip vom server ändert auch die ip umprogrammieren muss => umständlich. Jetzt habe ich natürlich schon statt einem fest einprogrammierten Wert eine text-input-zeile gemacht, und das klappt auch wunderbar, ABER! ich möchte, dass das Programm bei einer falsch eingegebenen IP, oder einem fehlgeschlagenen Connect-Versuch eine showmessage ausgibt, anstatt zu siffen, so dass man es erneut Probieren kann. Ich hab das dann mal mit try/except versucht, das Problem ist nur, dass das nicht funkioniert, weil die Anweisungen alle durchgeführt werden, während versucht wird die Verbindung aufzubauen, welches bedeutet, dass die Verbindung keinen Einfluss auf try/except hat.

Jan 26. Okt 2002 02:01

Weiteres Problem:
Für die Kommunikation zwischen den Programmen im Dialog, nicht nur im Monolog ist es ja auch von Nöten, dass ich vom server aus Daten an den Client schicke, was ja einfach wäre, wenn ich mit festen IPs arbeiten würde. Was ich mir vorstelle ist ein Tool, was gleichzeitig server und client ist und seine eigene ip beim connecten mitschickt. D.h. dass auf dem anderen PC auch das Tool läuft, ich schicke an dieses Tool meine eigene ip und baue eine Verbindung auf, woraufhin das Tool auf dem anderen PC eine Verbindung zu mir aufbaut.
So, 1.: Geht das?
2.: Wie geht es?
3.: Ist das sinnvoll, oder geht es besser?
4.: Wie lese ich meine IP aus?
Gruss
Jan

Luckie 26. Okt 2002 05:43

Hier beschreibt Mathias Simmack, wie man das IP-Adress-Eingebefeld benutz:
http://www.auq.de/viewtopic.php?t=25...ght=ip+control
Dann brauchst du dich schon mal nicht um die Kontrolle der Eingabe zu kümmern.

Salomon 26. Okt 2002 08:53

zu Punkt 4. Deine momentane Internet IP liest du so aus:

Code:
function GetLocalIPs: String;
type PPInAddr= ^PInAddr;
var wsaData : TWSAData;
HostInfo : PHostEnt;
HostName : Array[0..255] of Char;
Addr    : PPInAddr;

begin
if WSAStartup($0102, wsaData) <> 0 then Exit;
try if GetHostName(HostName, SizeOf(HostName)) <> 0 then
begin
result:='';
Exit;
end;
HostInfo:= GetHostByName(HostName);
if HostInfo=nil then
begin
result:='';
Exit;
end;
Addr:=Pointer(HostInfo^.h_addr_list);
if (Addr=nil) or (Addr^=nil) then
begin
result:='';
Exit;
end;
if not (copy(strpas(inet_ntoa(addr^^)),1,7) = '192.168') then
begin
  result:=StrPas(inet_ntoa(Addr^^));
  inc(Addr);
end
 else
   begin
   inc(addr);
   while Addr^ <> nil do
     begin
       result:=StrPas(inet_ntoa(Addr^^));
      inc(Addr);
     end;
   end;
finally WSACleanup;
end;
end;
Mfg Salomon

Jan 26. Okt 2002 13:27

Guten Tag,
@luckie: Das ist ja schön und gut, aber ist eigentlich nicht was ich suche, denn ob die ip Addresse von der Grammattik her richtig eingegeben ist garantiert ja noch lange nicht, dass es unter der ip auch einen server zu finden gibt, daher wollte ich das einfach so machen: der client probiert einfach aus, was immer er eingegeben bekommt, egal ob das nun eine ip Addresse ist, oder nicht, und checkt, ob er unter dem string zu einem server conn. kann, wenn nicht so gibt er eine "Connection failed" message aus.

@Salomon thx, ist ja ne Menge aufwendiger als ich gedacht hätte, gleich mal ausprobieren.

thx
Jan

doc 26. Okt 2002 14:04

@ Jan
Was für ne IP hast du denn in deinem Lokalen Netzwerk (um auf Christian´s Posting zurücktzukommen)?

MfG doc

Luckie 26. Okt 2002 14:17

Zitat:

Zitat von Jan
@luckie: Das ist ja schön und gut, aber ist eigentlich nicht was ich suche, denn ob die ip Addresse von der Grammattik her richtig eingegeben ist garantiert ja noch lange nicht, dass es unter der ip auch einen server zu finden gibt, daher wollte ich das einfach so machen: der client probiert einfach aus, was immer er eingegeben bekommt, egal ob das nun eine ip Addresse ist, oder nicht, und checkt, ob er unter dem string zu einem server conn. kann, wenn nicht so gibt er eine "Connection failed" message aus.

Aber es reduziert doch schon mal die Fehlerquelle oder?

Dann sende doch einen Ping an die Adresse. Wenn was zurückkommt, dann kanst du weitermachen im Text. Ansonsten brichst du ab.

Christian Seehase 26. Okt 2002 16:11

Moin Zusammen,

da man ja als Host auch den Rechnernamen angeben kann (entsprechende Namensauflösung über DNS Server oder LMHOST/HOSTS vorausgesetzt) könnte man auch an zwei Eingabefelder denken. Eines nur für IP Adresse, eines für Rechnernamen.

Jan 26. Okt 2002 18:20

Hi alle,
also das mit der Fehlerquelle reduzieren is ja schön und gut, aber dadurch kann es ja immernoch passieren, dass das Programm sifft, also müsste ich trotzdem den gegeneben Fall programmieren, dass der server nicht vorhanden ist.

Zitat:

@ Jan
Was für ne IP hast du denn in deinem Lokalen Netzwerk (um auf Christian´s Posting zurücktzukommen)?
192.168.99.1/58 das sind die beiden IPs

Zitat:

Dann sende doch einen Ping an die Adresse. Wenn was zurückkommt, dann kanst du weitermachen im Text. Ansonsten brichst du ab.
Nein, das wäre nur eine weitere Begrenzung der Fehlerquellen, angenommen, der server existiert und hat auch die korrekte ip, aber das Servertool ist nicht aktiviert, so werde ich trotz eines erfolgreichen pings einen error bekommen, wenn ich versuche die Verbindung über port 23 aufzubauen. deshalb brauche ich da immernoch eine Lösung :]

@ Salomon: Welche units muss ich einbinden, um bei deiner ip-Funktion nicht 1000 "Bezeichner Unbekannt"-Fehler zu bekommen?
thx für alle Antworten
bleibt mir gewogen :]
Jan

Salomon 26. Okt 2002 20:00

@ Jan: Sorry, hatte ich auf die Schnelle vergessen. Du musst noch die Unit "winsock" einbinden.

Mfg Salomon

doc 26. Okt 2002 20:12

Ich glaub ich hab grad jemand getroffen , der so richtig genial ist...

Der nennt sich "Christian Seehase"...
Naja auf jeden Fall hat das mit der IP 192.168.0.1 funktioniert... :bounce1: :dancer: :bounce2: :dancer2: :bouncing4:
---> Dankeschön

MfG doc


--------
*freu*

Daniel B 26. Okt 2002 20:45

Zitat:

Zitat von doc
Ich glaub ich hab grad jemand getroffen , der so richtig genial ist... Der nennt sich "Christian Seehase"

Hi,

auch schon gemerkt?!? :wink: :mrgreen: :hello:

Grüsse, Daniel :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 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