Wake-on-LAN (WoL) é um padrão de rede de computadores Ethernet ou token ring que permite que um computador seja ligado ou despertado por uma mensagem de rede.
- A mensagem geralmente é enviada ao computador de destino por um programa executado em um dispositivo conectado à mesma rede local, como um smartphone.
- Também é possível iniciar a mensagem de outra rede usando transmissões direcionadas à sub-rede ou um serviço de gateway WOL.
- Termos equivalentes incluem despertar na WAN, ativação remota pela LAN, inicialização pela LAN, retomada pela LAN, retomada na LAN e ativação na LAN.
Princípio de operação
- Wake-on-LAN ('WOL') é implementado usando um pacote especialmente projetado chamado pacote mágico que é enviado a todos os computadores em uma rede, entre eles o computador a ser despertado.
- O pacote mágico contém o endereço MAC do computador de destino e um número de identificação incorporado em cada placa de interface de rede ('NIC') ou outros dispositivos Ethernet em um computador que permite que ele seja reconhecido e endereçado exclusivamente em uma rede.
- Computadores desligados ou desligados com capacidade de Wake-on-LAN conterão dispositivos de rede capazes de “escutar” pacotes recebidos em modo de baixo consumo de energia enquanto o sistema estiver desligado.
- Se for recebido um pacote mágico direcionado ao endereço MAC do dispositivo, a NIC sinaliza à fonte de alimentação do computador ou à placa-mãe para iniciar a ativação do sistema, da mesma forma que pressionar o botão liga / desliga faria.
- O pacote mágico é enviado na camada de enlace de dados (camada 2 no modelo OSI) e quando enviado é transmitido para todos os dispositivos conectados em uma determinada rede usando o endereço de transmissão da rede; o endereço IP (camada 3 no modelo OSI) não é usado.
Para que o Wake-on-LAN funcione, partes da interface de rede precisam permanecer ligadas. Isso consome uma pequena quantidade de energia em espera, muito menos que a energia operacional normal. Desativar o wake-on-LAN quando não for necessário pode, portanto, reduzir ligeiramente o consumo de energia em computadores que estão desligados, mas ainda conectados a uma tomada elétrica.
Estrutura do Pacote Mágico
O pacote mágico é um quadro de transmissão contendo em qualquer lugar dentro de sua carga útil 6 bytes de todos os 255 (FF FF FF FF FF FF em hexadecimal) seguido por dezesseis repetições do endereço MAC de 48 bits do computador de destino para um total de 102 bytes.
Como o pacote mágico é verificado apenas para a string acima e não é realmente analisado por uma pilha completa de protocolos, ele pode ser enviado como qualquer protocolo de rede e camada de transporte, embora normalmente seja enviado como um datagrama UDP para a porta 0 7 ou 9 ou diretamente pela Ethernet como EtherType 0x0842.
Um pacote mágico padrão tem as seguintes limitações básicas:
- Requer endereço MAC do computador de destino (também pode exigir uma senha SecureOn).
- Não forneça uma confirmação de entrega.
- Pode não funcionar fora da rede local.
- Requer suporte de hardware de Wake-On-LAN no computador de destino.
- A maioria das interfaces sem fio 802.11 não mantém um link em estados de baixo consumo de energia e não pode receber um pacote mágico.
A implementação Wake-on-LAN foi projetada para ser muito simples e rapidamente processada pelos circuitos presentes na placa de interface de rede com requisitos mínimos de energia. Como o Wake-on-LAN opera abaixo da camada do protocolo IP, o endereço MAC é necessário e torna os endereços IP e os nomes DNS sem sentido.
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; }
Saída:
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