You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2006-09-05 09:59:01

motsan
Member
From: Marseille
Registered: 2006-04-12
Posts: 528

Plugin CMD (function WOL) et WOL (en svn)

Bonjour,
La notion de wake on lan etant tres importante dans ma gestion, je me suis penché un peu dessus.
Apres la reprise de mes cours cisco, un peu de doc, d'ethereal (j'ai analysé des paquets provenant du WOL.exe de depicus.com)
Voila à quoi j'abouti :

definitions :
- broadcast : j'envoie à tous ceux de la meme classe de reseau.
- unicast :  j'envoie au PC qui m'interesse
- multicast :j'envoie à une selection de PC.
- directed broadcast : j'envoie à tous ceux qui sont dans une autres classe de reseau.

selon la méthode de diffusion les adresses MAC, les adresses IP, la facon de les encapsuler.... fait que y a plusieur facon de faire.

WOL : envoie d'un paquet UDP avec :
IP source : adresse IP du pc qui envoi le paquet.
IP destination : adresse de broadcast.
MAC source : Adresse MAC du pc qui envoi le paquet.
MAC destination : Adresse MAC du pc qui recoit le paquet.
Contenu du paquet : 6xFF + 16xMAC du poste à reveiller.

Le paquet est envoyé et broadcasté dans la foulé, le PC concerné recupere le paquet et s'allume, les autres laissant passer le paquet.

