Impressum  |   RSS  |  Forum

tsql

C# – Wake On LAN

Wake On Lan

Heute stelle ich den Quellcode für eine Wake On Lan Funktion vor.
Mit dieser Funktion und der MAC-Adresse eines Zielcomputers, kann dieser über das Netzwerk gestartet werden. Natürlich muss die WOL-Funktion im BIOS eingeschaltet sein. Das WOL-Signal besteht aus 102 Bytes. Es enthält 6x in Folge den Wert FF gefolgt von 16x der MAC Adresse. Diese Nachricht wird als Broadcast ans Netzwerk gesendet.

Hier nun der Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
[...]
 
using System.Net;
using System.Net.Sockets;
using System.Text.RegularExpressions;
 
[...]
 
private void button1_Click(object sender, EventArgs e)
{
    string smac = textBox1.Text;
    if (!isMAC(smac))
    {
        MessageBox.Show("MAC Adresse ist nicht korrekt");
    }
    else
    {
        //Umwandeln der MAC Adresse von String zu byte
        string[] arr_mac = smac.Split(':');
        byte[] macadresse = new byte[6];
 
        for(int x=0;x<macadresse.Length;x++)
            macadresse[x] = byte.Parse(arr_mac[x],
                                     System.Globalization.NumberStyles.HexNumber);
 
        WakeOnLan(macadresse);
    }
}
 
 
private bool isMAC(string mac)
{
    string pattern = @"(([a-f]|[0-9]|[A-F]){2}\:){5}([a-f]|[0-9]|[A-F]){2}\b";
    return System.Text.RegularExpressions.Regex.IsMatch(mac, pattern);
}
 
private static void WakeOnLan(byte[] mac)
{
    /*
      Das WOL Signal wird als Broadcast verschickt.
      Es enthält 6x den Wert FF, direkt danach folgt 16x die MAC Adresse.
    */ 
 
 
    UdpClient WOLclient = new UdpClient();
    WOLclient.Connect(IPAddress.Broadcast,0);
 
    //Startsignal 6x(FF) + 16x(Mac-Adresse) = 102bytes
    byte[] Startsignal = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
    byte[] WOLSignal = new byte[102];
 
    // Startsignal einf&uuml;gen
    Startsignal.CopyTo(WOLSignal,0);
 
    // Die Mac-Adresse wird 16x in das WOL Signal kopiert
    for (int i = 1; i <= 16; i++)
        mac.CopyTo(WOLSignal, i * 6);
 
    //Signal senden
    WOLclient.Send(WOLSignal, WOLSignal.Length);
}

Tags: , , ,

Hinterlasse einen Kommentar


Kommentare werden nach manueller Prüfung hier angezeigt.