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

Soyez le premier à donner votre avis sur cette source.

Vue 14 558 fois - Téléchargée 968 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
Messages postés
1
Date d'inscription
dimanche 31 décembre 2006
Statut
Membre
Dernière intervention
25 août 2011

Bonjour
cela ne marche pas me dis que cela été envoyé mais le pc ne démarre pas.
par http://www.depicus.com/wake-on-lan cela marche bien

j'ai vu plus haut que il manquerait le submask pour que cela fonctionne quelqu'un a t'il réglé ce probléme?

merci de votre aide...
Messages postés
1
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
21 septembre 2010

bonjour
j'ai voulu tester le code en local sur un pc avec easyphp 5.3.1.0 ,afin de l'installer ensuite sur un NAS Synology ( que je compte acquérir prochainement ) pour réveiller ce pc sur le réseau local
j'ai donné l'adresse IP du PC 192.168.1.100 et j'ai laissé l'adresse MAC de démonstration ( 112233445566 )
j'ai récupéré l'erreur suivante : Fatal error: Call to undefined function socket_create() in M:\EasyPHP-5.3.3\www\result.php on line 42
avez vous une solution pour ce problème ?
merci beaucoup.
Cdlt
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
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.
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
Afficher les 7 commentaires

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.