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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 047 fois - Téléchargée 18 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_olbou621
Messages postés
9
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
2 novembre 2008

Je suis désolé, mais cette source ne fonctionne qu'en PHP5 :-((.
Je te conseil d'ailleurs de quitter PHP4 qui me semble... disons ... un peu dépassé.
Tu insiste? Bon d'accord. Essaye ce code (sans engagement de ma part car je n'ai plus d'environnement PHP4).
Pour finir, j'ai quand même un doute à cause de tes erreurs sur la fonction fsockopen().

Bon courage et tiens nous au courant ;-)

<?php

function wake($mac){
$nic = fsockopen("udp://255.255.255.255", 9);
if( !$nic ){
fclose($nic);
return false;
}
else{
fwrite($nic, $pacquet($mac));
fclose($this->nic);
return true;
}
}

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;
}


// Remplacer 001122334455 par l'adresse mac du pc à allumer
wake('001122334455');

?>
cyberhunter
Messages postés
7
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
16 décembre 2009

PHP 4.3.2

Merci
cs_olbou621
Messages postés
9
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
2 novembre 2008

Quelle version de PHP utilise tu ?
cyberhunter
Messages postés
7
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
16 décembre 2009

Bonjour,

cette source ne marche pas sur mon réseau local
j'ai la même erreur que lassie14

Warning: fsockopen(): php_hostconnect: connect failed in /var/www/html/applications/gestion_wol/fonctions.inc.php on line 78

Warning: fsockopen(): unable to connect to 255.255.255.0:9 in /var/www/html/applications/gestion_wol/fonctions.inc.php on line 78

Warning: fclose(): supplied argument is not a valid stream resource in /var/www/html/applications/gestion_wol/fonctions.inc.php on line 80

pourtant je suis bien sur un réseau local :s

A+
Arnaud
cs_olbou621
Messages postés
9
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
2 novembre 2008

salut,

CHR(num) est une fonction qui revoie le caractère correspondant au chiffre "num".

Exemple chr(0x41) retourne A chr(0x42) retourne B ... etc

0xFF cad FF en hexa c'est ... 255 en décimale

chr(0xFF) me permet d'inscrire dans une chaine le caractère FF (255 de la table ascii). Caractère qui n'est pas imprimable.

Pourquoi écrire le caractère FF. Je te conseil de visité le site de wikipédia au sujet du wake on line http://fr.wikipedia.org/wiki/Wake-on-LAN .

Bon courage

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.