(modifié le 15 janvier 2013 à 22:55)

Si vous avez pour habitude d'éparpiller des PC un peu partout géographiquement parlant, alors le fait de pouvoir les allumer (et donc les éteindre) à distance doit vous intéresser. Pour cela il est nécessaire d'utiliser la technique du réveil à distance Wake on Wan qui pourrait se traduire par "allumer (un ordinateur) à travers le réseau internet".

Le WoW n'est autre que du Wake On Lan à travers Internet au lieu d'un réseau local, je ne rentrerai pas dans les détails de la mise en place qui nécessiterait un billet à elle tout seule. Pour faire simple l'idée c'est d'allumer un PC depuis n'importe où dans le monde dans le but de se connecter à distance (bureau à distance, ssh, vnc, http, etc.).

De nombreux sites et logiciels permettent le réveil à distance via WoW, c'est à dire l'envoie de la trame magique, le plus connu étant Depicus qui fournit une interface web, SOAP, en ligne de commande, une application iPhone/Android et j'en passe. Si vous êtes en IP fixe le recourt à ce type de service extérieur peu s'avérer dangereux dans le cas où le site exploite votre IP et l'adresse mac de la ou les machines à réveiller... car vous ne pourrez pas en changer. Seul le port est parfois paramétrable, le port 7 et 9 étant les plus utilisés.

Si vous aimez faire votre tambouille vous pouvez déclencher le réveil via un simple script PHP. Libre à vous ensuite de vous faire une interface agréable et (surtout) protégée par un .htaccess ou tout autre moyen (soyez imaginatif). Il existe de nombreux scripts sur la toile pour envoyer le paquet magique mais certains nécessitent une configuration et/ou des autorisations particulières pour fonctionner. Dans le cas où vous utilisez un hébergeur mutualisé ces scripts sont inopérants. Le seul script efficace que j'ai trouvé sur un site américain fonctionne même sur les pages persos Free.fr, réputées pour être restrictive.

<?php
# Wake on LAN - (c) HotKey@spr.at, upgraded by Murzik
# Modified by Allan Barizo http://www.hackernotcracker.com
# Translated by Mr Xhark http://blogmotion.fr
flush();

// Numéro du port d'écoute de l'ordinateur cible. Habituellement tout port compris entre 1 et 50000 fonctionnera mais les ports 7 ou 9 sont à privilégier.
$socket_number = "9";
// Adresse MAC du périphérique réseau de l'ordinateur cible
$mac_addy = "aa:bb:cc:dd:ee:ff";
// Adresse IP de l'ordinateur cible (ip publique de votre routeur/modem). Entrez le nom de domaine si vous en utilisez-un (tel que Dynamic DNS/IP).
$ip_addy = gethostbyname("monpc.dyndns.org");

## fonction ##
function WakeOnLan($addr, $mac,$socket_number) {
  $addr_byte = explode(':', $mac);
  $hw_addr = '';
  for ($a=0; $a <6; $a++) $hw_addr .= chr(hexdec($addr_byte[$a]));
  $msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255);
  for ($a = 1; $a <= 16; $a++) $msg .= $hw_addr;
  // send it to the broadcast address using UDP
  // SQL_BROADCAST option isn't help!!
  $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
  if ($s == false) {
	echo "Erreur lors de la création du socket!\n";
	echo "Code d'erreur: '".socket_last_error($s)."' - " . socket_strerror(socket_last_error($s));
	return FALSE;
	}
  else {
	// setting a broadcast option to socket:
	$opt_ret = socket_set_option($s, 1, 6, TRUE);
	if($opt_ret <0) {
	  echo "setsockopt() a échoué, erreur: " . strerror($opt_ret) . "\n";
	  return FALSE;
	  }
	if(socket_sendto($s, $msg, strlen($msg), 0, $addr, $socket_number)) {
	  echo "Paquet magique émis avec succès!";
	  socket_close($s);
	  return TRUE;
	  }
	else {
	  echo "L'envoie du paquet magique a échoué!";
	  return FALSE;
	  }
	}
  }
# envoi du paquet magique
WakeOnLan($ip_addy, $mac_addy,$socket_number)
?>

En espérant que cela serve à quelqu'un. Si vous utilisez un firmware libre tel que Tomato voici la procédure pour activer le WoW à travers votre routeur.

Source du script original

Illustration CC http://www.flickr.com/photos/blazor85/3365758266/in/photostream/

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter