Atelier : Wake-On-LAN.



Information sur... le Wake-On-LAN.

Qu'est-ce que c'est ?

C'est la possibilité d'allumer des ordinateurs distants grâce à un paquet spécifique envoyé sur le réseau.

Comment ça marche ?

Lorsque le PC est éteint, la carte réseau est toujours active, et écoute le réseau, en attendant un paquet spécial. Ce paquet doit contenir une séquence précise, mais cette séquence peut être encapsulée dans n'importe quel protocole (IPX, IP, etc.).

Cela marchera à condition que :

  • la carte réseau et la carte mère soient prévues pour,
  • elles soient reliées ensembles par un connecteur spécial à 3 broches
  • le BIOS soit configuré pour rendre actif (enable) le Wake-On-LAN.

Quelle est la séquence spéciale à envoyer ?

L'octet FF répété 6 fois, puis l'adresse MAC de la machine à réveiller, répétée 16 fois. Par exemple, si l'adresse MAC de la machine est 00-50-FC-47-54-20, alors le paquet est :

FFFFFFFFFFFF 0050FC475420 0050FC475420 0050FC475420 0050FC475420 0050FC475420 0050FC475420 0050FC475420 0050FC475420 0050FC475420 0050FC475420 0050FC475420 0050FC475420 0050FC475420 0050FC475420 0050FC475420 0050FC475420


1
Démarrer un projet Visual Basic.
2
Notez l'adresse MAC de la machine à réveiller.
3
Transformer l'adresse MAC alphanumérique
en adresse MAC numérique.

Et là ou ça se complique dans l'explication, c'est que on va continuer à la stocker dans une chaîne de caractères (type String), parce que c'est ce qu'il y a de plus simple à manipuler, du moins tant qu'il n'existe pas de type entier sur 6 octets.

On veut créer Adresse_MAC_Octale à partir de Adresse_MAC, voici le principe de la transformation :

Adresse_MAC
Valeur de l'octet 48 48 45 53 48 45 70 67 45 52 55 45 53 52 45 50 48
Caractère ASCII
Correspondant
"0" "0" "-" "5" "0" "-" "F" "C" "-" "4" "7" "-" "5" "4" "-" "2" "0"
Adresse_MAC_Octale
Valeur
de l'octet
en décimal 0 80 252 71 84 32 (le caractère ASCII correspondant n'a pas
de signification particulière, il est quelconque).
en Hexa 0 50 FC 47 54 20

Pour faire cette transformation, vous avez besoin de combiner les étapes suivantes :

Pour vérifier si Adresse_MAC_Octale a bien été construite, vous pouvez tapez le petit code suivant (qui, pour notre exemple, devrait afficher 0 50 FC 47 54 20) :

For i = 1 to 6
  Debug.Print Hex(Asc(Mid(Adresse_MAC_Octale, i, 1)))
Next

4
Construction du paquet à envoyer.

Votre code doit maintenant construire le paquet à envoyer.

Rappels sur... La boucle For.

For est la structure de boucle la plus adaptée lorsque le nombre d'itérations est connu d'avance. Par exemple ici, on peut utiliser :

For compteur = 1 to 16
   ...
Next compteur

compteur est une variable de type numérique. Son contenu va varier de 1 à 17 au fur et à mesure des itérations, ce qui est très utile par exemple pour indicer un tableau. Les instructions placées entre le For et le Next vont s'exécuter 16 fois.


5
Envoi par le contrôle Winsock.

L'envoi, très simple, se fait grâce à la commande :

Winsock1.SendData Magic_Packet

Normalement, la machine visée devrait s'allumer. Si ce n'est pas le cas, n'oubliez pas de vérifier, en plus de votre code, que :

6
Amélioration possibles.

Développez une interface graphique qui permette de saisir plus simplement la machine à allumer, par exemple comme sur la capture ci-contre.

On pourrait également faire une liste déroulante où il n'y aurait qu'à choisir l'adresse de la machine, au lieu de la ressaisir à chaque fois.

Mieux encore, on pourrait remplacer dans la liste l'adresses MAC par le nom de la machine, pour que l'information soit la plus claire possible pour l'utilisateur.

Remarquez également le monitoring, qui affiche le contenu du paquet envoyé.


Sébastien PASTORE.