Wat is een Wake on LAN-magisch pakket?

Wake on LAN schakelt een computer die in de slaapstand staat of uitgeschakeld is in via het netwerk. De netwerkkaart blijft van stroom voorzien en luistert naar een magisch pakket: 6 bytes met de waarde FF, gevolgd door 16 keer het MAC-adres van de computer, in totaal 102 bytes. Het pakket wordt meestal als UDP-broadcast naar poort 9 of 7 verzonden, zodat elke machine op het lokale netwerk het ontvangt en alleen de machine met het overeenkomende adres wordt ingeschakeld. Wake on LAN moet eerst worden ingeschakeld in de BIOS- of UEFI-instellingen van de computer.

Tools zoals wakeonlan en etherwake kunnen het pakket verzenden, maar zijn niet altijd geïnstalleerd. Op een server of NAS wil je ze misschien ook niet toevoegen.

Beschrijving van de tool

Deze tool maakt een opdracht van één regel die het pakket verzendt met wat Linux al beschikbaar heeft. Voer het MAC-adres in van de computer die je wilt inschakelen, bijvoorbeeld als 00:11:22:AA:BB:CC, 00-11-22-AA-BB-CC, 0011.22AA.BBCC of 12 hexadecimale cijfers achter elkaar. Kies vervolgens hoe je het pakket wilt verzenden bij Verzenden met:

  • Python 3 of Perl, die werken in bash en zsh, geen root-toegang nodig hebben en een broadcast kunnen verzenden
  • Bash /dev/udp, waarvoor je niets hoeft te installeren, maar dat alleen werkt in bash, niet in zsh, en geen broadcast kan verzenden

Het broadcast- of IP-adres is standaard 255.255.255.255 en de UDP-poort is standaard 9. Linux geeft de melding "Toegang geweigerd" wanneer bash naar een broadcastadres verzendt. Daarom waarschuwt de tool je als je Bash kiest met een adres dat eindigt op .255. Gebruik in plaats daarvan het IP-adres van de computer zelf.

De opdracht wordt in je browser samengesteld. Kopieer de opdracht en voer deze uit op een Linux-machine in hetzelfde netwerk.

Voorbeelden

Voor 00:11:22:AA:BB:CC, met een broadcast via Python 3 op poort 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, rechtstreeks verzonden naar de computer op 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

Functies

  • Opdrachtversies voor Python 3, Perl en bash
  • Accepteert MAC-adressen met dubbele punten, streepjes, punten of zonder scheidingstekens
  • Waarschuwt wanneer de bash-versie geen broadcastadres kan bereiken