WOL per Skript funktioniert auf einmal nicht mehr

Hallo,
ich habe mit folgendem Skript mein NUC per WOL einschalten können:

<?
$mac = „xxxxxxxxxxxx“; //MAC Adresse des einzuschaltenden Gerätes
$ip = „255.255.255.255“; // Broadcast adresse

wake($ip,$mac,15);//Port kann irgendwas sein

function wake($ip, $mac, $port)
{
$nic = fsockopen(„udp://“ . $ip, $port);
if($nic)
{
$packet = „“;
for($i = 0; $i < 6; $i++)
$packet .= chr(0xFF);
for($j = 0; $j < 16; $j++)
{
for($k = 0; $k < 6; $k++)
{
$str = substr($mac, $k * 2, 2);
$dec = hexdec($str);
$packet .= chr($dec);
}
}
$ret = fwrite($nic, $packet);
fclose($nic);
if($ret)
return true;
}
return false;
}

?>

Heute ist es mir aufgefallen, dass es nicht mehr funktioniert. Mit einer Android App klappt es noch einwandfrei. Sind da irgendwelche Probleme bekannt?

Grüße

Genau das hatte ich mal vor ein paar Monaten.

$ip = "255.255.255.255";

hat nicht mehr funktioniert.
Hab dann auf mein Netzwerk umgestellt und es ging wieder.

$ip = "192.168.1.255";

Sollte der Port nicht 9 sein ?

WOL funktioniert bei mir dem NUC, nachdem ich in den Energieoptionen den Schnellstart (Windows 10 Pro) deaktiviert habe.

<?
// WakeOnLAN

flush();

function WakeOnLan($addr, $mac)
{
$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
// SQL_BROADCAST option isn't help!!
$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 "Magic Packet sent (".$e.") to ".$addr.", MAC=".$mac;
}
}


WakeOnLan('192.168.178.255', 'XX:XX:XX:XX:XX:XX');  //XX:XX:XX:XX:XX:XX = MAC-Adresse

?>

Hallo,

eine Umstellung der IP Adresse auf 192.166.1.110 und/oder des Ports aus 9 hat nichts gebracht. Windows Einstellungen sind OK, mit der App auf dem Handy funktioniert WOL ja. Das Skript hat so wie es ist für zwei PCs Monate lang wunderbar funktioniert. Ich musste nur die MAC-Adresse anpassen.

Am Script selbst kann es nicht liegen. Der Code ist bei mir komplett identisch und laeuft.
Bekommst du als Rueckgabewert fuer $ret eine Zahl ?

Euer Script bringt bei mir folgende Meldung:

Warning:  fsockopen(): unable to connect to udp://192.168.178.255:15 (Keine Berechtigung)

Port 15 kann ich sowieso nicht verstehen, ist inoffziell fuer netstat.
WOL kann eigentlich nur Port 7 oder 9 sein.

Gesendet von iPad mit Tapatalk

Port macht keinen Unterschied:

Warning:  fsockopen(): unable to connect to udp://192.168.178.255:9 (Keine Berechtigung) 
Warning:  fsockopen(): unable to connect to udp://192.168.178.255:7 (Keine Berechtigung)

. 255 ist eigentlich die Broadcast Adresse, die kann dein Gerät nicht haben.

Hab eben das gefunden :

Wake On Lan: fsockopen - Keine Berechtigung

Gesendet von iPad mit Tapatalk

Das passt.

Das Magic-Packet wird per Broadcast gesendet. Die Geräteadressierung erfolgt über die MAC-Adresse der Netzwerkschnittstelle.

Siehe Script unter https://www.symcon.de/forum/threads/41614-WOL-per-Skript-funktioniert-auf-einmal-nicht-mehr?p=403834#post403834.

Anscheinend tritt das Berechtigungsproblem nur unter Linux auf.

Das liegt eher am fsockopen, gerade wenn auch andere Sockets etwas mit der Broadcast Adresse machen wollen.
Dafür gibt es die StreamContex Optionen wie im anderen Script.
Michael

Ich habe das Script unter Windows getestet -> WOL funktioniert.

Unter Linux (Tinkerboard S, Armbian Buster) kommt der Berechtigungsfehler.

Deshalb würde ich empfehlen, das alternative Script aus Post #3 zu verwenden.

Habs nicht getestet , aber funktioniert das auch unter Windows ?

Habe das Script mal nach Windows kopiert.
WOL mit dem alternativen Script funktioniert.

Allerdings gibt es unter Windows eine Warnung.

Warning:  socket_set_option(): unable to set socket option [10022]: Ein ungültiges Argument wurde angegeben.
in C:\IP-Symcon\scripts\19620.ips.php on line 29
102Magic Packet sent (102) to 192.168.178.255, MAC=XX:XX:XX:XX:XX:XX

Hier die betroffene Zeile:

$opt_ret = socket_set_option($s, 1, 6, TRUE);

Die Werte für die Option passen nicht, ich nutze immer diese Optionen für Broadcast:


socket_set_option($s, SOL_SOCKET, SO_BROADCAST, 1);
socket_set_option($s, SOL_SOCKET, SO_REUSEADDR, 1);

Ist mit den Konstanten aus besser verständlich.
Michael

Mag sein, dass Port 15 nicht korrekt ist, es hat aber trotzdem funktioniert :confused:

Als IP Adresse sollte doch die Broadcast passen, die App auf dem Smartphone kennt ja auch nicht die richtige IP Adresse.
Bei Ausführen des Skriptes bekomme ich eine Laufzeit von 3ms angezeigt.

Mit der Option von Michael ist die Fehlermeldung unter Windows weg.

$opt_ret = socket_set_option($s, SOL_SOCKET, SO_BROADCAST, 1);

Ich habe die Änderung auch auf dem Tinkerboard übernommen.

Du musst aber beide eintragen.
Ansonsten kann es sein, dass wenn zeitgleich eine andere Anwendungen oder Script ebenfalls einen Broadcast senden will, es wieder fehlschlägt.
Michael