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

    [wiregate] - √ - Windows PC herunterfahren (via Telnet vom Wiregate)

    Hallo Zusammen,

    wie kann man prüfen ob ein Plugin funktioniert?

    gruß

    Jürgen

    #2
    Am besten wenn man Stück für Stück vorgeht.
    Da Du es überprüfen willst gehe ich mal davon aus dass nicht das passiert was Du Dir vorstellst.
    Das Plugin-Log ist da ein gute Helfer.

    Beispiel:
    Code:
    #Code-Teil I
    #
    #mach irgendwas aus irgend einem Grund mit $variabe1
    #
    #
    plugin_log($plugname,"Ja ich bin bis hierher gekommen, das vorläufige Ergebnis ist $variabel1");
    #
    #Code Teil II
    #
    #jetzt mache folgendes mit $variabel1 und das Ergebnis ist $variabel2
    #
    #
    plugin_log($plugname,"Auch der Schritt ist richtig. Ergebnis: $variabel2");
    #
    #u.s.w.
    #
    Ansonsten müsstest Du Deine Frage etwas klarer formulieren.

    Grüße
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Wie Jumi schreibt, ich würde es aber noch vereinfachen (Jumi weiss da ja viel zuviel ):

      return "Ich war da";

      Das steht dann im Plugin-Log, ich denke so kann man sich auch rantasten..

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

      Kommentar


        #4
        Hallo,

        ich habe dieses Plugin aus dem Forum auf meinem Wiregate installiert.
        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 = "Mirko86!";            # Passwort des Benutzers
        my $remote_method = "telnet";        # Methode zum Login entweder "ssh" oder "telnet" (Groß- und Kleinschreibung beachten!)
        my $remote_command = "shutdown /r";    # Befehl zum Ausschalten oder "schlafen legen" des PCs, z. B.
                            #   - Ausschalten: "shutdown -h now" (Default)
                            #   - 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" ) {
                # Telnet
                my $telnet = Net::Telnet->new($ip_address);
                $telnet->login($user,$password);
                my @lines = $telnet->cmd("$remote_command");
            } else {
                # SSH
                $command = "sshpass -p $password ssh $user"."@".$ip_address.' "'.$remote_command.'"';    
                my $status = system($command);
            }
            return "gesendet";
        }
        Bei diesem Plugin habe ich mehrere Probleme.

        1. Variablen
        # Eigenen Aufruf-Zyklus auf 3 Stunden setzen
        # der Aufrufzyklus ist unabhängig von der Taktzeit und muss kürzer sein!

        Leider verstehe ich diese Angaben nicht

        2. Funktionstest

        So wie ich das Plugin verstehe sollte es bei einer '1' auf die GA 9/2/0 etwas passieren.

        Die Pluginlogdatei sieht leer aus.

        3. Modifikation

        Ich würde das Plugin gerne umbauen damit ich Windows PC´s herunterfahen. Gibt es hier vielleicht schon was fertiges?

        gruß

        Jürgen

        Kommentar


          #5
          Ehrlich, versteh ich nicht 100% - runterfahren(suspend) kann/sollte die Kiste - sofern Idle - doch von ganz alleine?

          Ansonsten hat vielleicht jemand das Rezept in der Tasche, unter Windows einen brauchbaren SSH o.ä zu haben und die Befehlszeile wie man das jetzt grade hinter den Kacheln macht

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

          Kommentar


            #6
            AW: Funktionsprüfung Plugin

            Zitat von freak83 Beitrag anzeigen

            3. Modifikation

            Ich würde das Plugin gerne umbauen damit ich Windows PC´s herunterfahen. Gibt es hier vielleicht schon was fertiges?
            [Edit: erste Antwort war ohne das Plugin gerne gelesen zu haben... ]

            Das wäre dann aber wesentlich umfangreicher, da man dazu auf jedem zu steuernden Windows-Rechner erst mal Software installieren muss. Analog zu makkis Ausführungen: ssh-Server auf dem Windows-Rechner installieren, einrichten dass sich ein User per ssh einloggen kann, rausfinden wie man von der Kommandozeile aus Windows herunterfährt, das Kommando im Plugin hinterlegen.


            Grüße,
            Julian

            Kommentar


              #7
              Zitat von freak83 Beitrag anzeigen
              1. Variablen
              # Eigenen Aufruf-Zyklus auf 3 Stunden setzen
              # der Aufrufzyklus ist unabhängig von der Taktzeit und muss kürzer sein!

              Leider verstehe ich diese Angaben nicht
              Einfach ignorieren - theoretisch (und praktisch) sollte auch Aufrufzyklus =0 funktionieren ($plugin_info{$plugname.'_cycle'} = 0.
              Spielt erstmal keine Rolle.



              Zitat von freak83 Beitrag anzeigen
              2. Funktionstest

              So wie ich das Plugin verstehe sollte es bei einer '1' auf die GA 9/2/0 etwas passieren.

              Die Pluginlogdatei sieht leer aus.
              GA in der eibga.conf bzw. im Webmin eingetragen damit der DPT korrekt erkannt wird ?


              Grüße
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #8
                Nachdem ich die GA´s bkannt gemacht habe passiert auch etwas, das WOL Packet wird gesendet.

                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 :-(

                Kommentar


                  #9
                  Ja aber über welche Verbindung? Widows arbeitet AFAIK per default nur über telnet. Das Plugin ist aber für SSH eingerichtet. Da müsste man also noch mehr umbauen... Wenn du aber Telnet offen hast, kannst du den Befehl auch lokal ausführen... Also "shutdown /s /f /t 00"
                  Gruss Patrik alias swiss

                  Kommentar


                    #10
                    Telnet habe ich auf den Windows PC´s Aktiviert.

                    Passt die Telnet anmeldung auch bei Windows Clients?

                    Code:
                    sub remote_login {
                        my $command;
                        if ( $remote_method eq "telnet" ) {
                            # Telnet
                            my $telnet = Net::Telnet->new($ip_address);
                            $telnet->login($user,$password);
                            my @lines = $telnet->cmd("$remote_command");
                        } else {
                            # SSH
                            $command = "sshpass -p $password ssh $user"."@".$ip_address.' "'.$remote_command.'"';    
                            my $status = system($command);
                        }
                        return "gesendet";

                    Kommentar


                      #11
                      Das kann ich dir leider nicht beantworten. Ich habe das selbst noch nie versucht... Ich habe mich bis jetzt immer nur von einem Windows Rechner auf einen anderen per Telnet verbunden und den oben genannten Befehl ausgeführt
                      Gruss Patrik alias swiss

                      Kommentar


                        #12
                        Ich bin ein Stückchen weitergekommen.

                        Jetzt kommt der Fehler:

                        2013-02-10 12:33:17.559,WOL,,10.8s,timed-out waiting for command prompt at (eval 60) line 94
                        Code:
                        $telnet->login($user,$password);
                        Ich glaube hier müsste dann ein J folgen sammt einem ENTER

                        Wie bekomme ich das in das Plugin rein?

                        Kommentar


                          #13
                          Versuchs mal mit
                          Code:
                          $telnet->cmd("J"."\n")
                          Umgezogen? Ja! ... Fertig? Nein!
                          Baustelle 2.0 !

                          Kommentar


                            #14
                            Kommt leider der gleiche Fehler.

                            Ich kann mich doch per SSH am Wiregate anmelden und dann per Telnet versuchen mich am Windows PC anmelden. Vielleicht sehe ich was ich eingeben mus.

                            Kommentar


                              #15
                              Also das man Telnet für den Command braucht galube ich nicht, das ganze geht m.W. über RPC.
                              Um die Komplexität zu reduzieren solltest Du als erstes mal den gewünschten Befehl via SSH-Shell einfach von der Console absetzen und schauen ob es grundsätzlich läuft. Dann erst würde ich in die Plugin-Logik einsteigen.
                              Falls es da schon nicht klappt mußt Du auf der Win-Seite suchen, angefangen von Firewalls über GPOs usw. Dann am besten mal von Win zu Win versuchen.
                              Ich denke im Moment kommst Du mit der Vorgehensweise nur schwer dahinter, an welcher Stelle Du den Hebel ansetzen mußt..

                              Cheers,
                              Oliver

                              Kommentar

                              Lädt...
                              X