begin process at 2010 02 10 00:44:10
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > ALLUMER UNE MACHINE DANS UN RÉSEAU (WAKE ON LAN)

ALLUMER UNE MACHINE DANS UN RÉSEAU (WAKE ON LAN)


 Information sur la source

Note :
8 / 10 - par 3 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseau & Internet Classé sous :Wakeonlan, WOL, réveiller, réveil, wake Niveau :Initié Date de création :18/01/2008 Vu :10 417

Auteur : olbou621

Ecrire un message privé
Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

 Description

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

  • <?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');
  • ?>
<?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.


 Sources de la même categorie

SONDAGE - VOTE - POLL (AVEC MYSQL) par hornet_bzz
Source avec Zip Source avec une capture CRAYONPRO EST UN CMS SIMPLE EN PHP ET MYSQL - INSTALLATION E... par crayoncie
Source avec Zip Source avec une capture LISTENGEN GÉNÉRATEUR DE FICHIER PLAYLIST par AGG
Source avec Zip IP CALCULATOR par X_Cli
Source avec Zip Source avec une capture WHOIS DOMAIN CLASS : LOOKUP & AVAIBILITY par aKheNathOn

 Sources en rapport avec celle ci

Source avec Zip WAKE ON LAN (WAN) RÉVEILLER SA MACHINE SUR INTERNET par gmni

Commentaires et avis

Commentaire de yoman64 le 18/01/2008 10:45:28 7/10

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.

@+

Commentaire de olbou621 le 18/01/2008 11:33:18

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.

@+

Commentaire de yoman64 le 18/01/2008 13:22:03

Au passage je te pris de m'escuser tu vérifie bien si le socket s'ouvre, j'avais pas fait attention :).

Commentaire de jantosze le 19/01/2008 14:34:30

Salut,

Sujet intéressant. Au même titre du contrôle de l'ouverture de la socket, avant je ferai un test sur la longueur de la mac adresse en cas d'erreur de saisie.

cdt
JAN

Commentaire de valneandre le 21/01/2008 09:00:50 7/10

Intéressante ressource système, ça change un peu des bouts de code frimeurs qui nous arrivent en surnombre.
merci.
Valnéandre

Commentaire de yuuzhantar le 22/01/2008 21:17:38 10/10

Salut

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

merci

Commentaire de herrads le 30/01/2008 18:01:47

je viens de le voir. Je l'ai souvent plutôt fait en batch
Merci de l'info

Commentaire de lassie14 le 04/02/2008 19:53:24

je n'arrive pas a faire marcher ta source
je l'ai essayez chez free il sont en php 4 j'ai donc enlever les private et public
ça marchait toujours pas j'ai donc supprimer la classe et enlever tous ce qui faut
et maintenantj'ai une erreur a l'ouverture du socket:
Warning: fsockopen() [function.fsockopen]: unable to connect to 255.255.255.255:9 in /mnt/129/sdc/8/1/****/wake.php on line 5

Warning: fclose(): supplied argument is not a valid stream resource in /mnt/129/sdc/8/1/******/wake.php on line 7

Commentaire de olbou621 le 05/02/2008 08:04:37

Cette source est destinée à un lan. Sur internet, (chez FREE par exemple) il est probable que l'adresse 255.255.255.255 soit bloquée.
Les trames ont dèjà beaucoup de mal à passer un simple routeur ... alors chez un hebergeur, je pense que cela ne peut pas aller bien loin.

@+

Commentaire de starfix2006 le 30/05/2008 09:49:58

On arrive à des trucs pas trop mal chez Free en se creusant un peu la tête...
Pour preuve: http://wakeonwan.free.fr

Commentaire de olbou621 le 30/05/2008 18:34:20

Génial

édite le code source et je t'édite un billet de 5 euros !

Commentaire de Crafty57 le 31/05/2008 15:22:00

Salut,

Je trouve ton code super intéressant.
Je viens de le tester dans une application que je développe.

Par contre je ne comprends pas cette partie :

for($i = 0; $i < 6; $i++){    
    $packet .= chr(0xFF);
}                            

A quoi sert la fonction chr ? J'ai regarder sur PHP.net mais j'ai pas compris :s
Pourquoi 0xFF ? Ca correspond à quoi ?

Merci d'avance :)

Commentaire de olbou621 le 31/05/2008 17:07:42

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

Commentaire de cyberhunter le 15/12/2009 15:57:19

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

Commentaire de olbou621 le 15/12/2009 16:07:47

Quelle version de PHP utilise tu ?

Commentaire de cyberhunter le 16/12/2009 19:53:03

PHP 4.3.2

Merci

Commentaire de olbou621 le 20/12/2009 16:01:55

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');

  ?>

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Wake on lan [ par Elektordi ] Est-ce que quelqu'un sait commant allumer un PC a distance (qui supporte le WOL) via une interface PHP tournant sur un serveur siué sur le même réseau wake on lan [ par salehtch ] SAS salut offaite j ai de probleme avec le wake on lan je ve le fonctionné via le internet en local sa marche mais je l es fai avec le magik packe


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,030 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales