O que é um pacote mágico Wake on LAN?

O Wake on LAN liga um computador em suspensão ou desligado pela rede. A placa de rede permanece ligada e aguarda um pacote mágico: 6 bytes FF seguidos pelo endereço MAC do computador 16 vezes, totalizando 102 bytes. Geralmente, ele é enviado como uma transmissão UDP para a porta 9 ou 7, para que todas as máquinas da rede local o recebam e apenas a máquina correspondente seja ativada. Primeiro, é preciso ativar o Wake on LAN nas configurações do BIOS ou UEFI do computador.

Ferramentas como wakeonlan e etherwake enviam esse pacote, mas nem sempre estão instaladas e, em um servidor ou NAS, talvez você não queira adicioná-las.

Descrição da ferramenta

Esta ferramenta gera um comando de uma linha que envia o pacote usando o que o Linux já tem. Digite o endereço MAC do computador que deseja ativar, em um destes formatos: 00:11:22:AA:BB:CC, 00-11-22-AA-BB-CC, 0011.22AA.BBCC ou 12 dígitos hexadecimais seguidos, e escolha como enviá-lo em Enviar com:

  • Python 3 ou Perl, que funcionam no bash e no zsh, não precisam de acesso root e permitem transmissões
  • Bash /dev/udp, que não exige a instalação de nada, mas só funciona no bash, não no zsh, e não permite transmissões

O endereço de transmissão ou IP começa como 255.255.255.255, e a porta UDP como 9. O Linux responde «Permissão negada» quando o bash envia para um endereço de transmissão, por isso a ferramenta avisa se você escolher Bash com um endereço terminado em .255. Em vez disso, use o endereço IP do próprio computador.

O comando é gerado no seu navegador. Copie-o e execute-o em qualquer máquina Linux na mesma rede.

Exemplos

Para 00:11:22:AA:BB:CC, com transmissão via Python 3 na porta 9:

python3 -c 'import socket;s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM);s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1);s.sendto(bytes.fromhex("ff"*6+"001122aabbcc"*16),("255.255.255.255",9))'

Bash, enviado diretamente ao computador em 192.168.1.20:

printf "$(printf '\\xff%.0s' {1..6})$(printf '\\x00\\x11\\x22\\xaa\\xbb\\xcc%.0s' {1..16})" > /dev/udp/192.168.1.20/9

Recursos

  • Versões do comando para Python 3, Perl e bash
  • Aceita endereços MAC com dois-pontos, hífens, pontos ou sem separadores
  • Avisa quando a versão para bash não consegue alcançar um endereço de transmissão