Hallo, ich möchte gerne ein kleines Programm schreiben, dass per Internet mein NAS (Synology DiskStation) weckt. Diese unterstützt wake on LAN, also müsste das ja eigentlich möglich sein. Mein Programm sieht in etwa so aus: - Öffne UDP Verbindung zu meinem Router (per DynDNS hat der eine feste IP) - Schicke ein Magic Packet an den Port 5000 (dieser wird vom Router an mein NAS geforwarded) Im Magic Packet habe ich wie auf Wikipedia beschrieben 6x FF und 16x die MAC Adresse meines NAS. Leider funktioniert das ganze nicht. Zum Testen habe ich das ganze auch mal im Heimnetz probiert, und das Paket nicht über den Router sondern direkt ans NAS gesendet. Hilft auch nix :-( Woran könnte das liegen? Was gibt es hier noch zu beachten?
Boris P. schrieb: > - Schicke ein Magic Packet an den Port 5000 (dieser wird vom Router an > mein NAS geforwarded) Na woher soll denn der Router die MAC des NAS kennen wenn das NAS aus ist? Normalerweise geht das per ARP, aber dafür muss das NAS darauf antworten. Also: nicht an die IP des NAS senden, sondern an die Broadcast-IP. Zum debuggen einfach mal per Wireshark mit nem anderen Rechner im LAN mitlauschen, dort muss das Paket auch vorbeikommen.
Ich habe hier zwei Sourcecodes, einen in RealBasic (entfernt verwandt mit VB) und einen in PHP - vlt. hast du ja in deinem eigenen Programm etwas übersehen... RealBasic (heute "Xojo"):
1 | dim usock as UDPSocket |
2 | dim macbin, mac16, pref as string |
3 | dim i as integer |
4 | |
5 | macbin="" |
6 | mac16="" |
7 | pref="" |
8 | |
9 | for i= 1 to 6 |
10 | macbin = macbin + ChrB(val("&h"+nthfield(macadr, ":", i))) |
11 | next |
12 | |
13 | for i=1 to 6 |
14 | pref = pref + chrB(&hFF) |
15 | next |
16 | |
17 | for i=1 to 16 |
18 | mac16 = mac16 +macbin |
19 | next |
20 | |
21 | usock = new UDPSocket |
22 | if usock<>nil then |
23 | usock.port = 3307 |
24 | usock.connect |
25 | usock.write usock.BroadcastAddress, pref + mac16 |
26 | usock.close |
27 | end if |
------------------------------- und das Gleiche in PHP
1 | <?php
|
2 | # Wake on LAN - (c) HotKey (at SPR dot AT), upgraded by Murzik <tomurzik@inbox.ru>
|
3 | |
4 | flush(); |
5 | |
6 | function WakeOnLan($addr, $mac) |
7 | {
|
8 | $addr_byte = explode(':', $mac); |
9 | $hw_addr = ''; |
10 | |
11 | for ($a=0; $a < 6; $a++) $hw_addr .= chr(hexdec($addr_byte[$a])); |
12 | $msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255); |
13 | for ($a = 1; $a <= 16; $a++) $msg .= $hw_addr; |
14 | |
15 | $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); |
16 | if ($s == false) |
17 | {
|
18 | echo "Error creating socket!\n"; |
19 | echo "Error code is '".socket_last_error($s)."' - " . socket_strerror(socket_last_error($s)); |
20 | }
|
21 | else
|
22 | {
|
23 | $opt_ret = socket_set_option($s, 1, 6, TRUE); |
24 | if($opt_ret < 0) |
25 | {
|
26 | echo "setsockopt() failed, error: " . strerror($opt_ret) . "\n"; |
27 | }
|
28 | |
29 | $e = socket_sendto($s, $msg, strlen($msg), 0, $addr, 2050); |
30 | echo $e; |
31 | socket_close($s); |
32 | echo "Magic Packet sent (".$e.") to ".$addr.", MAC=".$mac; |
33 | }
|
34 | }
|
35 | |
36 | WakeOnLan('192.168.10.255', '00:1b:78:a3:ee:20'); |
37 | |
38 | ?>
|
Denk' dran: Eine schlafende Netzwerkkarte hat keine IP, nur eine MAC-Adresse. Diese erreicht man nur per Broadcast, der aber normalerweise nicht von einem Router weitergeleitet wird. Am Besten wäre ein "Komplize" im Inneren des Netztes, z.B. ein Pi oder ein Arduino, der - angestossen von einer Nachricht per Portforwarding von Router - seinerseits das Magic Packet erzeugt und absendet.
:
Bearbeitet durch User
Frank Esselbach schrieb: > Denk' dran: Eine schlafende Netzwerkkarte hat keine IP, nur eine > MAC-Adresse. Diese erreicht man nur per Broadcast, der aber > normalerweise nicht von einem Router weitergeleitet wird. Bei UDP-Paketen schon, nur muss die Zieladresse eben die Broadcast-Adresse des Netzes sein > Am Besten wäre > ein "Komplize" im Inneren des Netztes, nicht wirklich nötig. Ich hab mit der UDP-Variante gute Erfahrungen gemacht. Das schwierigste ist meiner Erfahrung nach die Geräte dazu zu bekommen, bei Wake-On-LAN-Paketen wirklich aufzuwachen. Bei manchen Geräten funktioniert das nur wenn Sie angeschaltet waren, das OS geladen war, das OS korrekt runtergefahren wurde und sie sich dann selbst ausgeschaltet haben. Wenn man dagegen den Strom getrennt hatte und nur den wieder eingeschaltet hatte, ging es nicht da das BIOS das Wake-On-LAN nicht selbst initialisiert hat und das das OS machen muss.
Gerd E. schrieb: > Na woher soll denn der Router die MAC des NAS kennen wenn das NAS aus > ist? Die scheint mein Router zu kennen. Zumindest wird sie im Web-Interface angezeigt ;-) Da die MAC ja fest ist, sollte der Router auch bei ausgeschaltetem NAS die MAC noch wissen. Frank Esselbach schrieb: > Am Besten wäre > ein "Komplize" im Inneren des Netztes, z.B. ein Pi oder ein Arduino Hm, also geht das garnicht von außen (ohne einen Spion im Inneren)? (übrigens danke für den Code!) Gerd E. schrieb: > nicht wirklich nötig. > Ich hab mit der UDP-Variante gute Erfahrungen gemacht. Oder doch? Jetzt bin ich verwirrt ^^ Was ist denn die "Broadcast Adresse meines Netzwerks"? Ich kenne ja nur die eine, nach außen hin sichtbare, DyDNS IP. Muss ich an einen speziellen Port senden, damit eine Broadcast-Message im Heimnetz daraus wird?
Manche Router bieten WOL als Service über ihre Weboberfläche. Dazu speichern sie die MAC-Adresse der angeschlossenen Geräte (während diese gerade mal eingeschaltet sind) oder man muss sie von Hand eingeben - ich glaube aktuelle Fritzboxen können das, sofern man sie vom Web aus erreichbar macht. Wer keine Lust darauf hat, jedesmal den Browser "anzwerfen" und sich durch die GUI zu klicken, könnte das damit verbundene Skript herausfinden und es über eine igenes kleines Tool abrufen. Ich mache das genau umgedreht. Mein NAS ist ständig an und ich schalte bei Bedarf versch. PCs (z.B. Server) über ein PHP-Skript ein, was vom Webserver des NAS ausgeführt wird (Code siehe oben).
Frank schrieb: > Manche Router bieten WOL als Service über ihre Weboberfläche. Dazu > speichern sie die MAC-Adresse der angeschlossenen Geräte (während diese > gerade mal eingeschaltet sind) oder man muss sie von Hand eingeben - ich > glaube aktuelle Fritzboxen können das, sofern man sie vom Web aus > erreichbar macht. Ich habe eine Fritzbox, die das angbietet. Im Web-Interface gibt es dazu einen Button "Computer wecken" (oder so ähnlich). Der tut tatsächlich was er soll, d.h. das NAS wacht auf wenn ich ihn drücke. => Das möchte aich aber nicht nutzen, da das zu umständlich ist (erst bei der Fritzbox einloggen, auf die richtige Seite wechseln, den Button drücken, dannbeim NAS einloggen...) Zusätzlich gibt es aber dort noch ein Häkchen "Computer bei Zugriff aus dem Internet automatisch aufwecken". Das klingt eigentlich genau wie das, was ich haben möchte. => Leider funktioniert das nicht. Ich kann auf das NAS zugreifen so viel ich will, die Fritzbox weckt es nicht auf :-(
Benutz doch erstmal lokal in deinem Netz einen fertiges WOL Programm um dein NAS zu wecken. Wenn das klappt weist du erstmal ob das überhaupt mit den momentanen Einstellungen geht. Wenn das klappt kannst du dir mit Wireshark ja mal die Telegramme anschauen und mit denen vergleichen die nicht klappen. Das hilft dann ungemein bei der Fehlersuche.
Botuser schrieb: > Benutz doch erstmal lokal in deinem Netz einen fertiges WOL Programm um > dein NAS zu wecken. Wenn das klappt weist du erstmal ob das überhaupt > mit den momentanen Einstellungen geht. Das habe ich ja bereits mit der Fritzbox gemacht (siehe oben). Botuser schrieb: > Wenn das klappt kannst du dir mit Wireshark ja mal die Telegramme > anschauen und mit denen vergleichen die nicht klappen. > Das hilft dann ungemein bei der Fehlersuche. Noch schöner wäre es ja, wenn das direkt über die FB klappen würde. Dann bräuchte ich mein programm garnicht ;-)
Soweit mir bekannt ist leiten nicht alle Router das Magic-Packet weiter. Ich würde da das Problem vermuten. Ich habe das ganze mit einer VPN-Verbindung gelöst.
Botuser schrieb: > Klappt der Zugriff auf dein NAS von Extern denn wenn es an ist? Ja, das geht. Karl schrieb: > Soweit mir bekannt ist leiten nicht alle Router das Magic-Packet weiter. > Ich würde da das Problem vermuten. Ich habe das ganze mit einer > VPN-Verbindung gelöst. Das sollte ja über die Auto-Aufwecken-Funktion der Fritzbox ganz einfach zu machen sein. Ohne Weiterleitung, VPN oder sonst was. Wenn es denn funktionieren würde ;-)
Ich wecke meine DS212+ mittels http://www.heise.de/download/wol.exe.html. Über die Fritzbox war es mir zu umständlich mich immer einzuloggen und auf die entsprechende Seite zu navigieren. Durch ein kleines Batch-Skript auf dem Desktop und o.g. Tool ist es nun nur noch ein Doppelklick...
Hast du mal das gelesen? http://avm.de/nc/service/fritzbox/fritzbox-7490/wissensdatenbank/publication/show/1482_Computer-wird-bei-Zugriff-aus-dem-Internet-nicht-automatisch-gestartet/
Boris P. schrieb: > NAS (Synology DiskStation). Diese unterstützt wake on LAN Genau deine? Nicht alle können das: https://www.synology.com/de-de/knowledgebase/faq/437
Karl schrieb: > Hast du mal das gelesen? > > http://avm.de/nc/service/fritzbox/fritzbox-7490/wissensdatenbank/publication/show/1482_Computer-wird-bei-Zugriff-aus-dem-Internet-nicht-automatisch-gestartet/ Jetzt schon. Und siehe da, es geht :-) Das mit den 15 Minuten warten habe ich natürlich bisher bei meinen Experimenten nicht beachtet. Damit hat sich das Ursprungsproblem in Wohlgefallen aufgelöst. Danke euch allen!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.