Wake-on-LAN (WoL) è uno standard di rete per computer Ethernet o token ring che consente a un computer di essere acceso o risvegliato da un messaggio di rete. 

  • Il messaggio viene solitamente inviato al computer di destinazione da un programma eseguito su un dispositivo connesso alla stessa rete locale come uno smartphone.
  • È anche possibile avviare il messaggio da un'altra rete utilizzando trasmissioni dirette alla sottorete o un servizio gateway WOL.
  • Termini equivalenti includono riattivazione tramite WAN, riattivazione remota, accensione tramite LAN, accensione tramite LAN, ripresa tramite LAN, ripresa su LAN e riattivazione su LAN.

Principio di funzionamento  

  • Wake-on-LAN ("WOL") viene implementato utilizzando un pacchetto appositamente progettato chiamato pacchetto magico che viene inviato a tutti i computer in una rete tra cui il computer da riattivare.
  • Il pacchetto magico contiene l'indirizzo MAC del computer di destinazione, un numero identificativo integrato in ciascuna scheda di interfaccia di rete ("NIC") o altri dispositivi Ethernet in un computer che consente di riconoscerlo e indirizzarlo in modo univoco su una rete.
  • I computer spenti o dotati di funzionalità Wake-on-LAN conterranno dispositivi di rete in grado di "ascoltare" i pacchetti in ingresso in modalità a basso consumo mentre il sistema è spento.
  • Se viene ricevuto un pacchetto magico indirizzato all'indirizzo MAC del dispositivo, la scheda di rete segnala all'alimentatore o alla scheda madre del computer di avviare la riattivazione del sistema, proprio come farebbe premendo il pulsante di accensione.
  • Il pacchetto magico viene inviato sul livello di collegamento dati (livello 2 nel modello OSI) e una volta inviato viene trasmesso a tutti i dispositivi collegati su una determinata rete utilizzando l'indirizzo di trasmissione della rete; l'indirizzo IP (livello 3 nel modello OSI) non viene utilizzato.

Affinché Wake-on-LAN funzioni, è necessario che alcune parti dell'interfaccia di rete rimangano attive. Ciò consuma una piccola quantità di energia in standby, molto inferiore alla normale energia operativa. La disattivazione della wake-on-LAN quando non è necessaria può quindi ridurre leggermente il consumo energetico sui computer spenti ma ancora collegati a una presa di corrente.

Struttura del pacchetto magico  
Il pacchetto magico è un frame broadcast contenente ovunque all'interno del suo payload 6 byte su tutti i 255 (FF FF FF FF FF FF in esadecimale) seguito da sedici ripetizioni dell'indirizzo MAC a 48 bit del computer di destinazione per un totale di 102 byte. 
Poiché il pacchetto magico viene scansionato solo per la stringa sopra e non effettivamente analizzato da uno stack di protocolli completo, può essere inviato come qualsiasi protocollo a livello di rete e trasporto sebbene venga generalmente inviato come datagramma UDP alla porta 0 7 o 9 o direttamente su Ethernet come EtherType 0x0842.

Un pacchetto magico standard presenta le seguenti limitazioni di base:   

  1. Richiede l'indirizzo MAC del computer di destinazione (potrebbe richiedere anche una password SecureOn).
  2. Non fornire una conferma di consegna.
  3. Potrebbe non funzionare al di fuori della rete locale.
  4. Richiede il supporto hardware di Wake-On-LAN sul computer di destinazione.
  5. La maggior parte delle interfacce wireless 802.11 non mantengono un collegamento negli stati di basso consumo e non possono ricevere un pacchetto magico.

L'implementazione del Wake-on-LAN è progettata per essere molto semplice e per essere rapidamente elaborata dalla circuiteria presente sulla scheda di interfaccia di rete con un fabbisogno energetico minimo. Poiché Wake-on-LAN opera al di sotto del livello del protocollo IP, è richiesto l'indirizzo MAC e rende privi di significato gli indirizzi IP e i nomi DNS.

C
   // C program to remotely Power On a PC over the   // internet using the Wake-on-LAN protocol.   #include         #include         #include         #include         #include         #include          #include         #include         int     main  ()   {      int     i  ;      unsigned     char     toSend  [  102  ]  mac  [  6  ];      struct     sockaddr_in     udpClient       udpServer  ;      int     broadcast     =     1     ;      // UDP Socket creation      int     udpSocket     =     socket  (  AF_INET       SOCK_DGRAM       0  );      // Manipulating the Socket      if     (  setsockopt  (  udpSocket       SOL_SOCKET       SO_BROADCAST        &  broadcast       sizeof     broadcast  )     ==     -1  )      {      perror  (  'setsockopt (SO_BROADCAST)'  );      exit  (  EXIT_FAILURE  );      }      udpClient  .  sin_family     =     AF_INET  ;      udpClient  .  sin_addr  .  s_addr     =     INADDR_ANY  ;      udpClient  .  sin_port     =     0  ;      //Binding the socket      bind  (  udpSocket       (  struct     sockaddr  *  )  &  udpClient       sizeof  (  udpClient  ));      for     (  i  =  0  ;     i   <  6  ;     i  ++  )      toSend  [  i  ]     =     0xFF  ;      // Let the MAC Address be ab:cd:ef:gh:ij:kl      mac  [  0  ]     =     0xab  ;     // 1st octet of the MAC Address      mac  [  1  ]     =     0xcd  ;     // 2nd octet of the MAC Address      mac  [  2  ]     =     0xef  ;     // 3rd octet of the MAC Address      mac  [  3  ]     =     0  xgh  ;     // 4th octet of the MAC Address      mac  [  4  ]     =     0  xij  ;     // 5th octet of the MAC Address      mac  [  5  ]     =     0  xkl  ;     // 6th octet of the MAC Address      for     (  i  =  1  ;     i   <=  16  ;     i  ++  )      memcpy  (  &  toSend  [  i  *  6  ]     &  mac       6  *  sizeof  (  unsigned     char  ));      udpServer  .  sin_family     =     AF_INET  ;      // Broadcast address      udpServer  .  sin_addr  .  s_addr     =     inet_addr  (  '10.89.255.255'  );      udpServer  .  sin_port     =     htons  (  9  );      sendto  (  udpSocket       &  toSend       sizeof  (  unsigned     char  )     *     102       0        (  struct     sockaddr  *  )  &  udpServer       sizeof  (  udpServer  ));      return     0  ;   }   

Produzione: 

 This program will power on the switched-off PC   
whose MAC Address is used in this program (the
PC and the Host computer must be connected over
LAN).

Riferimento :  
https://en.wikipedia.org/wiki/Wake-on-LAN
 

Crea quiz