blogeum
 
RSS-Symbol
Wenn Du über neue Weblog-Einträge Bescheid wissen möchtest, dann abonniere einfach den Atom-Feed oder folge mir bei Twitter.

PHP-Funktion für Wake-on-LAN

Mal wieder eine kleine aber feine PHP-Funktion. Diesmal geht es darum, einen Rechner per Wake-on-LAN-Signal (WOL) über das Netzwerk aufzuwecken. Prinzipiell muss dazu nur eine Verbindung zu einem anderen Rechner im Netzwerk oder einem Router aufgebaut werden, der dann das entsprechende Signal im Netzwerk herumschickt und so den gewünschten Computer aufweckt, sobald dieser das Signal empfängt.

Das Signal ist relativ einfach aufgebaut: 6 Mal der Hexwert FF und anschließend 16 Mal die MAC-Adresse der Netzwerkkarte des zu weckenden Rechners. Dieses sogenannte MagicPacket wird via UDP an Port 0, 7 oder 9 gesendet.

Wenn man die IP-Adresse des Routers nicht kennt, kann auch ein Broadcast (Signal an alle Geräte im Netzwerk) gesendet werden, sofern der Router dies zulässt.

<?php
# MAC-Adresse des zu weckenden Rechners
$mac = '00:00:00:00:00:00';
# IP des Routers (255.255.255.255 für Broadcast)
$ip = 'udp://255.255.255.255';

function wakeup($mac, $router) {
    if(strlen($mac) !== 17)
      return FALSE;

    if(filter_var($router, FILTER_VALIDATE_URL) === FALSE)
      return FALSE;

    $raw = sscanf($mac, '%2x:%2x:%2x:%2x:%2x:%2x');
    $func = create_function('$v', 'return isset($v);');
    $raw = array_filter($raw, $func);

    if(sizeof($raw) !== 6)
      return FALSE;


    # Router-Verbindung aufbauen auf Port 9 mit 4 Sekunden Timeout
    $fp = fsockopen($router, 9, $errnum, $errstr, 4);

    if(is_resource($fp) === FALSE) {
        trigger_error('['.$errnum.'] '.$errstr, E_USER_ERROR);
        return FALSE;
    }


    # Beginn des MagicPacket
    $magicp = "\xFF\xFF\xFF\xFF\xFF\xFF";

    # MAC in ASCII-Zeichen umwandeln
    $hexmac = '';
    foreach($raw AS $c) {
        $hexmac .= chr($c);
    }

    # 16 Mal MAC an MagicPacket anhängen
    $magicp .= $hexmac.$hexmac.$hexmac.$hexmac.$hexmac.$hexmac.$hexmac.$hexmac.$hexmac.$hexmac.$hexmac.$hexmac.$hexmac.$hexmac.$hexmac.$hexmac;

    fwrite($fp, $magicp);
    fclose($fp);

    printf('Wake-Up-Signal an %02X:%02X:%02X:%02X:%02X:%02X übertragen!', $raw[0], $raw[1], $raw[2], $raw[3], $raw[4], $raw[5]);
    return TRUE;
}

wakeup($mac, $ip);
?>

Ich benutze diese Funktion um den Server aus der Ferne aus dem Ruhezustand zu holen, um mit ihm arbeiten zu können.

Icon von Del.icio.usIcon von diggIcon von FacebookIcon von reddit.comIcon von Stumble UponIcon von TechnoratiIcon von Twitter

 

Mitreden? Dann jetzt kommentieren!

Gestattete BBCode-Formatierungen sind [blockquote], [code], [em], [strong], [url].

* Pflichtfeld · E-Mail-Adresse ist nicht öffentlich sichtbar.

Was’n das?

blogeum ist das persönliche Weblog von Christian Gürtler – seines Zeichens begeisterter Webworker und Programmierer. Er studiert gegenwärtig Angewandte Informatik an der TU Chemnitz.

 

Abonnieren

RSS-IconImmer auf dem Laufenden mit den Einträgen aus dem Weblog als Atom-Feed. Nunmehr 72 Abonnenten!

Folge mir auf Twitter

 

Neue Kommentare

Christian: Hallo, interessante Funktion. Ich denke ich werde das Beispiel für JavaScript…

Tobias Neumann: Hallo, interessante Funktion. Ich denke ich werde das Beispiel für JavaScript…

Christian: OK, den Zugriff auf "superglobale" Objekte wie window habe ich nicht bedacht.…

ChrisB: Auf diese Weise haben wir auch JSON geparsed, aber ohne Sicherheitsbedenken.…

Martha: Das wundert mich auch. Rot ist doch eine Warnfarbe. Ich kann mir das auch nur…

 

Neue Einträge

 

Lesenswert

Werbung

Wikio - Top Blog - High-tech

 

© 2009–2010 Christian Gürtler

Die Blog-Inhalte stehen unter einer Creative Commons-Lizenz.

XHTML · CSS

BlogPingR.de - Blog Ping-Dienst, Blogmonitor Blogverzeichnis - Blog Verzeichnis bloggerei.de