J'ai dernièrement décidé de réaliser un relai Wake On Lan suite à la lecture d'un tutoriel proposé par un shérif local : http://www.finalclap.com/tuto/arduino-wake-on-lan-repeater-80/.
J'ai donc fait l'acquisition d'un Arduino Uno avec son Shield Ethernet, et étant un type bien organisé, j'ai même pensé à l'adaptateur USB pour le réseau électrique. Il est à préciser que je ne m'intéresse qu'à la première partie dudit tutoriel. Voici donc le programme que j'obtiens en copié-collé, tel le gros fainéant que je suis :
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
byte arduinoMAC[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // Adresse MAC inscrite sur l'Arduino
IPAddress arduinoIP(192, 168, 0, 13);
unsigned int arduinoPort = 7;
IPAddress broadcastIP(192, 168, 0, 255);
EthernetUDP udp;
#define MAGIC_PACKET_SIZE 102
byte packetBuffer[MAGIC_PACKET_SIZE];
void setup() {
// Connexion au réseau local
Ethernet.begin(arduinoMAC,arduinoIP);
// Ecoute du port redirigé par le routeur
udp.begin(arduinoPort);
}
void loop() {
forward_wol_magic_packet(); // Appel du programme "forward_wol_magic_packet"
delay(100);
}
void forward_wol_magic_packet() {
int packetSize = udp.parsePacket();
if(packetSize)
{
udp.read(packetBuffer, MAGIC_PACKET_SIZE);
udp.beginPacket(broadcastIP, 9);
udp.write(packetBuffer, MAGIC_PACKET_SIZE);
udp.endPacket();
}
}
Quelques précisions sur le pourquoi de certaines choses que j'ai faites.
J'ai choisi de lui attribuer l'adresse IP : 192.168.0.13, car mon routeur semble manifestement préféré attribuer cette IP là au port ethernet auquel est branché l'Arduino. Par contre, pour une raison que je ne m'explique pas, mon routeur met bien 3 minutes avant de reconnaitre la connexion de mon matériel... Bref, je suppose que tant qu'il est reconnu à un moment ou un autre, tout roule.
Aussi, j'utilise WakeOnLanMonitor (http://www.clubic.com/telecharger-fiche224238-wake-on-lan-monitor-sniffer.html) pour vérifier que le paquet magique parvient bien à mon PC. Lorsque je fait l'envoi du paquet depuis mon téléphone en local, il apparait bien et en effet mon PC démarre lorsque je le fais (NOTA : cela fonctionnait déjà AVANT que j'achète et que j'installe mon Arduino). Toutefois, lorsque je fais l'envoi depuis internet, rien ne me parvient. Et pas de démarrage. (NOTA again: j'ai bien fait l'envoi du paquet magique vers le port 7 de mon routeur.)
Il n'y a qu'une chose que je n'ai pas encore testée, ce serait d'envoi le paquet directement sur l'IP de mon PC (que j'ai fixée, relativement à son adresse MAC, dans le serveur DHCP de mon réseau local). Mais cette solution ne fonctionnera probablement pas, car déjà lorsque j'envoie le paquet en local, il faut que ce soit sur l'adresse IP de broadcast.
Voilà. Qu'ai-je mal fait ??
Merci d'avance !
Bisous à tous,
Tiyifitu