Windows Rechner durch Netzwerk neustarten

r4x

Mitglied
hi,

ich hab nen 2t rechner geschenkt bekommen, der mir jetzt als "server" dient, d.h. für mein Netzwerk ist da (es läuftn Apache Server zum PHP Testen).

Da der "server" aber weder maus, tastatur oder nen Monitor hat kann ich den nicht neustarten oder herunterfahren..

jetzt ist mir das umstecken aber zu anstrengend da der im nebenzimmer steht..

da bin ich auf die idee gekommen das via einem C++ Programm zu machen,
ich hab aber noch nicht so viel ahnung und google hat mir leider auch nicht so weitergeholfen wie ich es wollte.
darum frag ich jetzt einfach mal hier, ob jemand ein beispiel programmieren kann was ich dann ausbaue, ich brauch wiegesagt nur die beiden funktionen (neustarten, herunterfahren) reicht auch wenn das nur bei der einen netzwerk ip geht.

wenn jemand eine der beiden funktionen programmieren könnte, dann könnte ich das auf die andere anpassen oder so, wäre sehr nett

danke schonmal
 
Wenn es eine andere Windows version ist könntest du den PC auch "fernsteuern", ungefähr so wie es einige Trojaner machen ? Man muss nur einen server programmieren und den über einen client einen Befehl senden damit der Computer herunterfährt oder sonstiges macht, wenn du von Sockets keine ahnung hast kann ich dir dabei auch gerne helfen.

Gruß
cesupa
 
Zuletzt bearbeitet:
es handelt sich um einen Windows XP Home Edition Rechner,
Remote Shutdown Funktioniert nicht, "Dierser Netzwerkpaf wurde nicht gefunden"

aber es gibt ihn, er wird im Router erkannt, man kann drauf Zugreifen, Datentransfer funktioniert etc..

edit:// also die variante mit dem rechtsklick auf den arbeitsplatz und verwalten bringt das gleiche Problem mit sich wie remote shutdown:

"Dierser Netzwerkpaf wurde nicht gefunden"
 
Zuletzt bearbeitet:
Dann würde ich dir die Server/client Variante empfehlen, einziger Nachteil ist, dass auf deinem Server PC das Server Programm ständig angeschaltet bleiben müsste außerdem würde dann auch ständig ein bestimmter Port auf deinem Server PC offen bleiben, aber sonst würde ich keine andere Möglichkeit vom Programmieren her sehen.

Gruß
cesupa
 
das mit dem Server Client meinte ich ja, das Programm im Autostart zu platzieren und die Sache mit dem Port wären auch kein Problem, da es wiegesagt nur ein Netzwerk-Server ist. (Durch das Router hat man von aussenher keinen Zugriff auf das ganze Netzwerk also is die Portsache auch klar)

und wie mach ich das jetzt am besten?
kannst du vllt. ein Beispiel Programmieren, wie gesagt ich bin leider noch nicht so weit in C++ danke dir...

mfg Max
 
Ich würde dir zum kompletten Fernsteuen einen VNC Server/Client empfehlen. SO mache ich das auch.
Ich benutze Ultr@VNC, das gibts hier: http://ultravnc.sourceforge.net/
Du Installierst den Server auf dem fernzusteuernden PC und den Client auf deinem. Nun kannst du an dienem Rechner sitzen udn den andren PC fernsteuern, d.h. mit komplettem Desktop.

gruß gl4di4t0r
 
danke, ich werd mir das Programm mal ansehen, allerdings würde mich das Server/Client Coden dennoch interessieren :)

kann nicht einer nen kleines Beispiel machen?
Man möchte sich ja schließlich weiterbilden ;)
 
Hi, hab dir hier mal schnell was zusammengebastelt:

Server:

Code:
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <winsock2.h>

int startwinsock();
using namespace std;

int main(int argc, char *argv[])
{
    
    long rc;
    char buf[2];
              SOCKADDR_IN addr;
              SOCKET acceptsocket;
              SOCKET s;
                   rc=startwinsock();
                   if(rc!=0)
                   {
                            cout<<"Fehler Socketinitialisierung "<<WSAGetLastError()<<endl;
                            
                            
                            
                            }
                            else
                            cout<<"Socket initialisiert"<<endl;
                            
                           s=socket(AF_INET,SOCK_STREAM,0);
                            if(s==INVALID_SOCKET)
                            {
                                                 
                                                 cout<<" Socket konnte nicht erstellt werden "<<WSAGetLastError()<<endl;
                                                 }
                                                 else
                                                 cout<<"Socket erstellt"<<endl; 
                     
                     memset(&addr,0,sizeof(SOCKADDR_IN));
                     addr.sin_family=AF_INET;
                     addr.sin_port=htons(70);
                     addr.sin_addr.s_addr=ADDR_ANY; //oder Adresse des Clients
                     rc=bind(s,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
                     
                     if(rc==SOCKET_ERROR)
                     {
                                         
                                         cout<<"Fehler beim bind() "<<WSAGetLastError()<<endl;
                                         
                                         }
                                         else
                                         cout<<"Bind() funktioniert"<<endl;
                                         
                                         rc=listen(s,10);
                                         
                     if(rc==SOCKET_ERROR)
                     {
                                         
                                         cout<<"Fehler beim listen() "<<WSAGetLastError()<<endl;
                                         
                                         }
                                         else
                                         cout<<"listen() funktioniert"<<endl;
                                         
                                         acceptsocket=accept(s,0,0);
                                         
                                         if(acceptsocket==INVALID_SOCKET)
                     {
                                         
                                         cout<<"Fehler beim accept() "<<WSAGetLastError()<<endl;
                                         
                                         }
                                         else
                                         {
                                         cout<<"accept() funktioniert"<<endl;
                                         
                                         }
                                        recv(acceptsocket,buf,2,0);
                                        if(buf[0]=='s')
                                        {
                                                       cout<<"'s' wurde empfangen!"<<endl;
                                                       //PC herunterfahren 
                                                       }
    closesocket(acceptsocket);
    closesocket(s);
    WSACleanup();
    system("PAUSE");
    return EXIT_SUCCESS;
}

int startwinsock()
              {
                  WSADATA wsa;
                  return WSAStartup(MAKEWORD(2,0),&wsa);
              }

Und hier der client:

Code:
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <winsock2.h>

int startwinsock();
using namespace std;

int main(int argc, char *argv[])
{
    long rc;
              SOCKADDR_IN addr;
              SOCKET c;
              rc=startwinsock();
               if(rc!=0)
                     {
                                        
                                         cout<<"Fehler bei Socketinitialisierung "<<WSAGetLastError()<<endl;
                                         
                                         }
                                         else
                                         cout<<"Socketinitialisierung funktioniert"<<endl;
                                         
                                         c=socket(AF_INET,SOCK_STREAM,0);
                                         
                                          if(c==INVALID_SOCKET)
                     {
                                         
                                         cout<<"Fehler beim Socketerstellung "<<WSAGetLastError()<<endl;
                                         
                                         }
                                         else
                                         cout<<"Socketerstellung funktioniert"<<endl;

                                         memset(&addr,0,sizeof(SOCKADDR_IN));
                                         addr.sin_family=AF_INET;
                                         addr.sin_port=htons(70);
                                         addr.sin_addr.s_addr=inet_addr("127.0.0.1");//IP des Servers reinschreiben
                                         
                                         rc=connect(c,(SOCKADDR*)&addr,sizeof(SOCKADDR));
                                         
                                          if(rc==SOCKET_ERROR)
                     {
                                         
                                         cout<<"Fehler beim verbinden "<<WSAGetLastError()<<endl;
                                         return 1;
                                         }
                                         else
                                         {
                                         cout<<"verbinden funktioniert"<<endl;
                                         
                                         }
                                         
                     char senden[2];
                     
                     cout<<"Wenn der Server abgeschaltet werden muss tippen sie 's' ein!"<<endl;
                     cin.get(senden,2);
                     send(c,senden,2,0);
      
      closesocket(c);
      WSACleanup();                                   
    system("PAUSE");
    return EXIT_SUCCESS;
}

int startwinsock()
              {
                  WSADATA wsa;
                  return WSAStartup(MAKEWORD(2,0),&wsa);
              }

Server und Client Strukturen kannst du dir auf http://www.c-worker.ch/ anschauen, dort ist auch nochmal alles erklärt.
Wenn du dem Server ein s sendest dann führt weiteren code aus, wie du den PC runterfährst weis ich nicht, bei WinXP braucht man dazu noch spezielle Rechte sonst gehts nicht. ich hab das ganze mit dem Dev-C++ gemacht, außerdem musst du noch die libws2_32.a dazulinken, fertig.

Gruß
cesupa
 
Zurück