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

Soyez le premier à donner votre avis sur cette source.

Vue 14 302 fois - Téléchargée 944 fois


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

Ajouter un commentaire

Commentaires

simonviei
Messages postés
17
Date d'inscription
jeudi 13 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2008
-
Plop :)

1- Il faut faire de l'objet
2- Séparation du rendu html de ton code php
3- Un poil de commentaire serait nickel ^^

Voila :)
cs_yoman64
Messages postés
592
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2008
-
Hello,

De l'objet pour un code comme ça n'aurait pas grand intérêt d'autant plus qu'il n'y a qu'une fonction et qu'instancier un objet est coûteux...

Par contre oui séparer le html du code php, la fonction devrait retourner un code d'erreur, thrower des exceptions ou encore retourner true/false mais pas afficher de html.

L'autre reproche qu'on pourrait faire c'est que récemment (enfin il y a quelques mois) une source similaire a été postée:
http://www.phpcs.com/codes/ALLUMER-MACHINE-DANS-RESEAU-WAKE-ON-LAN_45455.aspx

a+
cs_olbou621
Messages postés
9
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
2 novembre 2008
-
Bonjour,

C'est vrai que ta source "ressemble" à la mienne, mais ...
La tienne apporte un plus :

- Elle serait utilisable sur un WAN.
- Elle exploite le mot de passe bios.

Donc, "MA" source (qui est en fait une source en C que j'ai adapté au php et dont je ne connais pas l'auteur) ( donc c'est pas vraiment la mienne ) ( mais quand même un petit peu) ne se trouve nullement offensé.

Cela dit, c'est vrai que ton code jetté en vrac comme ça avec du php mélangé au html, ce n'est pas très propre. Enfin bon, je suis sûr que si quelqun en a besoin, il lui sera simple de remettre un peu d'ordre.

Merci donc de nous faire part de ta trouvaille.

Cdlt
olbou621
gmni
Messages postés
91
Date d'inscription
mercredi 6 novembre 2002
Statut
Membre
Dernière intervention
20 mars 2009
-
Merci olbou621, en effet le but n'est pas de copier ou refaire
une source, mais ici c'est de la diffuser pour ceux qui veulent
bien prendre ce qu'il y a dedans, voir l'utiliser...
aplus; gmni.
ghell2000
Messages postés
13
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
16 septembre 2016
-
Malheureusement, ça ne fonctionne pas, en tout cas en WAN.
Cela ne me surprend pas vraiment, dans la mesure ou il manque un parametre: celui du submask.
Voir par exemple http://www.depicus.com/wake-on-lan/woli.aspx

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.