Allumer une machine dans un réseau (wake on lan)

4/5 (17 avis)

Snippet vu 17 557 fois - Téléchargée 20 fois

Contenu du snippet

Un wake on lan que j'ai déjà publié sur le forum.
Je pense qu'il sera plus visible ici vu les difficultés que j'ai eu à trouver des renseignements pour ecrire cette source en php.
Le principe :
On ouvre une socket sur le réseau et on broadcast FF FF FF FF FF FF + 16 * l'adresse mac de la machine à réveiller

Source / Exemple :


<?php 

 class Wol{
   private $nic;
     public function wake($mac){ 
         $this->nic = fsockopen("udp://255.255.255.255", 9); 
         if( !$this->nic ){ 
             fclose($this->nic); 
             return false; 
         } 
         else{ 
             fwrite($this->nic, $this->pacquet($mac)); 
             fclose($this->nic); 
             return true; 
         } 
     } 
 
     private function pacquet($Mac){ 
         $packet = ""; 
         for($i = 0; $i < 6; $i++){$packet .= chr(0xFF);} 
         for ($j = 0; $j < 16; $j++){
          for($i = 0; $i < 12; $i=$i + 2){$packet .= chr(hexdec(substr($Mac, $i, 2)));} 
         }
         return $packet; 
     } 
 } 

 $wol = new Wol();   
//   Remplacer    001122334455   par l'adresse mac du pc à allumer         
 $wol->wake('001122334455');      

?>

Conclusion :


Cette source est écrite en php5 mais si on supprime les "Public/Private" ... on se retrouve en php4.

A voir également

Ajouter un commentaire Commentaires
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
18 janv. 2008 à 10:45
Salut,

Cette source est intéressante et je ne me souviens pas en avoir déja vu une de ce genre ici :).

Juste deux petites remarques:

Ici: for($i = 0; $i < 6; $i++){$packet .= chr(0xFF);}
Pourquoi faire un for, c'est pas très utile il me semble qu'un $packet = "\xFF\xFF\xFF\xFF\xFF\xFF"; suffierait emplement.

Et une gestion au moin minimal des erreurs serait bien, vérification si le mac est valide, si le socket s'ouvre bien.

@+
cs_olbou621 Messages postés 9 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 2 novembre 2008
18 janv. 2008 à 11:33
Bonjour,

Je suis tout à fait d'accord avec toi. Il y aurait beaucoup à dire sur cette source mais son but est avant tout de donner quelque chose qui fonctionne.
Le principe du wake on lan en php si tu veux.
Charge reste à l'utilisateur d'adapter et de gérer les erreurs.

@+
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
18 janv. 2008 à 13:22
Au passage je te pris de m'escuser tu vérifie bien si le socket s'ouvre, j'avais pas fait attention :).
valneandre Messages postés 35 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 18 septembre 2009
21 janv. 2008 à 09:00
Intéressante ressource système, ça change un peu des bouts de code frimeurs qui nous arrivent en surnombre.
merci.
Valnéandre
yuuzhantar Messages postés 1 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 22 janvier 2008
22 janv. 2008 à 21:17
Salut

je ne savais pas qu'on pouvais faire des sockets en php
tu viens de m'apprendre quelque chose

merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.