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
1007
14. September 2019 um 09:34
2
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 ?
Najuka
14. September 2019 um 10:05
3
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.
1007
14. September 2019 um 15:18
5
Am Script selbst kann es nicht liegen. Der Code ist bei mir komplett identisch und laeuft.
Bekommst du als Rueckgabewert fuer $ret eine Zahl ?
Najuka
14. September 2019 um 17:18
6
Euer Script bringt bei mir folgende Meldung:
Warning: fsockopen(): unable to connect to udp://192.168.178.255:15 (Keine Berechtigung)
1007
14. September 2019 um 17:27
7
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
Najuka
14. September 2019 um 17:33
8
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)
ralf
14. September 2019 um 17:41
9
. 255 ist eigentlich die Broadcast Adresse, die kann dein Gerät nicht haben.
1007
14. September 2019 um 17:41
10
Hab eben das gefunden :
Wake On Lan: fsockopen - Keine Berechtigung
Gesendet von iPad mit Tapatalk
Najuka
14. September 2019 um 17:51
11
Das passt.
Das Magic-Packet wird per Broadcast gesendet. Die Geräteadressierung erfolgt über die MAC-Adresse der Netzwerkschnittstelle.
Najuka
14. September 2019 um 17:57
12
1007:
Hab eben das gefunden :
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
Najuka
14. September 2019 um 20:19
14
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.
1007
14. September 2019 um 20:50
15
Habs nicht getestet , aber funktioniert das auch unter Windows ?
Najuka
14. September 2019 um 21:31
16
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
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.
Najuka
14. September 2019 um 21:54
19
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