Holger Stehle

Softwareentwicklung und -architektur

« Wake on LAN durchführen

Wake on LAN ist ein Standard zum Starten eines deaktivierten Rechners über eine kompatible Netzwerkkarte. Dazu wird lediglich ein bestimmtes Paket im Netzwerk gesendet; mit C# lässt sich das beispielsweise so lösen:

public static class WakeOnLAN {
    public static void SendMagicPacket(byte[] macAddress) {
        using(UdpClient udpClient = new UdpClient()) {
            udpClient.Connect(IPAddress.Broadcast, 9);

            byte[] magicPacket = new byte[(6 + (16 * 6))];

            for(int i = 0; i < 6; i++) {
                magicPacket[i] = 0xFF;
            }

            for(int i = 1; i <= 16; i++) {
                for(int j = 0; j < 6; j++) {
                    magicPacket[((i * 6) + j)] = macAddress[j];
                }
            }

            udpClient.Send(magicPacket, magicPacket.Length);
        }
    }

    public static void SendMagicPacket(string macAddress) {
        SendMagicPacket(macAddress
            .Split(':', '-')
            .Select(m => Byte.Parse(m, NumberStyles.AllowHexSpecifier))
            .ToArray()
        );
    }
}

Das Paket enthält sechs mal den Wert FF16, gefolgt von der 16-maligen Wiederholung der MAC-Adresse und wird per Broadcast im Netzwerk versendet. Durch die Methodenüberladung wird die Übergabe der MAC-Adresse sowohl per Zeichenkette als auch per Byte-Feld ermöglicht:

WakeOnLAN.SendMagicPacket("11:22:33:44:55:66");

  /* – oder – */
  
WakeOnLAN.SendMagicPacket(new byte[] {
    0x11, 0x22, 0x33, 0x44, 0x55, 0x66
});