Program pentru a porni de la distanță un computer prin internet folosind protocolul Wake-on-LAN.

Wake-on-LAN (WoL) este un standard de rețea de computere Ethernet sau token ring care permite ca un computer să fie pornit sau trezit de un mesaj de rețea. 

  • Mesajul este de obicei trimis către computerul țintă printr-un program executat pe un dispozitiv conectat la aceeași rețea locală, cum ar fi un smartphone.
  • De asemenea, este posibil să inițiezi mesajul dintr-o altă rețea folosind transmisii direcționate subrețea sau un serviciu de gateway WOL.
  • Termenii echivalenti includ trezire pe WAN pornire de la distanță pornire prin LAN pornire prin LAN reluare prin LAN reluare pe LAN și trezire pe LAN.

Principiul de funcționare  

  • Wake-on-LAN ("WOL") este implementat folosind un pachet special conceput, numit pachet magic, care este trimis către toate computerele dintr-o rețea, printre care computerul care urmează să fie trezit.
  • Pachetul magic conține adresa MAC a computerului de destinație, un număr de identificare încorporat în fiecare placă de interfață de rețea („NIC”) sau alte dispozitive Ethernet dintr-un computer care îi permite să fie recunoscut și adresat în mod unic într-o rețea.
  • Calculatoarele oprite sau oprite capabile de Wake-on-LAN vor conține dispozitive de rețea capabile să „asculte” pachetele primite în modul de consum redus în timp ce sistemul este oprit.
  • Dacă se primește un pachet magic care este direcționat către adresa MAC a dispozitivului, NIC-ul semnalează sursa de alimentare a computerului sau placa de bază pentru a iniția trezirea sistemului în același mod în care ar face-o apăsarea butonului de pornire.
  • Pachetul magic este trimis pe stratul de legătură de date (nivelul 2 în modelul OSI) și atunci când este trimis este transmis către toate dispozitivele atașate dintr-o rețea dată folosind adresa de difuzare a rețelei; adresa IP (nivelul 3 în modelul OSI) nu este utilizată.

Pentru ca Wake-on-LAN să funcționeze, anumite părți ale interfeței de rețea trebuie să rămână activate. Acest lucru consumă o cantitate mică de putere de așteptare mult mai mică decât puterea normală de funcționare. Dezactivarea wake-on-LAN atunci când nu este necesară poate varia, prin urmare, să reducă ușor consumul de energie pe computerele care sunt oprite, dar încă conectate la o priză.

Structura pachetului magic  
Pachetul magic este un cadru de difuzare care conține oriunde în sarcina sa utilă 6 octeți din toți cei 255 (FF FF FF FF FF FF în hexazecimal) urmați de șaisprezece repetări ale adresei MAC pe 48 de biți a computerului țintă pentru un total de 102 octeți. 
Deoarece pachetul magic este scanat doar pentru șirul de mai sus și nu este analizat de fapt de o stivă completă de protocoale, acesta poate fi trimis ca orice protocol de rețea și de nivel de transport, deși este de obicei trimis ca datagramă UDP la portul 0 7 sau 9 sau direct prin Ethernet ca EtherType 0x0842.

Un pachet magic standard are următoarele limitări de bază:   

  1. Necesită adresa MAC a computerului de destinație (poate necesita și o parolă SecureOn).
  2. Nu furnizați o confirmare de livrare.
  3. Este posibil să nu funcționeze în afara rețelei locale.
  4. Necesită suport hardware pentru Wake-On-LAN pe computerul de destinație.
  5. Majoritatea interfețelor wireless 802.11 nu mențin o legătură în stări de putere redusă și nu pot primi un pachet magic.

Implementarea Wake-on-LAN este concepută pentru a fi foarte simplă și pentru a fi procesată rapid de circuitele prezente pe placa de interfață de rețea cu un necesar minim de energie. Deoarece Wake-on-LAN funcționează sub nivelul protocolului IP, adresa MAC este necesară și face ca adresele IP și numele DNS să nu aibă sens.

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  ;   }   

Ieșire: 

 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).

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

Creați un test