Wake On Lan: fsockopen - Keine Berechtigung

Hi,

ich wecke diverse Geräte im Netzwerk mit WOL direkt in PHP mit folgender Funktion auf:

function wake_on_lan ($mac_addr, $broadcast) { 

    if (!$fp = fsockopen('udp://' . $broadcast, 2304, $errno, $errstr, 2)) 
        return false;

    $mac_hex = preg_replace('=[^a-f0-9]=i', '', $mac_addr);
	$mac_bin = pack('H12', $mac_hex);

    $data = str_repeat("\xFF", 6) . str_repeat($mac_bin, 16);

    fputs($fp, $data);
    fclose($fp);
    return true;
	
}

leider funktioniert das seit dem Umzug auf den Raspberry nicht mehr.
Ich erhalte bei jedem Ausführen die Meldung

Warning:  fsockopen(): unable to connect to udp://123.123.123.255:2304 (Keine Berechtigung) in /var/lib/symcon/scripts/functions.php on line 5

Muss hier noch etwas berechtigt werden?

Vielen Dank

Das Thema Gab es schon öfter, ich glaube das geht nicht weil PHP als Root laufen muss.
Vielleicht hilft dir ja das hier weiter.

cu.
uriel2006

Hallo,

ansonsten schau mal hier in meinem Modul: IPS-Tvheadend/TVH.php at master · Schnittcher/IPS-Tvheadend · GitHub

Grüße,
Kai

Danke für die Hinweise. Hat geklappt.

@KaiS:
habe deine Funktion geringfügig angepasst.

function wake_on_lan($mac, $broadcast)
    {
        $addr = $broadcast; //"192.168.1.255";
        $addr_byte = explode(':', $mac);
        $hw_addr = '';
		
        for ($a=0; $a < 6; $a++) $hw_addr .= chr(hexdec($addr_byte[$a]));
        $msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255);
        for ($a = 1; $a <= 16; $a++) $msg .= $hw_addr;
        // send it to the broadcast address using UDP
        $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
        if ($s == false)
        {
            echo "Error creating socket!
";
            echo "Error code is '".socket_last_error($s)."' - " . socket_strerror(socket_last_error($s));
        }
        else
        {
            // setting a broadcast option to socket:
            $opt_ret = socket_set_option($s, 1, 6, TRUE);
            if($opt_ret < 0)
            {
                echo "setsockopt() failed, error: " . strerror($opt_ret) . "
";
            }
            $e = socket_sendto($s, $msg, strlen($msg), 0, $addr, 2050);
            //echo $e;
            socket_close($s);
            //echo 'Der Server wird gestartet.';
            //echo "Magic Packet sent (".$e.") to ".$addr.", MAC=".$this->mac;
        }
    }


Grüße

Hallo,

ich habe jetzt genau das Problem. Wenn ich das letzt Skript hier kopiere und die MAC Adresse eintrage, funktioniert es auch nicht. Gibt es da ein Update?

Grüße