WOW : du WOL qui traverse des routeurs (changement de classe de reseau), moyennant une bonne config des routeurs.
IP source : adresse IP du pc qui envoi le paquet.
IP destination : adresse de broadcast  de la classe de reseau de destination (d'ou la necessité d'avoir l'IP et son subnet mask du PC distant et pour le routage du paquet).
MAC source : Adresse MAC du pc qui envoi le paquet.
MAC destination : Adresse MAC du routeur qui permet de sortir de cette classe de reseau.
Contenu du paquet : 6xFF + 16xMAC du poste à reveiller.

le paquet est envoyé au routeur (pas de XXXcast ici), le paquet est envoyé au routeur suivant (pas de XXXcast non plus) et quand arrivé au dernier routeur : broadcast, le PC concerné recupere le paquet et s'allume, les autres laissant passer le paquet.

Les seuls identifiants fiables sur un reseau etant les adresses MAC (niveau 2) et non pas les IP car elles peuvent changer, voila comment ca devrait se passer.

Passons à GLPI.
comment savoir si la machine à reveiller est dans la meme classe que le serveur http (le paquet partant du serveur hebergeant glpi) ?
La reponse permettra
  - de savoir quelle adresse IP de destination (broadcast ou directed broadcast)
  - quelle adresse MAC de destination (celle de la machine ou celle du routeur qui va router le paquet.

La problematique : si la machine n'est pas dans la meme classe : il faudra trouver un routeur dans la meme classe qui route bien vers l'adresse IP
de destination (car dans une meme classe il peut y avoir plusieurs routeurs qui ne routent pas aux meme endroits...)

j'ai quand meme fais des tests, je n'arrive pas a reveiller des machines dans une autre classe car dans le paquet je n'arrive pas à renseigner l'adresse mac du routeur...
je cherche toujours,

si vous avez des idees....

Last edited by motsan (2007-01-15 08:57:15)


Serveurs : Debian Wheezy (Apache 2.2.22, Php 5.4.4, mysql 5.5.31).
Logiciels : Firefox 30, 7z 9.20.
Plateforme en exploitation : GLPI 0.84.6/OCS 2.0.5 sur Debian Wheezy.
Plateforme en test : GLPI 0.84.6 sur Windows 7 SP1 x64 / WampServer 2.4 x64

Offline

#2 2006-09-07 20:43:08

motsan
Member
From: Marseille
Registered: 2006-04-12
Posts: 528

Re: Plugin CMD (function WOL) et WOL (en svn)

Y a quelqu'un ?


Serveurs : Debian Wheezy (Apache 2.2.22, Php 5.4.4, mysql 5.5.31).
Logiciels : Firefox 30, 7z 9.20.
Plateforme en exploitation : GLPI 0.84.6/OCS 2.0.5 sur Debian Wheezy.
Plateforme en test : GLPI 0.84.6 sur Windows 7 SP1 x64 / WampServer 2.4 x64

Offline

#3 2006-09-08 09:16:28

Jm0u
Member
Registered: 2005-01-05
Posts: 910

Re: Plugin CMD (function WOL) et WOL (en svn)

Tu attend quoi de nous ?
Ta réflexion est bonne quand passe tu a l'action ?

Jm0u


Navigateurs : Chrome
Installation : Package GLPI 0.84.2
Serveur  : Apache 2 / Base : 5.0.15 / Langage : PHP 4.4.1 pl1 / PhpMyAdmin 2.6.4-pl3

Offline

#4 2006-09-08 17:28:44

motsan
Member
From: Marseille
Registered: 2006-04-12
Posts: 528

Re: Plugin CMD (function WOL) et WOL (en svn)

Ba en faite, je voulais
1 - etre sur que mon raisonnement est bon (est ce que mon raisonnement reseau tient la route : confirmation par des gens + calé que moi).
2 - que ca convienne à l'equipe de dev (je m'investi alors dans le plugin).
3 - je suis bloqué :
    a- je n'arrive pas a creer un paquet UDP avec une adresse MAC du routeur en destination.
    b- je ne sais pas trop encore comment parcourir les tables pour relier le PC qui envoi le WOL au pc qui recoit le WOL
       (pb meme classe de reseau, trouver le bon routeur....)

Si y a quelqu'un qui peut me confirmer le premier point, je pense que le second ne pose pas de pb, quand au 3eme, je manque de connaissance. (pour le point a : j'espere que quelqu'un va pouvoir m'aider, pour le point b, je ferais un peu d'analyse et si besoin je demanderais au dev team)


Serveurs : Debian Wheezy (Apache 2.2.22, Php 5.4.4, mysql 5.5.31).
Logiciels : Firefox 30, 7z 9.20.
Plateforme en exploitation : GLPI 0.84.6/OCS 2.0.5 sur Debian Wheezy.
Plateforme en test : GLPI 0.84.6 sur Windows 7 SP1 x64 / WampServer 2.4 x64

Offline

#5 2007-01-14 02:49:28

tsmr
GLPI-DEV
From: Rennes
Registered: 2005-08-26
Posts: 11,632
Website

Re: Plugin CMD (function WOL) et WOL (en svn)

Ca c'est du raisonnement réseau. J'ai rien compris lol


Xavier Caillaud
Blog GLPI Infotel

Offline

#6 2007-07-05 13:25:29

remy_d1
Member
Registered: 2007-05-21
Posts: 25

Re: Plugin CMD (function WOL) et WOL (en svn)

Bonjour, cela est très intéressant.

D'après Wikipedia, sur le Wake On Lan :

Il est intéressant de noter qu'il est possible de lancer un Wake-on-LAN à travers Internet, vers une machine située derrière un routeur NAT, mais ceci sous certaines conditions :
le paquet magique doit être un paquet UDP, dont le port utilisé est redirigé vers l'adresse IP de la machine qui doit être réveillée. L'ordinateur étant éteint, il faut alors configurer de manière permanente l'association Adresse MAC/Adresse IP dans la table ARP du routeur (dans le cas contraire, cette association expire dans le routeur au bout de 5 minutes environ, et le paquet magique ne sera pas dirigé vers la machine)

Toujours sur Wikipedia, un lien vers un script php pour le WoL :
http://phrackattack.net/2006/11/15/wake-on-lan/


Ne serait-il pas intéressant d'essayer d'associer ce plugin a ce qui se fait déjà au niveau SNMP (notamment pour la gestion des onduleurs) ?

Offline

#7 2007-07-05 17:19:02

motsan
Member
From: Marseille
Registered: 2006-04-12
Posts: 528

Re: Plugin CMD (function WOL) et WOL (en svn)

@remy_d1 : tu peux envoyer le lien vers l'article du wikipedia.


Serveurs : Debian Wheezy (Apache 2.2.22, Php 5.4.4, mysql 5.5.31).
Logiciels : Firefox 30, 7z 9.20.
Plateforme en exploitation : GLPI 0.84.6/OCS 2.0.5 sur Debian Wheezy.
Plateforme en test : GLPI 0.84.6 sur Windows 7 SP1 x64 / WampServer 2.4 x64

Offline

#8 2007-07-06 08:48:04

remy_d1
Member
Registered: 2007-05-21
Posts: 25

Re: Plugin CMD (function WOL) et WOL (en svn)

Bonjour,

Google est ton ami .... Enfin :

http://fr.wikipedia.org/wiki/Wake-on-LAN

Offline

#9 2007-07-06 08:57:25

motsan
Member
From: Marseille
Registered: 2006-04-12
Posts: 528

Re: Plugin CMD (function WOL) et WOL (en svn)

Hier, hyper taff + cde la vrai flemardise, je te rassure,
merci quand meme


Serveurs : Debian Wheezy (Apache 2.2.22, Php 5.4.4, mysql 5.5.31).
Logiciels : Firefox 30, 7z 9.20.
Plateforme en exploitation : GLPI 0.84.6/OCS 2.0.5 sur Debian Wheezy.
Plateforme en test : GLPI 0.84.6 sur Windows 7 SP1 x64 / WampServer 2.4 x64

Offline

#10 2007-07-09 13:17:13

motsan
Member
From: Marseille
Registered: 2006-04-12
Posts: 528

Re: Plugin CMD (function WOL) et WOL (en svn)

suite consultation wiki + quelques outils,
J'arrive a reveiller une machine en passant au moins par deux routeur (celui de mon site et celui du site distant, mais comme ya FT au milieu, il y a peut etre plus de routeurs).

bref, je dois tester quelques truc, et je vous tiens au courant


Serveurs : Debian Wheezy (Apache 2.2.22, Php 5.4.4, mysql 5.5.31).
Logiciels : Firefox 30, 7z 9.20.
Plateforme en exploitation : GLPI 0.84.6/OCS 2.0.5 sur Debian Wheezy.
Plateforme en test : GLPI 0.84.6 sur Windows 7 SP1 x64 / WampServer 2.4 x64

Offline

#11 2008-02-25 14:45:30

jsh
Member
Registered: 2008-02-25
Posts: 1

Re: Plugin CMD (function WOL) et WOL (en svn)

Hello,

Vu que j'en avais besoin, j'ai un chouïa modifié le plugin cmd pour que la commande "Wake On Lan" envoie le magic paquet à destination de l'adresse de broadcast du sous-réseau sur lequel se trouve la machine concernée. Ça fonctionne bien chez moi.
Dans le cas où l'interface de la machine ne comporte pas le masque, on retombe dans le multicast d'origine (qui ne fonctionne pas chez moi pour cause de routage inter-VLANs).
Si ça intéresse qqun, voici le diff avec la version 1.0 de cmd :

diff -Bbwru cmd/front/plugin_cmd.massif.php glpi-plugin-cmd/front/plugin_cmd.massif.php
--- cmd/front/plugin_cmd.massif.php    2007-12-21 06:27:33.000000000 +0100
+++ glpi-plugin-cmd/front/plugin_cmd.massif.php    2008-02-19 11:53:58.575824743 +0100
@@ -71,9 +71,11 @@
         if ($DB->numrows($result)>0){

             while ($data=$DB->fetch_array($result)){

                 if (($data["ifaddr"]&&$data["ifaddr"]!='0.0.0.0') || $data["ifmac"]){

+                    $ipmac[$i]['host'] = $ci2->getName();

                     $ipmac[$i]['name']=$data["name"];

                     $ipmac[$i]['ifaddr']=$data["ifaddr"];

                     $ipmac[$i]['ifmac']=$data["ifmac"];

+                    $ipmac[$i]['netmask']=$data["netmask"];

                 }

                 $i++;

             }

@@ -132,8 +134,8 @@
             if ($device_type!=NETWORKING_TYPE){

                 if (count($ipmac)>0){

                         foreach ($ipmac as $key => $val){

-                            echo "<p><b>$cmd ->".$val['ifmac']."</b></p>";

-                            $command=sendmagicpacketcmd($val['ifmac']);    

+                            echo "<p><b>$cmd -> " . $val['host'] . " (" . $val['ifmac'] . ")</b></p>";

+                            $command=sendmagicpacketcmd($val['ifmac'], $val['ifaddr'], $val['netmask']);    

                             

                         }

                     }

@@ -194,8 +196,8 @@
             if ($device_type!=NETWORKING_TYPE){

                 if (count($ipmac)>0){

                         foreach ($ipmac as $key => $val){

-                            echo "<p><b>$cmd ->".$val['ifmac']."</b></p>";

-                            $command=sendmagicpacketcmd($val['ifmac']);    

+                            echo "<p><b>$cmd -> " . $val['host'] . " (" . $val['ifmac'] . ")</b></p>";

+                            $command=sendmagicpacketcmd($val['ifmac'], $val['ifaddr'], $val['netmask']);    

                             

                         }

                     } 

diff -Bbwru cmd/inc/plugin_cmd.functions_display.php glpi-plugin-cmd/inc/plugin_cmd.functions_display.php
--- cmd/inc/plugin_cmd.functions_display.php    2007-12-21 06:27:33.000000000 +0100
+++ glpi-plugin-cmd/inc/plugin_cmd.functions_display.php    2008-02-19 10:49:57.856954450 +0100
@@ -189,7 +189,7 @@
 /*DoMagicPacket : Fabrique le "paquet magic" permettant le "reveil" des PC

   Description du paquet :

 header : 6 octets de valeur 0xff

-corps : on repete 16 fois l'adresse MAC du pc a réveiller

+  corps : on repete 16 fois l'adresse MAC du pc a rï¿œveiller

  */

 

 

@@ -199,7 +199,7 @@
     for ($i=0;$i<6; $i++)

         $p_header .= chr(0xff);

 

-    //Les adresses MAC doivent etre séparées par des ":"

+      //Les adresses MAC doivent etre sï¿œparï¿œes par des ":"

     //c'est normalement le cas si les donnees ont ete importees avec OCS    

     $fragment = explode(":",$MacAddress);

     $body = '';

@@ -217,63 +217,62 @@
 

 //envoie le packet magique en UDP

 //broacast ip => Ne passe pas les routeurs

-function sendmagicpacketcmd($macaddress){

+  function sendmagicpacketcmd($macaddress, $ifaddr = null, $netmask = null){

 global $LANGCMD;

     $packet = DoMagicPacketcmd($macaddress);

     

+      $ip = ip2long($ifaddr);
+      $mask = ip2long($netmask);
+      $broadcast = null;
+      // Si l'IP et le masque sont fournis (et sont valides) on tente de calculer l'adresse de broadcast du reseau
+      if (! $ip != -1 && $mask != -1) {
+          $mask = ~ $mask;
+          $broadcast = long2ip($ip | $mask);
+      }
+

     $error = 0;

+      $mcastaddr = "224.0.0.1";
+
+      if (is_null($broadcast)) {

     //j'arrive pas a faire du broadcast avec cette methode alors c'est du multicast pour tous les 

     //postes d'un ss reseau

-    $sock = fsockopen("udp://224.0.0.1",9 ,$errno, $errostr);

-    if(!$sock)

-    {

-        echo $LANGCMD["cmd"][16]." : ".utf8_encode($errostr)." ".utf8_encode($errno)."<BR>";

+          $sock = fsockopen("udp://" . $mcastaddr, 9, $errno, $errostr);

+          if(!$sock) {

+              echo $LANGCMD["cmd"][16] . " : " . utf8_encode($errostr) . " " . utf8_encode($errno) . "<br />";

         $error = 1;

-        

-    }

-    else

-    {    

+          } else {

         fwrite($sock, $packet);

         fclose($sock);

     }

-

-    //Cette methode fonctionne également mais nécessite que php soit compilé avec les sockets

-    // décommentez cette section si vous voulez utiliser du broadcast ( et n'oubliez pas de décommenter celle du dessus :) )

-    // et si vous avez compilé php avec les sockets

-    /*     $sock = socket_create(AF_INET, SOCK_DGRAM, 0);

-        if($sock < 0)

-        {

+      } else {

+          // Cette methode necessite que php soit compile avec les sockets
+        $sock = socket_create(AF_INET, SOCK_DGRAM, 0);

+        if($sock < 0) {

         echo "Erreur de creation socket : " . strerror($sock) . "\n";

-        $erreur = 1;

-        }

-        else 

-        {

+            $error = 1;

+        } else {

         $opt_ret = socket_set_option($sock, 1, 6, TRUE);

-        if($opt_ret < 0)

-        {

-        echo "Erreur lors de la définition des options : " . strerror($opt_ret) . "\n";

+            if($opt_ret < 0) {

+                echo "Erreur lors de la definition des options : " . strerror($opt_ret) . "\n";

         $error = 1;

-        }

-        else 

-        {

-        $send_ret = socket_sendto($sock, $packet, strlen($packet), 0, '255.255.255.255',9);

-        if($send_ret < 0)

-        {

+            } else {

+                $send_ret = socket_sendto($sock, $packet, strlen($packet), 0, $broadcast, 9);

+                if ($send_ret < 0) {

         echo "Erreur lors de l'envoi du paquet " . strerror($send_ret) . "<BR>\n";

         $error = 1;

+                } else {
+                    socket_close($sock);
         }

-        else socket_close($sock);

         }

         }    

-     */

-    

-    if ($error!=1)

-        echo $LANGCMD["cmd"][15]." ".$macaddress;

-    else echo $LANGCMD["cmd"][17];

-    

-

 }

 

+      if ($error != 1) {
+          $txt = is_null($broadcast) ? $mcastaddr : $broadcast; 
 

-

+        echo $LANGCMD["cmd"][15] . " " . $macaddress . " (" . $txt . ")";
+      } else {
+        echo $LANGCMD["cmd"][17];
+      }

+  }

 ?>

Désolé si le formatage est mauvais. Je peux l'envoyer en direct si besoin.

Offline

#12 2008-02-26 00:16:35

tsmr
GLPI-DEV
From: Rennes
Registered: 2005-08-26
Posts: 11,632
Website

Re: Plugin CMD (function WOL) et WOL (en svn)


Xavier Caillaud
Blog GLPI Infotel

Offline

Board footer

Powered by FluxBB