Was ist ein Wake-on-LAN-Magic-Paket?

Wake-on-LAN schaltet einen Computer, der sich im Ruhezustand befindet oder ausgeschaltet ist, über das Netzwerk ein. Die Netzwerkkarte bleibt mit Strom versorgt und wartet auf ein Magic Packet: 6 Bytes mit FF, gefolgt von der MAC-Adresse des Computers, die 16-mal wiederholt wird – insgesamt 102 Bytes. Das Paket wird üblicherweise als UDP-Broadcast an Port 9 oder 7 gesendet. So empfangen es alle Geräte im lokalen Netzwerk, aber nur das Gerät mit der passenden MAC-Adresse wacht auf. Wake-on-LAN muss zuerst in den BIOS- oder UEFI-Einstellungen des Computers aktiviert werden.

Tools wie wakeonlan und etherwake senden das Paket, sind aber nicht immer installiert. Auf einem Server oder NAS möchte man sie möglicherweise auch nicht zusätzlich installieren.

Tool-Beschreibung

Dieses Tool erstellt einen einzeiligen Befehl, der das Paket mit bereits auf Linux vorhandenen Mitteln sendet. Gib die MAC-Adresse des Computers ein, den du aufwecken möchtest, zum Beispiel als 00:11:22:AA:BB:CC, 00-11-22-AA-BB-CC, 0011.22AA.BBCC oder als 12 Hexadezimalziffern ohne Trennzeichen. Wähle dann unter „Senden mit“ aus, wie das Paket gesendet werden soll:

  • Python 3 oder Perl: funktioniert in bash und zsh, benötigt keine root-Rechte und unterstützt Broadcasts
  • Bash /dev/udp: erfordert keine Installation, funktioniert aber nur in bash, nicht in zsh, und unterstützt keine Broadcasts

Als Broadcast- oder IP-Adresse ist zunächst 255.255.255.255 eingetragen, als UDP-Port 9. Wenn bash an eine Broadcast-Adresse sendet, meldet Linux „Berechtigung verweigert“. Daher warnt dich das Tool, wenn du Bash mit einer Adresse verwendest, die auf .255 endet. Verwende stattdessen hier die IP-Adresse des Computers.

Der Befehl wird in deinem Browser erstellt. Kopiere ihn und führe ihn auf einem beliebigen Linux-Computer im selben Netzwerk aus.

Beispiele

Für 00:11:22:AA:BB:CC: Python 3 mit Broadcast auf Port 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, direkt an den Computer unter 192.168.1.20 gesendet:

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

Funktionen

  • Befehlsvarianten für Python 3, Perl und bash
  • Akzeptiert MAC-Adressen mit Doppelpunkten, Bindestrichen, Punkten oder ohne Trennzeichen
  • Warnt, wenn die bash-Variante eine Broadcast-Adresse nicht erreichen kann