Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » befehl ausführen sockets

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
28.01.2006, 12:28 Uhr
Kabel



Hallo,

tut mir leid dass ich euch jetzt hier nochmals mit meinen Socket Probleme nerve aber ich frage mich wie ich es anrichten kann, dass ein Befehl der auf dem server eingetippt wird auf den client ausgeführt werden kann.

Ich habe natürlich mut sent und recive versucht, hab so eine Art chat gebaut. Es happert nur mit dem ausführen von befehlen.

Wenn ich zB eine File vom server aus überprüfen will, um sie gegebenfalls durch eine neue zu ersetzen bring ich das nicht vertig.

Ich ab schon mit der funktion system() versucht jedoch klapt das nicht.

kann mir jemand helfen?

mfg
Kabel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.01.2006, 13:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja du musst den befehl halt in deinen client einbauen. also z.b wenn man "/exec notepad.exe" dem client sendet, das er dann eben "notepad.exe" dort mit ShellExecute/CreateProcess ausführt.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.01.2006, 13:14 Uhr
Kabel



Mh.. wie kann ich das den am besten einrichten?

so richtig komm ich nicht klar :/
Danke
mfg
Kabel

// ok, ich habs jetzt, danke edoch macht der client mir manchmal eine 0 vor meinen befehl... wenn ich zB cd C eintippe dann bekomme ich 0cd C beim client ausgegeben, das heisst der Befehl funktiniert dann nict, weiss jemand woran das liegen kann? komischerweise gehts bei dem befehl dir problemlos.

mfg
Kabel

Dieser Post wurde am 28.01.2006 um 14:05 Uhr von Kabel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.01.2006, 01:59 Uhr
Kabel



Ok, das Problem hab ich nun auch gelöst war eigentlich was sehr dummes... sry für die dumme Frage die ihr mit den mangel an infos nicht bantworten konnetet.

Ich danke euch für alle Antworten.
Jedoch hab ich wieder ein Problem :/

Also ich hab hier 2 Rechner mit Win XP und Admin rechten stehen. Der Client soll die Befehle die ich im Server eintippe ausführen.

in etwas sieht es von Clientseiten so aus: system(Buffer); wobei Buffer vom Server zum Client geschickt wird.

Nun funktionieren alle Befehle, dir, help, ...
nur hab ich mit cd ein Problem, in der Tat ich kann nicht aus dem Folder raus in dem das Programm steht.

Wenn ich cd .. im server eintippe bleibe ich auf clientseiten im gleichen Folder, weiss jemand wieso?

Ich dachte dass wenn mein Programm Admin Rechte hätte könnte ich auch alles machen, sehe ich das falsch?
Wie kann ich dann besser vorgehen?

Ist das mit dem system(); eigentlich eine gute lösung? Oder wie kann ich das im c++ ohne CMD machen?

Es tut mir Leid dass ich all dies Fragen hier poste, aber ich würde mich sehr über etwas hilfe freuen. Anständiges zum Thema OS in C++ mit einbeziehen habe ich nicht gefunden, darum würde ich mich auch über links oder ähnliches freuen, falls Jemand sowas hat.

mfg
Kabel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.01.2006, 11:24 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das liegt daran das system eine neue Shell startet.

du müsstest mit AllocConsole und co dir eine Konsole "laden", die du dann auch IMMER für die Session verwendest. Sonst startet er immer wieder im Arbeitsverzeichnis der Anwendung.

Ansonsten würde ich nicht umbedingt einfach den Buffer ausführen lassen. was macht er denn wenn man nämlich z.b format c: eintippt ... :-)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
29.01.2006, 11:41 Uhr
Kabel



hehe,
soll ich es dir sagen?

dann macht er nichts, da C: immer benutzt wird vom OS kann er also nicht löschen etwas schlechtes Beispiel, aber ich verstehe was du meinst. Ich danke dir sehr.

ICh hab jetzt selber auch noch nachgeforcht und bin auf folgende Ausdrücke gestossen:
CreateProcess und Konsorten

wenn es nicht zuviel ist könntest du mir den Unterschied kurz erklären? und vielleicht was fur mich am angebrachtesten sei?

mfg
Kabel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
30.01.2006, 10:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja was du willst ist ja eine Art "telnet", also remote-"command.com". Dazu solltest du eben im server, sobald sich ein client anmeldet, eine virtuelle Konsole erstellen (AllocConsole und Co) und dann jeden Befehl den der Client sendet auf diese Konsole weiterleiten. dann funktionieren auch mehrere Befehle wie z.b


Code:
cd h:
cd foo\bar
dir



die du dem Server sendest, da er dann eben immer die gleiche Konsole ("shell") nimmt und nicht jedesmal eine neue startet.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
30.01.2006, 14:49 Uhr
Kabel



Ach ja, ok sehr nett ich danke dir

Mittlerweile hatte ich weiterprobiert aber ich komme immer noch mit dem AllocConsole nicht wirklich klar...

Zwar hab ich nun etwas anderes, ohne Compilier + Linking Fehler, doch funktioniert das nicht

Deswegen poste ich mal ein Teil des codes, damit ihr mir vielleicht etwas helfen könnt.

C++:
cout<<"empangene Befehle : ";
            recv(W_IP, Buffer, sizeof(Buffer), 0); //vom serveur gesendete Daten
          
    AllocConsole();
        WriteConsole(NULL, &Buffer, 1024, NULL, NULL);



so das ist der Teil der das Problem betrifft... In Buffer werden die Befehle gespeichert und rübergesendet.
Ich denke das Problem liegt wahrscheinlich bei den Parametern von WriteConsole, oder?

Ich hab mich sehr bemüht aber nicht rausgefunden was ich da genau eingeben soll...
s tut mir Leid wenn ich euch soviel nerve, aber ich bin eben nur ein Anfänger was sockets getrifft...

Ich bin sehr dankbar für die Hilfe bisher.

mfg
Kabel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
30.01.2006, 22:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du darfst 1. nicht beim empfangen eines befehls ne konsole anlegen (sonst haste das selbe problem wie vorher) sondern schon beim verbinden des clients.

Nach dem AllocConsole aufruf, sind GetStdHandle(STD_INPUT_HANDLE) OUTPUT bzw ERROR korrekt gesetzt (auf diese neue Konsole). Nun kannst du mit CreateProcess mit parameter inherit-handles den prozess in dieser konsole ausführen. Also erstmal z.b "command.com", damit du eine shell erhälst. Nun kannst du per WriteFile auf GetStdHandle(STD_INPUT_HANDLE) Befehle an deine Shell senden (mit newline abschliessen!), mit ReadFile auf GetStdHandle(STD_OUTPUT_HANDLE) bzw ERROR deine Ausgabe des Befehls lesen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
30.01.2006, 22:08 Uhr
Kabel



Hallo,

ich danke dir sehr
Echt nett dass du mir soviel hilfst. Ich werd mal versuchen. Ich hoffe mal dass es klappen wird, ansonsten werd ich mich (wieder) melden.

Aber ich bin echt dankbar dass du dich so net um meine anfänger Probleme kümmers Echt begeistert bin ich.

mfg
Kabel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: