Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Windows PC herunterfahren (via Telnet vom Wiregate)

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Habs hinbekommen

    hier der Code:

    Code:
    # Plugin um ein Netzwerkgerät per Wake On LAN (WOL) aufzuwecken und per ssh/telnet auszuschalten
    #
    # Copyright of original wol part:
    # Perl version by ken.yap@acm.org after DOS/Windows C version posted by
    # Steve_Marfisi@3com.com on the Netboot mailing list
    # Released under GNU Public License, 2000-01-05
    #
    # Hinweise zur Einrichtung von Wake On LAN unter Ubuntu gibt es hier:
    # http://wiki.ubuntuusers.de/Wake_on_LAN
    #
    # Folgende Paket unter Update installieren (nur wenn ssh genutzt werden soll):
    # sshpass
    #
    # Achtung:
    # --------
    # sshpass ist sehr unsicher, da das Passwort im Klartext hier im Plugin steht
    #         und unverschlüsselt an ssh übergeben wird.
    #
    
    ### Definitionen
    my $switch_ga = "9/2/0";         # Gruppenadresse die einen PC wecken oder ausschalten soll
    my $mac_address = "00:25:22:49:64:71";  # MAC-Adresse des PCs
    my $ip_address = "192.168.10.21";    # IP-Adrssse des PCs
    my $user = "Administrator";        # Benutzername für ssh/telnet login
    my $password = "wiregate";        # Passwort des Benutzers
    my $remote_method = "telnet";        # Methode zum Login entweder "ssh" oder "telnet" (Groß- und Kleinschreibung beachten!)
    my $remote_command = "shutdown /s /f /c \"Wiregate Rockt\"";    #shutdown /s /f /t 00 Befehl zum Ausschalten oder "schlafen legen" des PCs, z. B.
    my $host = "";                #   - Ausschalten: "shutdown -h now" (Default)
    my $prompt = "_funkydPromplt_"    ;    #   - Suspend-to-RAM (S3): "pm-suspend"
                         #   - Suspend-to-disk (S4): "pm-hibernate"
                        #   Weitere Informationen für Ubuntu: http://wiki.ubuntuusers.de/pm-utils
                        #   Um die Befehle von allen Benutzern ohne Administratorrechte auszuführen 
                        #   folgende Zeilen auf dem Ziel-PC eingeben (für Ubuntu, bei anderen Distris den Pfad ggf. anpassen):
                        #      sudo chmod u+s /sbin/shutdown
                        #      sudo chmod u+s /usr/sbin/pm-*
    ### Ende Definitionen
    
    use Getopt::Std;
    use Socket;
    use Net::Telnet;
    
    # Plugin an Gruppenadresse "anmelden"
    $plugin_subscribe{$switch_ga}{$plugname} = 1;
    
    # Eigenen Aufruf-Zyklus auf 3 Stunden setzen
    # der Aufrufzyklus ist unabhängig von der Taktzeit und muss kürzer sein!
    $plugin_info{$plugname.'_cycle'} = 10800;
    
    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $switch_ga) {
        #Wert vom Bus
        if (defined $msg{'value'}) { 
            if ( $msg{'value'} == "1" ) {
                my $return_value = send_broadcast_packet($mac_address);
                return "WOL ".$return_value." an ".$mac_address;
            } else {
                my $return_value = remote_login();
                return "Ausschaltbefahl an ".$ip_address." ".$return_value;
            }
        }
    }
    
    return;
    
    
    sub send_broadcast_packet {
        (my $mac) = @_;
    
        if ($mac !~ /[\da-f]{2}:[\da-f]{2}:[\da-f]{2}:[\da-f]{2}:[\da-f]{2}:[\da-f]{2}/i)  {
            return "Fehlerhafte MAC-Adresse $mac\n";
        }
        print "Sende WOL-Paket an MAC-Adresse $mac\n";
        # Remove colons
        $mac =~ tr/://d;
        # Magic packet is 6 bytes of FF followed by the MAC address 16 times
        my $magic = ("\xff" x 6) . (pack('H12', $mac) x 16);
        # Create socket
        socket(S, PF_INET, SOCK_DGRAM, getprotobyname('udp'))
            or return "Fehler im Socket: $!\n";
        # Enable broadcast
        setsockopt(S, SOL_SOCKET, SO_BROADCAST, 1)
            or return "Fehler bei Setsockopt: $!\n";
        # Send the wakeup packet
        defined(send(S, $magic, 0, sockaddr_in(0x2fff, INADDR_BROADCAST)))
            or print "Sende: $!\n";
        close(S);
        return "Magic Packet gesendet";
    }
    
    sub remote_login {
        my $command;
        if ( $remote_method eq "telnet" ) {
            
            
            $host = new Net::Telnet(Timeout => 30,Prompt => "/\>/");
            $host->open($ip_address);
            $host->login($user, $password );
            @lines = $host->cmd($remote_command);
        } else {
            # SSH
            $command = "sshpass -p $password ssh $user"."@".$ip_address.' "'.$remote_command.'"';    
            my $status = system($command);
        }
        return "gesendet";
    }

    Kommentar


      #17
      Windows PC herunterfahren

      Kann man im nachhinein den Titel ändern?

      Kommentar


        #18
        Titel ändern geht für Nicht-Moderatoren womöglich nur begrenzt, aber ich kann den Titel gerne für Dich ändern.

        Welchen Titel hättest Du denn gerne?

        Kommentar


          #19
          Windows PC herunterfahren (per Telnet am Wiregate)

          Kommentar


            #20
            Nur so im Nachtrag, da stellt es mir für nachfolgende Leser stellvertretend die Zehennägel auf!

            Zitat von freak83 Beitrag anzeigen
            Es müsste doch möglich sein diesen String per WireGate zu senden.

            net rpc SHUTDOWN -C "some comment here" -f -I x.x.x.x -U user_name%password

            Leider bin ich kein Linux Crack :-(
            Den "String" könnte man sehr einfach senden, darum geht jedoch nicht sondern darum ein ziemlich Windows-spezifisches Kommando via sog. RPC auszuführen, was nur funktionieren wird, wenn man Samba (den Windows Client/Server) entsprechend eingerichtet und Windows-seitig die Rechte dazu hat..
            Das hat nix mit Linux-crack zu tun, ausser das man unter Unix seit 30J mit den Augen rollt, wie man so einfache Sachen derart kompliziert gestalten kann

            Zitat von swiss Beitrag anzeigen
            Ja aber über welche Verbindung? Widows arbeitet AFAIK per default nur über telnet. ..
            Das macht schon wieder heftig Aua!
            Windows hat weder einen Telnet- (und das lassen wir bitte auch) noch einen SSH-Server an Bord! Das ist wenn es das gibt - 3rd-Party nachgefrickelt!
            Es gibt auch dutzende, wenn nicht hunderte Tools dazu; wenn dann sind diese zu benennen sonst schiesst man sich ganz schnell ein ganz grosses Loch ins Knie und in Sicherheit!

            Bleibt ein Fragezeichen (richtig wäre IMHO aus Windows-Sicht via WMI [oder wie auch immer das jetzt gerade heisst], obs dazu unter Linux API's gibt: keine Ahnung! Meistens lautet die AW: ja
            Und schon wieder eine Frage, wer schaffts ins SVN?

            Damit uns das ned untergeht, weil ob nun sicher oder ned, ist eh den meisten wurscht, geht das sonst unter..

            Makki
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #21
              Zitat von freak83 Beitrag anzeigen
              net rpc SHUTDOWN -C "some comment here" -f -I x.x.x.x -U user_name%password
              Hi,

              ihr redet hier über 2 verschiedene Dinge: Man kann Windows-PCs auch über samba über das obige Kommando runterfahren, nicht nur über telnet. Da samba auf dem Wiregate drauf ist, sollte das auch klappen. Hast Du es schon mal vom Wiregate aus über Kommandozeile versucht? Wenn das klappt, klappt es auch vom Plugin aus...

              Gruß, Waldemar
              OpenKNX www.openknx.de

              Kommentar


                #22
                Waldemar,
                das ist mir durchaus klar, den MCSE gabs auch für NT4&2000 nicht aufm Flohmarkt

                Mich erschreckt jedoch schon die herangehensweise, völlig offene 3rd-Party Telnet-Server einzupflanzen ohne (möglicherweise) zu wissen was man da nun so tut könnte gefährlich sein..

                Makki
                EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                -> Bitte KEINE PNs!

                Kommentar


                  #23
                  Uuupps... sorry!

                  Meine Antwort passt leider gar nicht, da ich irgendwie übersehen habe, dass der Thread über mehrere Seiten ging - ich habe schon am Ende von Seite 1 geantwortet.

                  Gruß, Waldemar
                  OpenKNX www.openknx.de

                  Kommentar

                  Lädt...
                  X