Wake on lan (wan) réveiller sa machine sur internet


Description

Ce code circule très peu sur la toile, pourtant c'est bien utile
de passer par PHP pour activer sa machine du mode veille. Il n'est pas de moi, l'auteur est cité. Il fonctionne très bien sur les pages perso de FREE.

Source / Exemple :


index.php --> page d'acceuil (formulaire) :
---------------------------------------------
<html> 
<!-- Victor d'Agostino 2007 (Libre de redistribution) --> 
<!-- admin[at]vdagost[dot]org --> 
</head> 

<body> 
<center>
<br><br><br>
<form action="result.php" method="post"> 
<!-- ----------- -->
<?php 
$yip = $_SERVER["REMOTE_ADDR"]; 
echo "Adresse IP ou nom de domaine : <input type=\"text\" name=\"ip\" value=\"$yip\"/> <br>"; 
?>
<!-- ----------- -->
Adresse mac du pc à reveiller : <input type="text" name="mac" value="00:11:22:33:44:55"/><br> 
Port <select name="port"> 
<option label="9">9</option> 
<option label="7">7</option> 
</select> ( Verifiez que le port est bien redirigé )<br> 
Mot de passe du BIOS : <input type="password" size="5" name="passbios"/> ( facultatif )<br><br>
<div style="text-align:center;"><input type="submit" value="Wake On Wan"/></div> 
</form> 
</td></tr>
</table>
</center>
</body> 
</html>  
---------------------------------------------

result.php --> srcipt PHP (appelé par le formulaire) :
-------------------------------------
<?php 

/* 

  • Victor d'Agostino 2007 (Libre de redistribution)
  • admin[at]vdagost[dot]org
  • /
function secure_string($string) { $string = stripslashes($string); $string = htmlentities($string); $string = strip_tags($string); return $string; } function wake_on_wan($addr, $mac,$port, $pwd) { $addr_byte = explode(':', $mac); //Suppression des doubles points et creation du tableau $hw_addr = ''; //variable de l'adresse physique 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; $mdp = strlen($pwd); if($mdp!=0) { $completion = 6 - $mdp; $msg .= $pwd; for($i=0;$i<$completion;$i++) $msg .= chr(hexdec(00)); } $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); if($s == false) { echo '<b>Erreur du coté serveur ou parametres invalides</b><br />'; echo "<i>Creation du socket impossible</i>\n"; return FALSE; } else { $opt_ret = socket_set_option($s, 1, 6, TRUE); if($opt_ret <0) { echo "<b>Erreur du coté serveur</b><i>socket_set_option</i>\n"; return FALSE; } if(socket_sendto($s, $msg, strlen($msg), 0, $addr, $port)) { echo "<b>Signal de reveil envoyé à $addr pour $mac sur le port $port</b><br />"; if($mdp!=0) echo "<b>Mot de passe utilisateur BIOS : oui</b>\n"; else echo "\n"; socket_close($s); return TRUE; } else { echo "<b>Erreur lors de l'envoi du signal</b><br />"; echo "<i>Mauvais parametres ou parametres absents</i>\n<br />"; return FALSE; } } } flush(); $p_ip = secure_string($_POST["ip"]); $p_mac = secure_string($_POST["mac"]); $p_port = $_POST["port"]; $p_mdp = secure_string($_POST["passbios"]); echo "<html><head><title>Wake On WAN $p_ip ($p_mac) sur port $p_port</title>\n"; echo '<meta name="robots" content="noindex, nofollow"/>'; echo "\n</head>\n\n<body>\n"; echo "<table class=\"tabform\"><tr><td><br>\n"; //-------- wake_on_wan($p_ip, $p_mac, $p_port, $p_mdp); //-------- echo "<br></body></html>"; ?> -------------------------------------

Conclusion :


Testé sur Windows XP et Mac 0SX depuis un PC distant.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.