Forum: PC-Programmierung c# - Hilfe für WoL-Snippet gesucht


von Matthias S. (da_user)


Lesenswert?

Hi,

ich bin auf der suche nach einem funktionierenden WoL-Skript. Ich habe 
natürlich schon fleißig gegoogelt und bin auf dieses hier gestoßen:

http://www.tsql.de/csharp/wakeonlan_wake_on_lan_wol_aufwecken_remote

Das habe ich jetzt in mein Projekt mit reingebastelt. Wird auch 
aufgerufen und bastelt anscheinend das Paket auch Korrekt zusammen 
(Zeilenumbruche im Pakte von mir am Forumseditorzeilenende eingefügt, um 
die Lesbarkeit zu erhöhen):
1
 
2
20.06.2013 23:02:54: WoL für: 00:1C:C0:D1:14:6C
3
20.06.2013 23:02:54: MAC Adresse umwandeln
4
20.06.2013 23:02:54: MacByte :0 Inhalt: 0
5
20.06.2013 23:02:54: MacByte :1 Inhalt: 28
6
20.06.2013 23:02:54: MacByte :2 Inhalt: 192
7
20.06.2013 23:02:54: MacByte :3 Inhalt: 209
8
20.06.2013 23:02:54: MacByte :4 Inhalt: 20
9
20.06.2013 23:02:54: MacByte :5 Inhalt: 108
10
255255255255255255028192209201080281922092010802819220920108028192209201080
11
281922092010802819220920108028192209201080281922092010802819220920108028192
12
209201080281922092010802819220920108028192209201080281922092010802819220920
13
10802819220920108

Nur, der Rechner will nicht starten. Also bei dem in die Einstellungen 
geguckt - scheint alles zu passen. Mal Wireshark geladen, rausgefunden 
wie man Broadcasts rausfiltert und - tada - nichts außer Anfragen an 
einen Rechner, der nicht läuft.
Ich hänge nochmal ran, wie ich das ganze in mein Projekt gebastelt habe. 
Hinweis: die MAC-Adresse ist in config.MACAdress als string so 
hinterlegt: "00:1C:C0:D1:14:6C"
1
        private void DebugBtnWoL_Click(object sender, EventArgs e)
2
        {
3
            DebugWriteLine("WoL für: " + config.MACAdress);
4
            WoL(config.MACAdress);          
5
        }
6
7
        #region Wake on Lan Methoden
8
        /**********************************************************
9
         *    Wake on Lan Methoden *
10
         **********************************************************/
11
12
        /// <summary>
13
        /// Führt einen WoL für die in der config hinterlegte MAC-Adresse durch
14
        /// </summary>
15
        private void WoL()
16
        {
17
            WoL(config.MACAdress);
18
        }
19
20
        /// <summary>
21
        /// Führt einen WoL für die übergebene MAC-Adresse durch
22
        /// </summary>
23
        /// <param name="MacAdresse">Die MAC-Adresse als string des zu weckenden Rechners</param>
24
        private void WoL(string stringMacAdresse)
25
        {
26
            //Umwandeln der MAC Adresse von String zu byte
27
            //Quelle: http://www.tsql.de/csharp/wakeonlan_wake_on_lan_wol_aufwecken_remote
28
29
            DebugWriteLine("MAC Adresse umwandeln");
30
            string[] arr_mac = stringMacAdresse.Split(':');
31
            byte[] macadress = new byte[6];
32
33
            for (int x = 0; x < macadress.Length; x++)
34
            {
35
                macadress[x] = byte.Parse(arr_mac[x],
36
                                         System.Globalization.NumberStyles.HexNumber);
37
                DebugWriteLine("MacByte :" + x + " Inhalt: " + macadress[x]);
38
            }
39
40
            Wol(macadress);
41
        }
42
43
        /// <summary>
44
        /// Führt ein WoL für die übergebene MAC-Adresse durch
45
        /// </summary>
46
        /// <param name="mac">Die MAC-Adresse als byte-Arry des zu weckenden Rechners</param>
47
        private void Wol(byte[] mac)
48
        {
49
            /*
50
            Das WOL Signal wird als Broadcast verschickt.
51
            Es enthält 6x den Wert FF, direkt danach folgt 16x die MAC Adresse.
52
             * Quelle: http://www.tsql.de/csharp/wakeonlan_wake_on_lan_wol_aufwecken_remote
53
            */
54
55
56
            UdpClient WOLclient = new UdpClient();
57
            WOLclient.Connect(IPAddress.Broadcast, 0);
58
59
            //Startsignal 6x(FF) + 16x(Mac-Adresse) = 102bytes
60
            byte[] Startsignal = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
61
            byte[] WOLSignal = new byte[102];
62
63
            // Startsignal einf&uuml;gen
64
            Startsignal.CopyTo(WOLSignal, 0);
65
66
            // Die Mac-Adresse wird 16x in das WOL Signal kopiert
67
            for (int i = 1; i <= 16; i++)
68
                mac.CopyTo(WOLSignal, i * 6);
69
70
            //Signal senden
71
            WOLclient.Send(WOLSignal, WOLSignal.Length);
72
            foreach (byte temp in WOLSignal)
73
            {
74
                DebugWrite(Convert.ToString(temp));
75
            }
76
        }
