WakeOnLan beim Starten/Aufwachen
Wir haben in unserem Netzwerk einen Rechner mit Linux der als Router, Firewall, Fileserver und ein paar andere Dinge dient. Der Rechner ist so konfiguriert, dass er ab 0.00 Uhr nachts alle 15 Minuten das lokale Netz überprüft und sich automatisch ausschaltet, sobald kein anderer PC mehr läuft.
Auf Client Seite ist unser Netzwerk bunt gemischt. Mit MacOSX, Linux und Windows sind alle nennenswerten Betriebsysteme vertreten. Nun möchten alle natürlich, dass der Router morgens anspringt sobald der eigene Rechner eine Internetverbindung benötigt. Dazu habe ich den Router so konfiguriert, dass er auf Wake-On-Lan Pakete reagiert.
Für MacOSX und Linux habe ich ein kleines Python Script gebastelt, dass ein MagicPaket sendet und so den Router aufweckt (der merkwürdig aussehende String in der letzten Zeile des Skriptes ist die Mac-Adresse des zu weckenden Rechners).
#!/usr/bin/env python
import socket
s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto('\xff'*6+'\x01\x40\x24\x2b\x12\xf7'*16, ('192.168.2.2', 80))
Unter Linux das Skript einfach per Autostart ausführen. Unter MacOSX könnte man das Skript einfach zu den Login-Items hinzufügen, um es bei jedem Anmelden auszuführen.
Allerdings habe ich unter MacOSX einen etwas anderen Usecase. Ich schalte den Rechner praktisch nie aus, sondern versetze ihn nur in den SleepModus. Deshalb muss ich das Skript immer dann ausführen, wenn der Rechner aus dem SleepModus wieder aufwacht. Dazu nutze ich das kleine Tool SleepWatcher. SleepWatcher kann Skripte beim Aufwachen und Schlafengehen von MacOSX ausführen.
Bleibt die Windows-Dose. Auch hier hat der Usecase eine kleine Besonderheit, denn das WOL-Paket muss über WLAN gesendet werden das erst einige Sekunden nach dem Login verfügbar ist. Außerdem muss der Windows-Rechner nach dem Starten des Routers dazu gebracht werden sich vom DHCP Server eine neue IP zu holen.
Zum Senden des MagicPackets habe ich das kleine Tool MC-WOL heruntergeladen. Dabei handelt es sich um ein Kommandozeilenprogramm, dass als Parameter einfach nur die MacAdresse des zu weckenden Rechners bekommt. Das ganze habe ich in eine Batch-Datei verpackt:
ping localhost -n 15 > NULL c:\mc-wol.exe 01:40:24:2b:12:f7 ping localhost -n 60 > NULL ipconfig /renew
Die beiden Ping Befehle sind ein kleiner Hack. Windows Batch Dateien kennen keinen “sleep”-Befehl. Ein Ping dauert jedoch genau eine Sekunde. Wenn man nun 15mal ins leere Pingt, hat man effektiv einen Sleep von 15 Sekunden. Die ersten 15s warten sind zum aktivieren der WLAN-Verbindung, dann sendet die Batch das MagicPaket, wartet wiederum 60s (bis der Router hochgefahren ist) und holt sich dannach eine neue IP.
Von dieser Batch Datei einfach noch eine Verknüpfung erstellen und in den Autostart Ordner verschieben. Der Verknüpfung kann man nun noch sagen, dass sie minimiert starten soll und den Benutzer so nicht stört (geht über die Eigenschaften der Verknüpfung).


