Wake on lan script that works

后端 未结 4 1898
抹茶落季
抹茶落季 2021-01-31 12:17

is there a wake on lan script using a web language preferably php that works? Also one that has some documentation on how to get it to work like what needs to be enabled on your

相关标签:
4条回答
  • 2021-01-31 12:55

    HTML (test.htm)

    <body>
    <a href="test.php?mymac=XX:XX:XX:XX:XX:XX">Click to WOL XX:XX:XX:XX:XX:XX</a>
    </body>
    

    PHP (test.php)

    <?php
    $mymac = $_REQUEST['mymac'];
    wol("255.255.255.255", $mymac);
    echo 'WOL sent to '.$mymac;
    
    function wol($broadcast, $mac){
    $mac_array = preg_split('#:#', $mac); //print_r($mac_array);
    $hwaddr = '';
        foreach($mac_array AS $octet){
        $hwaddr .= chr(hexdec($octet));
        }
        //Magic Packet
        $packet = '';
        for ($i = 1; $i <= 6; $i++){
        $packet .= chr(255);
        }
        for ($i = 1; $i <= 16; $i++){
        $packet .= $hwaddr;
        }
        //set up socket
        $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
        if ($sock){
        $options = socket_set_option($sock, 1, 6, true);
            if ($options >=0){    
            $e = socket_sendto($sock, $packet, strlen($packet), 0, $broadcast, 7);
            socket_close($sock);
            }    
        }
    }  //end function wol
    ?>
    

    Since the split() function was removed from PHP 7.0.0, this script uses preg_split() to be compatible with current and previous PHP versions.

    Replace XX:XX:XX:XX:XX:XX in the HTML with your target MAC to test the script.

    0 讨论(0)
  • 2021-01-31 12:59

    I know this is an old questions, but it's still the first Google result, so here's what I ended up doing after a bit of research:

    Prerequisites:

    • Linux box on the same network
    • Install the wakeonlan package from your system's package manager
          (i.e. sudo apt-get install wakeonlan)

    Now the script is as easy as this:

    <?php
        # replace with your target MAC address
        $mac = 'aa:bb:cc:11:22:33';
    
        exec("wakeonlan $mac");
    ?>
    

     

    Hope that helps someone.

    0 讨论(0)
  • 2021-01-31 13:03
    function wol($broadcast, $mac)
    {
        $hwaddr = pack('H*', preg_replace('/[^0-9a-fA-F]/', '', $mac));
    
        // Create Magic Packet
        $packet = sprintf(
            '%s%s',
            str_repeat(chr(255), 6),
            str_repeat($hwaddr, 16)
        );
    
        $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    
        if ($sock !== false) {
            $options = socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, true);
    
            if ($options !== false) {
                socket_sendto($sock, $packet, strlen($packet), 0, $broadcast, 7);
                socket_close($sock);
            }
        }
    }
    

    Should work - call it with a broadcast IP address, and a MAC address

    0 讨论(0)
  • 2021-01-31 13:07

    Building upon the previous answers. Had to set udp port to 9 and repeat the MAC a couple more times before it worked for me:

    function wol($mac)
    {
        $hwaddr = pack('H*', preg_replace('/[^0-9a-fA-F]/', '', $mac));
    
        // Create Magic Packet
        $packet = sprintf(
            '%s%s',
            str_repeat(chr(255), 6),
            str_repeat($hwaddr, 20)
        );
    
        $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    
        if ($sock !== false) {
            $options = socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, true);
    
            if ($options !== false) {
                socket_sendto($sock, $packet, strlen($packet), 0, "255.255.255.255", 9);
                socket_close($sock);
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题