Allumer un ordinateur à distance d’un simple clic? C’est possible avec WOL-jq.

Wake on LAN

Le “Wake on LAN” (abrégé en “WOL”) est une capacité proposée par les cartes réseaux et permettant de démarrer un ordinateur (ou n’importe quel matériel compatible) à distance.

Le fonctionnement du WOL est simple: un ordinateur va broadcaster un paquet réseau (dit “magique”) contenant l’adresse MAC de la carte réseau liée à l’ordinateur à réveiller.

Pour que le WOL fonctionne, il faut réunir plusieurs éléments:

  • une carte mère compatible (c’est le cas de toutes depuis longtemps)
  • une carte réseau compatible - merci Captain Obvious -
  • un ordinateur (ou un serveur) dans le même segment réseau (la plupart des switchs et firewall bloquent les paquets magiques à destination des autres réseaux).

Présentation rapide de WOL-jq

WOL-jq est une application Web prévue pour fonctionner avec Apache TomEE v8. Elle propose une liste d’ordinateur réveillable (sans tenir compte de leur état réel) et un filtre pour trouver facilement un ordinateur.

Screenshot

Configuration

Pour configurer WOL-jq, tout se passe dans le fichier configuration.js. Il faut indiquer le domaine auquelles appartiennent les machines puis la liste des dites machines (nom DNS, adresse mac, nom à afficher).

Détail de la communication

Structure du paquet magique

Ce paquet contient 102 octets exactement et est structuré comme suit:

  • les premiers octets contiennet la valeur 0xFF.
  • 16 fois l’adresse MAC convertie en entier (soit 6 octets).
  • 6 + 16 * 6 = 102 octets.

Exemple de paquet pour l’adresse MAC “01:F4:12:56:98:ED

    
 1[
 2	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
 3	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
 4	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
 5	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
 6	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
 7	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
 8	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
 9	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
10	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
11	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
12	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
13	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
14	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
15	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
16	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
17	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
18	0x01, 0xF4, 0x12, 0x56, 0x98, 0xED,
19]

Envoi du paquet

Comme on ne connait pas forcément l’adresse IP de la machine à réveiller (en DHCP et son bail est expiré par exemple), on va broadcaster le paquet en UDP. Tous les ordinateurs du segment vont recevoir le paquet (beaucoup de switchs et de firewall empêchent les paquets magiques de sortir du segment pour éviter d’arroser internet) et seul celui qui reconnait son adresse MAC va s’allumer.

Note: dans beaucoup de tutoriels, l’envoi du paquet est fait directement vers l’adresse IP de la machine concernée plutôt qu’en broadcast. Pour tester chez soi, pour autant qu’on soit en adresses IP fixes, ça fonctionne. Au delà de ce cas, il vaut mieux utiliser l’adresse broadcast.

Conclusion

Implémenter le Wake on LAN dans une application Java est plutôt simple et il est possible de proposer une application Web facile à héberger et à utiliser.

Code source

Comme annoncé dans l’article Fuyez GitHub, le code est disponible sur mon CodeBerg: https://codeberg.org/GoboTheGeek/WOL-jquery