Wake-on-LAN (WoL) és un estàndard de xarxa d'ordinadors Ethernet o token ring que permet encendre o despertar un ordinador mitjançant un missatge de xarxa.
- Normalment, el missatge s'envia a l'ordinador de destinació mitjançant un programa executat en un dispositiu connectat a la mateixa xarxa d'àrea local, com ara un telèfon intel·ligent.
- També és possible iniciar el missatge des d'una altra xarxa mitjançant emissions dirigides a subxarxes o un servei de passarel·la WOL.
- Els termes equivalents inclouen activació a distància WAN activació remota encès per LAN encès per LAN reinici per LAN reinici a LAN i activació a LAN.
Principi de funcionament
- Wake-on-LAN ('WOL') s'implementa mitjançant un paquet especialment dissenyat anomenat paquet màgic que s'envia a tots els ordinadors d'una xarxa, entre ells l'ordinador a despertar.
- El paquet màgic conté l'adreça MAC de l'ordinador de destinació, un número d'identificació integrat a cada targeta d'interfície de xarxa ('NIC') o altres dispositius Ethernet d'un ordinador que permet reconèixer-lo i adreçar-lo de manera única en una xarxa.
- Els ordinadors apagats o apagats capaços de Wake-on-LAN contindran dispositius de xarxa capaços d'"escoltar" els paquets entrants en mode de baix consum mentre el sistema està apagat.
- Si es rep un paquet màgic que s'adreça a l'adreça MAC del dispositiu, la NIC indica la font d'alimentació de l'ordinador o la placa base per iniciar l'activació del sistema de la mateixa manera que ho faria en prémer el botó d'engegada.
- El paquet màgic s'envia a la capa d'enllaç de dades (capa 2 en el model OSI) i quan s'envia s'emet a tots els dispositius connectats a una xarxa determinada mitjançant l'adreça de difusió de la xarxa; l'adreça IP (capa 3 del model OSI) no s'utilitza.
Perquè Wake-on-LAN funcioni, s'han de mantenir enceses parts de la interfície de xarxa. Això consumeix una petita quantitat d'energia en espera molt menys que la potència de funcionament normal. Per tant, desactivar el wake-on-LAN quan no és necessari pot variar lleugerament per reduir el consum d'energia als ordinadors que estan apagats però encara connectats a una presa de corrent.
Estructura del paquet màgic
El paquet màgic és una trama de difusió que conté en qualsevol lloc de la seva càrrega útil 6 bytes dels 255 (FF FF FF FF FF FF en hexadecimal) seguit de setze repeticions de l'adreça MAC de 48 bits de l'ordinador objectiu per a un total de 102 bytes.
Atès que el paquet màgic només s'escaneja per cercar la cadena anterior i no s'analitza realment per una pila de protocols completa, es pot enviar com a qualsevol protocol de capa de xarxa i transport, tot i que normalment s'envia com a datagrama UDP al port 0 7 o 9 o directament a través d'EtherType com a EtherType 0x0842.
Un paquet màgic estàndard té les limitacions bàsiques següents:
- Requereix l'adreça MAC de l'ordinador de destinació (també pot requerir una contrasenya SecureOn).
- No proporcioneu una confirmació de lliurament.
- És possible que no funcioni fora de la xarxa local.
- Requereix suport de maquinari de Wake-On-LAN a l'ordinador de destinació.
- La majoria de les interfícies sense fil 802.11 no mantenen un enllaç en estats de baixa potència i no poden rebre un paquet màgic.
La implementació de Wake-on-LAN està dissenyada per ser molt senzilla i per ser processada ràpidament pels circuits presents a la targeta d'interfície de xarxa amb un requeriment mínim d'energia. Com que Wake-on-LAN funciona per sota de la capa de protocol IP, l'adreça MAC és necessària i fa que les adreces IP i els noms DNS no tinguin sentit.
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] = 0xgh; // 4th octet of the MAC Address mac[4] = 0xij; // 5th octet of the MAC Address mac[5] = 0xkl; // 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; }
Sortida:
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).
Referència:
https://en.wikipedia.org/wiki/Wake-on-LAN