[PHP] Wake on Lan script

Pagina: 1
Acties:
  • 218 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • rvtk
  • Registratie: Juni 2001
  • Laatst online: 23:09
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.
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.

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Rechten.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • rvtk
  • Registratie: Juni 2001
  • Laatst online: 23:09
Wat bedoel je precies ?
(dat het iets met rechten te maken heeft begrijp ik ook wel)

Acties:
  • 0 Henk 'm!

Verwijderd

Ook als ik commandline als root het script uitvoer krijg ik Permission Denied.
Of je heb je server heel rot ingesteld (kan het wel eigenlijk), maar ik denk dat je (netwerk)dingen niet goed geinstalled.
Het probleem zit um blijkbaar niet in PHP.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

rvtk schreef op 17 February 2003 @ 17:22:
PS: In userspace moet het naar mijn idee draaien, het perl script werkt op dezelfde manier en deed het wel.
kan je je php niet dat perl scriptje laten uitvoeren :?

Acties:
  • 0 Henk 'm!

  • rvtk
  • Registratie: Juni 2001
  • Laatst online: 23:09
Erkens schreef op 17 februari 2003 @ 19:41:
[...]

kan je je php niet dat perl scriptje laten uitvoeren :?
Dat kan, dat werkt ook, maar ik wil het graag ombouwen tot php (zodat je geen perl support nodig hebt). Alleen wil het ombouwen dus niet echt lukken...

Acties:
  • 0 Henk 'm!

  • tomato
  • Registratie: November 1999
  • Niet online
rvtk schreef op 17 February 2003 @ 17:22:
het perl script werkt op dezelfde manier en deed het wel.
Doet het perl script het nu nog?

Waarom wil je eigenlijk af van het perl script?

Acties:
  • 0 Henk 'm!

  • tomato
  • Registratie: November 1999
  • Niet online
rvtk schreef op 17 February 2003 @ 20:21:
Dat kan, dat werkt ook, maar ik wil het graag ombouwen tot php (zodat je geen perl support nodig hebt). Alleen wil het ombouwen dus niet echt lukken...
Ok, de perl versie doet het dus blijkbaar nog.

Op zich mag je het van mij natuurlijk ombouwen naar PHP, maar de reden vind ik een beetje vreemd. Perl is op veel meer systemen standaard aanwezig dan PHP ;)

Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 13:29
Ik denk niet dat je kunt connecten naar een UDP poort.
Ik zou eens bij socket_sendto() kijken.
Aan de php handleiding heb je voor deze functies niet zo veel, dus ik er andere bronnen op naslaan.
Pagina: 1