|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Wake On LANDie hier beschriebene Programmvariante funktioniert leider nicht mehr mit der aktuellen libnet. Sobald ich die Zeit dazu finde, werde ich das Programm an die aktuelle Version anpassen.Wie funktionert es?Über Wake On LAN, ab hier mit WOL abgekürzt, läßt sich ein ausgeschalteter, oder im Standby befindlicher Rechner einschalten bzw. Aufwecken. Damit so ein Rechner aufwacht muß ein sog. "Magic Packet" an die Netzwerkkarte geschickt werden. Da der Rechner im ausgeschalteten Zustand kein IP-Protokoll verarbeiten kann, reicht es wenn der Inhalt des "Magic Packets" im Ethernet Frame vorhanden ist. Der Inhalt sieht dann folgendermaßen aus:
Damit der Ethernet Frame jeden Rechner im LAN erreichen kann muß als Zieladresse eine Broadcast Adresse angegeben werden. In diesem Falle ff:ff:ff:ff:ff:ff. Der oben angegebene Inhalt des Magic Packet wird dann noch in ein UDP Paket verpackt. UDP deshalb weil es ein verbindungsloses Protokoll ist. Als IP Zieladresse wird auch hier eine Broadcast Adresse angegeben. Die global gültige für das Internet Protokoll ist 255.255.255.255. Da ein solcher Broadcast nicht geroutet wird muß das Paket von einem Rechner in dem entsprechenden LAN-Segment abgeschickt werden. Da dieser Rechner mehrere Interfaces haben kann muß das entsprechende Netzwerkinterface ausgewählt werden auf dem der Ethernet Frame geschickt wird. Das komplette UDP Paket, das als Nutzdaten im Ethernet Frame verschickt wird sieht dann Beispielsweise so aus:
Die ImplementierungDa keiner meiner Versuche ein Magic Packet mit einem vorhandenen Programm zu generieren erfolgreich war habe ich mich daran gesetzt ein eigenes Programm zu schreiben, das auf meine Bedürfnisse zugeschnitten ist. Heraus kam wakeup, das mit Hilfe der libnet realisiert wurde. Die Quellen sollten mittels make übersetzbar und installierbar sein. Falls dies nicht funktionieren sollte bitte ich um eine kurze Fehlerbeschreibung. Was hat das ganze nun mit OpenBSD zu tun? Nun ja, die meisten Lösungen, die ich gefunden habe waren Linux spezifische Programme. In den ports von OpenBSD existiert ein Perl-Modul, das die beschriebene Funktionalität bieten soll. Allerdings war es mir auch damit nicht möglich ein Magic Packet zu generieren. Das hier vorgestellte Programm ist bisher auch nur auf OpenBSD getestet worden. Erfolgs- oder Misserfolgsmeldungen über den Einsatz des Programms auf anderen Systemen würde ich gerne hier auf die Seite aufnehmen. Die neuere Bibliothek libnet-1.1Ich habe wakeup unter berücksichtigung der neueren libnet-1.1 neu geschrieben. Die Quellen von Version 0.2 sollten auf unix-ähnlichen Systemen compilieren, Ein port für OpenBSD kann hier gefunden werden. Neues wake Kommando in -current
|