77
        #endregion

Woran kanns liegen? Woran scheitere ich? Ich habe auch das erste mal 
Wireshark benutzt, evlt. ist mir auch da ein Fehler unterlaufen. Aber 
ich sitzt jetzt hier halt gerade mal wieder wie der Ochs vor'm Berg...

von Uhu U. (uhu)


Lesenswert?

Hast du im BIOS WoL freigeschaltet?

von bluppdidupp (Gast)


Lesenswert?

Achtung: Viele Router vergessen die Mac-Adresse ausgeschalteter Geräte 
nach kurzer Zeit und stellen das Paket weder bei Angabe der 
Broadcast-IP, noch bei Angabe der konkreten Rechner-IP zu.
Sofern es mit anderen Tools auch nicht funktioniert könnte also auch der 
Router Schuld sein.

von H. (Gast)


Lesenswert?

Und check mal, ob es mit einem ferigen Tool geht. Ich nutze den WOL 
Magic Packet Sender... :)

von Matthias S. (da_user)


Lesenswert?

Uhu Uhuhu schrieb:
> Hast du im BIOS WoL freigeschaltet?

Jap, Intel D945GCLF2 unter "Power" die Option "Wake on LAN from S5" auf 
"Power on" gestellt. Mehr habe ich im BIOS nicht gefunden.

Habe gerade eben im Gerätemanager noch die Option rausgeschmissen, dass 
NUR ein Magic Packet den Rechner aufwecken kann.

> Und check mal, ob es mit einem ferigen Tool geht. Ich nutze den WOL
> Magic Packet Sender... :)

Geladen, ausprobiert. Weckt den Rechner nicht auf. Aber wenn ich das 
Tool auf den Zielrechner in den Receive-Modus umstelle, meldet es mir, 
dass es das Magic Packet empfangen hat.

Ich habe hier im Netzwerk auch schon einen anderen Rechner per WoL (war 
ein XBMC-Plug In) geweckt, hat geklappt, am Router sollte es also 
eigentlich nicht liegen.

Edit:

Was mich zudem wundert: Pakete des WOL - Magic Packet Sender habe ich 
relativ flott mit Wireshark gefunden, von meinem Tool finde ich gar nix, 
was in irgendeinerweiße darauf hindeutet...

von H. (Gast)


Angehängte Dateien:

Lesenswert?

Wie schon geschrieben, mal im BIOS nachschauen. In Windows kann man im 
Gerätemanager in den Optionen (Energieverwaltung) der entsprechenden NIC 
auch die Häkchen setzen, dass diese den Rechner beim Empfang des Magic 
Packets aufwecken kann.
Ach ja, bei meinem neuen Office-PC mit Realtek-Adapter ging das mit dem 
mitgelieferten Treiber nicht (MS-Treiber?). Es musste erst der passende 
Treiber von der Realtek-Seite installiert werden, bevor das richtig 
funktionierte (also Aufwecken aus PowerOff und Hibernate).
Recht hässlich, dass man für eine Funktion "vor dem OS" erstmal das OS 
braucht. :/ Aber eventuell hilft ein Update ja auch bei dir.

von H. (Gast)


Lesenswert?

Sorry! Vergiss das mit dem BIOS. Hab das irgendwie verdrängt... :D

von bluppdidupp (Gast)


Lesenswert?

Sofern du an der LAN-Buchse LEDs hast: Prüf mal ob die Link-LED im 
Standby auch tatsächlich leuchtet.

von Matthias S. (da_user)


Lesenswert?

So, bin jetzt endlich mal wieder dazugekommen da weiterzugucken.

LAN-BuchsenLED leuchtet nicht :(

Habe jetzt trotzdem mal den Treiber von Realteak runtergeladen und 
installiert, WoL funktioniert immer noch nicht und die LED leuchtet auch 
nicht.

Hätte sonst noch wer ne Idee? Ansonsten muss ich doch das angestaubte 
AVR-NetIO rauskramen und mich damit mal beschäftigen...

von bluppdidupp (Gast)


Lesenswert?

Wenn da nichts leuchtet ist die Wahrscheinlichkeit recht hoch, das dein 
Rechner gar nicht drauf wartet.
Im Standby statt Ruhezustand oder "aus" probiert?
Bei Standby (S3) hat man in der Regel eher Erfolg.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.