Eerst had ik een perl script gebruikt om via WakeOnLan computers in mijn netwerk aan te zetten. Het script komt op een linux routertje te draaien (redhat7.2/apache 1.3.23/php 4.1.2)Nu wil ik dat via PHP doen. Daarvoor heb ik het volgende script gevonden, maar dat werkt niet.
Na het uitvoeren van het script krijg ik de volgende foutmelding:
Warning: socket_connect() unable to connect [13]: Permission denied in /var/www/html/intranet/wol3.php on line 17
connection failed Error:Permission denied
Het probleem zit hem ergens in het ip-adres dat wordt gebruikt. Als ik ipv 255.255.255.255 mijn eigen ip invul dan krijg ik de foutmelding niet en wordt er een pakketje verstuurd (te zien via tcpdump). Als ik een ipadres gebruik van de computer die online gebracht moet worden, dan werkt het niet. Wel wordt er een ARP gedaan voor dat ipadres, maar dat mislukt omdat de computer niet aanstaat. Ook als ik commandline als root het script uitvoer krijg ik Permission Denied.
Het kan ook zijn dat ik de verkeerde socket commando's gebruik, jammer genoeg staat er in de handleiding van PHP heel weinig over geschreven.
Iemand die een idee heeft waarom het niet wilt werken ?
PS: In userspace moet het naar mijn idee draaien, het perl script werkt op dezelfde manier en deed het wel.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| <? function WakeOnLan($addr, $mac) { # (C)opyright 2K2 hotkey@spr.at $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!\n"; echo "Error:".socket_strerror(socket_last_error($s)); } else { $e = socket_connect($s, $addr, 9); if ($e == false) { echo "connection failed\n"; echo "Error:".socket_strerror(socket_last_error($s)); } else { $e = socket_setopt($s, SOL_SOCKET, SO_BROADCAST, 1); $e = socket_write($s, $msg, strlen($msg)); socket_close($s); echo "Magic Packet sent (".$e.") to ".$addr.", MAC=".$mac; } } } WakeOnLan('255.255.255.255', 'MAC:MAC:MAC:MAC:MAC:MAC'); #put the MAC-to-be-woken here! # IP must be 255.255.255.255 - at least it didnt work otherwise... ?> |
Na het uitvoeren van het script krijg ik de volgende foutmelding:
Warning: socket_connect() unable to connect [13]: Permission denied in /var/www/html/intranet/wol3.php on line 17
connection failed Error:Permission denied
Het probleem zit hem ergens in het ip-adres dat wordt gebruikt. Als ik ipv 255.255.255.255 mijn eigen ip invul dan krijg ik de foutmelding niet en wordt er een pakketje verstuurd (te zien via tcpdump). Als ik een ipadres gebruik van de computer die online gebracht moet worden, dan werkt het niet. Wel wordt er een ARP gedaan voor dat ipadres, maar dat mislukt omdat de computer niet aanstaat. Ook als ik commandline als root het script uitvoer krijg ik Permission Denied.
Het kan ook zijn dat ik de verkeerde socket commando's gebruik, jammer genoeg staat er in de handleiding van PHP heel weinig over geschreven.
Iemand die een idee heeft waarom het niet wilt werken ?
PS: In userspace moet het naar mijn idee draaien, het perl script werkt op dezelfde manier en deed het wel.