WOL - wake.cgi ändern?

krystov

Neuer User
Mitglied seit
1 Dez 2007
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

wie viele andere auch möchte ich meine Rechner von Unterwegs wecken können. Dafür nutze ich Freetz auf einer 7170. Einen iMac kann ich über das wol-cgi auch ganz hervorragend wecken. Einen anderen Rechner bekam ich jedoch mit der FB nie an. Mit einem Magic-Packet im Netz von einem anderen Rechner geschickt dagegen ging er immer an.

Nach einer langen Fehlersuche mit Port- und Paket sniffern habe ich den "Fehler" gefunden. wenn ich per telnet auf der FB 7170 ether-wake mit der Option -b und dem Interface lan starte, bekomme ich den Rechner an. Nun möchte ich mich nicht jedesmal wenn ich den Rechner wecken möchte, per Telnet mit der Box verbinden. Zumal ich dies häufig mit dem Handy mache ist es doch ein wenig fummelig. Ich möchte daher die wake.cgi anpassen. Das müsste doch die Datei sein, die ether-wake mit den Parametern aus der wol-cgi aufruft, oder?

Leider reichen hier meine Kentnisse nicht aus. Ich finde die datei noch nicht einmal auf der Box. Kann mir jemand helfen?

Es muss einfach nur dem bestehenden Befehl die Option -b hinzugefügt werden.

Vielen Dank!
 
Hast du mal probiert zusätzlich das "wol" Paket mit ins Image zu nehmen? Das ist eine Alternative zu etherwake, die über die gleiche Seite bedient wird.

MfG Oliver
 
@krystov: Interface kannst du dadurch beeinflüssen, dass du in der hosts-Datei (die von wol.cgi ja benutzt wird) anstatt * z.B. eth0 schreibst. Damit bestimmst du, dass magic-Pakete nur über eth0 rausgehen.
Zur Option -b gab es hier ebenfalls etwas, wenn ich mich richtig besinne. Schau mal doch bitte in den Quellen von wol.cgi auf freetz.org.
wol.cgi ist tatsächlich etwas gewöhnungsbedürftig und Bedarf längst einer Überarbeitung. Ich habe da einige Ideen zu, was man da alles machen könnte, um es unter anderem mit meinem hol-Paket zu "verheiraten". Außerdem gab es hier im Forum eine sehr nützliche Erweiterung, die leider nie in den trunk eingeflossen war: Eine Filterung der hosts-Datei, sodass nur die benötigten hosts der wol.cgi zur Verfügung stehen. Im Alter von WLAN und 10-15-Geräte in der hosts-Datei ist solche Filterung sehr hilfreich.

Wenn du wirklich an wol.cgi was ändern willst, dann berücksichtige bitte diese "Vorarbeiten" und poste bitte deine Änderungen in Form von Patches gegen trunk hier, damit die Anderen auch was davon haben.

MfG
 
Also ich habe es gelöst und kann von nun an alle Rechner zuverlässig über das wol-cgi von freetz wecken, wenngleich das wahrscheinlich nicht die eleganteste Lösung ist:

Zuerst habe ich die Original wake.cgi nach /data kopiert, da diese Verzeichnis beim Neustart der Box erhalten bleibt.

Code:
cp /usr/mww-wol/cgi-bin/wake.cgi /data

Anschliessend habe ich die Datei wake.cgi im Verzeichnis /data editiert und den beiden darin befindlichen ether-wake aufrufen jeweils den Schalter -b mit auf den Weg gegeben. Meine geänderte wake.cgi sieht dann so aus:

Code:
eval "$(modcgi mac:interf wol)"   
                                  
if [ -z "$WOL_MAC" ]; then        
        cgi_begin 'Fehler'     
        echo "<p><b>Fehler</b>: Keine MAC Adresse angegeben</p>"
        cgi_end                                                 
        exit 1                                                  
fi                                                              
                                                                
cgi_begin 'Wecke '"$WOL_MAC"' auf...'                           
                                                                
echo -n '<pre>sending magic frame...'                           
                                     
if [ -z "$WOL_INTERF" ]; then        
        ether-wake -b "$WOL_MAC" 2>&1
else                                 
        ether-wake -b -i "$WOL_INTERF" "$WOL_MAC" 2>&1
fi                                                 
                                                   
echo 'done.</pre>'                                 
echo '<form action="/cgi-bin/index.cgi"><input type="submit" value="Zur&uuml;ck"
                                                                                
cgi_end

Danach habe ich in die debug.cfg aufgenommen, dass die Original wake.cgi beim Start der Box durch die wake.cgi aus meinem data-Verzeichnis "überschrieben" wird, da ich sie auf der Box ja nicht dauerhaft ändern kann, oder? Das sieht dann so aus:

Code:
mount -o bind /data/wake.cgi /usr/mww-wol/cgi-bin/wake.cgi

Nun klappt es genau so wie ich mir das vorgestellt habe.

Für alle, die Probleme haben, einen Rechner mit der Fritzbox zu wecken sollten mal per telnet versuchen ob Ihnen

Code:
ether-wake -b -i lan xx:xx:xx:xx:xx:xx

hilft und der Rechner an geht. Wenn ja, dann hilft die hier beschriebene Änderung der wake.cgi
 
Für deine temporäre Lösung mag es ja gut sein. Die Frage ist aber, ob es nicht dadurch manchmal zu Problemen kommt, wenn man -b da immer stehen hat. Leider ist die Beschreibung von busybox-eigener ether-wake ziemlich sparlich:
Code:
/var/mod/root # ether-wake --help
BusyBox v1.17.1 (2010-08-02 15:17:42 CEST) multi-call binary.

Usage: ether-wake [-b] [-i iface] [-p aa:bb:cc:dd[:ee:ff]] MAC

Send a magic packet to wake up sleeping machines.
MAC must be a station address (00:11:22:33:44:55) or
a hostname with a known 'ethers' entry.

Options:
        -b              Send wake-up packet to the broadcast address
        -i iface        Interface to use (default eth0)
        -p pass         Append four or six byte password PW to the packet
und ich kann daraus nicht verstehen, wofür da -b überhaupt gut ist. Ich habe allerdings eine leise Vermutung, dass -b eigentlich heißt, dass magic an ALLE Rechner im Subnetz geschickt wird, damit ALLE aufwachen. Um dies zu verifizieren, kannst du bitte die MAC-Adresse in deiner Kommandozeile verfälschen und versuchen so den Rechner zu wecken?
Denn es gibt bei magic-Paketen manchmal seltsame Dinge, dass die MAC-Adresse "gespiegelt" (verkehrt) gesendet werden muss. Vielleicht gehört deine Netzwerkkarte dazu.
Bevor wir -b bei wol-cgi fest einbauen, würde ich auf jeden Fall zunächst herausfinden, was denn dabei alles passiert.

MfG
 
Hallo Hermann,

ich habe vorher alles mögliche getestet. Auch die MAC-Adresse rückwärts und was es nicht alles gibt. Leider konnte ich damit den Rechner mit der FB nicht wecken. Ich habe dann mit WOL-Paket-Sniffern mehrere Rechner beobachtet. Was mich gewundert hat, war die Tatsache, dass ich, wenn ich ein Magic-Paket mit einem anderen Gerät im LAN an einen Rechner sende (mit einem iPhone oder von einem anderen Rechner aus), alle Rechner zuverlässig geweckt wurden. Wenn ich aber von der FB ein Paket mit der WOL-CGI los geschickt habe, dies nicht zuverlässig war und bei einem Rechner sogar ohne jegliche Reaktion blieb.

Ich habe mit dem WOL-Sniffer dann heraus gefunden, dass etherwake ohne -b an diesem Rechner gar nicht ankam, während ich die von anderen Geräten abgeschickten Magic-Pakete sofort sehen konnte.

Dann kam ich durch Zufall auf die Idee einfach mal den Schalter -b zu setzen und habe ether-wake per Telnet auf der Box mit diesem Schalter gestartet und siehe da, das Paket kam an dem Rechner an, während es ohne -b nicht ankommt.

Alle anderen Rechner im Netzwerk bleiben aus, auch wenn ich den Schalter -b setze. Es wird nur der von mir genannte Rechner geweckt. Ein Vergleich des Magic-Paketes wie es bei dem Rechner ankommt, hat auch gezeigt, dass es genauso aufgebaut ist, wie die Pakete die ich von meinem iPhone oder anderen Rechnern mit entsprechender WOL-Software versende. Als Empfänger steht auch immer die IP des zu weckenden Rechners drin.

Ich habe hier auch von einigen gelesen, die Probleme haben, Rechner zu wecken, die per Ethernet an einer zweiten, per WLAN-WDS angebundenen FB hängen (also quasi an einer WLAN-to-Ehternet-Bridge). Mit dem Schalter -b habe ich auch dies hin bekommen, was ohne -b bei mir nicht funktioniert.

Wie wäre es mit einem Optionsfeld: "An Broadcastadresse" über das man im GUI steuern kann, ob der Parameter -b gesetzt wird, oder nicht?
Alternativ: Kann man es als Option in die hosts-Datei aufnehmen?
 
Zuletzt bearbeitet:
Wenn man -b schon in die hosts aufnimmt, dann eben in diese gefilterte Geschichte, die ich zuvor ansprach.
Kannst du bitte deine hosts posten? Vielleicht liegt dein Problem einfach daran, dass du die falschen Interfaces in der hosts stehen hast. Bei mir steht da z.B. "eth0" und nicht "lan", wie du es hast. Vielleicht bewirkt -b genau das, dass es an alle Interfaces geschickt wird und daher bei deinen Rechnern besser ankommt? Denn wie ich schon sagte: Wir müssen zunächst verstehen, was -b denn genau bewirkt.

MfG
 
Hallo Hermann,

zu den Interfaces habe ich hier viel im Forum gefunden. So wie ich es verstanden habe, wird darüber gesteuert, über welchen "Ausgang" der FB das Paket gesendet wird. eth0 hilft mir nicht, da es sich nur auf per ethernet direkt an der Box angeschlossene Geräte bezieht. Meinen iMac zum Beispiel wecke ich per Wake-on-WLAN. Dafür ist aber der Eintrag wlan0 als interface erforderlich, weil eth0 das Paket nicht über das WLAN vertreilt. Das Interface lan jedoch, schickt es das Paket sowohl an das ethernet netz als auch an das wlan, also an das gesamte Netzwerk.

Auch für die oben erwähnten Geräte, die an einer WLAN-to-Ethernet-Bridge hängen, kann ich Dir aus nunmehr fast zweiwöcheigen intensiven Test sagen, hilft bei mir nur das Interface lan um zu wecken.

Ich betreibe einen W920V mit einer 7570er AVM-Firmware an meinem DSL-Anschluss. Daran hängt per Kabel eine 7170 für das 2,4 GHz WLAN, da ich die 7570 im 5 GHz WLAN betreibe. Zusätzlich habe ich noch zwei WLAN-to-Ehternet-Bridges (Apple Airport Express) in Betrieb.

Das Magic-Paket sendet meine 7170. Wenn ich nun also den iMac wecken will, dann muss das Paket folgenden Weg nehmen:
FB 7170 -> Ethernet-Kabel -> W920V -> WLAN 5GHz -> iMac
gebe ich hier als Interface eth0 an, geht der Rechner nicht an. Gebe ich wlan0 an geht er auch nicht an. Gebe ich lan an geht er an. Ich stelle mir das als absoluter Laie so vor, dass das per eth0 gesendete Pakte von dem W920V nicht ins WLAN geschickt wird und dort versackt. Das an wlan0 gesende Paket schickt die FB erst garnicht an den w920v sondern über sein eigenes 2,4 GHz Netz. Das an lan geschickte Paket wird über alle Netze geschickt und auch vom W920V sowohl an das Ethernet als auch an das WLAN.
Wie gesagt: Meine Laienvorstellung der Dinge. Aber es erscheint mir logisch und funktioniert auch genau so.
Wenn ich das Magic-Paket von dem W920V per Telnet versende, funktioniert es auch wenn ich als interface wlan0 angebe. Dies bestätigt aus meiern Sicht auch meine "Theorie".

Meine hosts sieht so aus:
Code:
192.168.0.xx xx:xx:xx:xx:xx:xx lan iMac
192.168.0.xx xx:xx:xx:xx:xx:xx lan SCALEO-E

und so weiter. Anstatt der xx natürlich die jeweilige (feste) IP und die MAC-Adresse.
 
Zuletzt bearbeitet:
Ich glaube eine Erklärung für -b endlich gefunden zu haben:
http://www.linuxquestions.org/questions/linux-software-2/etherwake-over-a-network-switch-304650/

Zusammengefasst und übersetzt (so wie ich es verstanden habe):
-b bewirkt, dass anstatt von 192.168.0.XYZ immer 192.168.0.255 genommen wird. Das scheint in solchen Fällen wie bei dir zu helfen, sich durch diverse Switches etc. "durchzukämpfen". So wie ich es verstanden haben, wird im Falle ohne -b etwas genauer "geschaut" wohin die Pakete gehen. Und das funktioniert in so einem komplizierten Netzwerk nicht immer.
Die Broadcast-Adresse bedeutet tatsächlich, wie ich es vermutet hatte, dass magic-paket an ALLE los geht. Da allerdings im Paket die MAC-Adresse des Rechners drinne steckt, wird nur der Rechner mit der besagten MAC-Adresse aufwachen, obwohl die anderen "mithören".

Aus diesem Anlass macht es wenig Sinn -b pro WOL-Klient ab/einschaltbar zu machen, sondern eher als eine globale Option für wol.cgi allgemein. Ich würde sogar noch weiter gehen und diese Option per default auf aktiv setzen.

MfG
 
Nein, leider falsch. Das sind bei der FB keine IP Pakete !
-b = Broadcast gibt es auch bei den MAC-Adressen.
Mit -b beginnen die Packete mit ff ff ff ff ff ff ff.
Ohne -b beginnen die Packete mit der MAC die man wecken will.

Leider gibt es keinen richtigen Standard für diese Magicpakete.
Andere schicken sie durchaus als IP/UDP Packete raus
und jede NIC reagiert nur auf bestimmte Pakete.

@krystov
Es währe sehr nützlich, wenn du deine gesnifferten Pakete hier mal posten würdest.

Bei den Dateien nur .txt entfernen !
 

Anhänge

  • WoL-FB7170 ohne -b.pcap.txt
    156 Bytes · Aufrufe: 3
  • WoL-FB7170 mit -b.pcap.txt
    156 Bytes · Aufrufe: 4
Zuletzt bearbeitet:
@eisbaerin: Genau so hatte ich auch anfangs gedacht. Deswegen kamen ja auch meine Fragen. In der zitierten Diskussion war es aber für mich plausiebel genug erklärt, dass es sich um die IPs handelt und nicht um MACs. Lies doch die zitierte Erklärung aufmerksam durch.
Und die Erklärung bestätigt sich auch in der praxis von krystov, denn wenn MACs wirklich mit FF belegt wären, würden bei ihm ALLE Rechner aufwachen. Das tun sie aber anscheinend nicht, wie wir vorher bereits geklärt hatten.

MfG
 
Hast du dir die Pakete denn mal angeschaut ???
Dann mach es bitte.

Die dest.MAC kann durchaus Broadcast sein, weil die zu weckende MAC dann im Paket noch 16 mal steht.

In der Diskussion sehen die Pakete anders aus: IP+UDP
und wenn du aufmerksam gelesen hast: auch die schicken sie an Broadcast-MAC:
with a broadcast MAC address
 
Zuletzt bearbeitet:
Hallo komme an dieser Stelle hier nicht weiter.

http://www.ip-phone-forum.de/showthread.php?t=238174&page=2

Einfach gesagt, kann ich über (Fritbox 5050) Telnet problemlos meinen Wlan Rechner mit dem Befehl

ether-wake -b -i lan aa:bb:cc:dd:ee:ff (Mac Adresse) aufwecken.

Nur erlaubt die Syntax

<ip> <mac> <interface> <host> [<aliases|#description>]? bei Freetz WOL kein Hinzufügen des Schalters -b bzw. er wird ignoriert.

Die Prozedur des Themenerstellers
Code:
mount -o bind /var/tmp/wake.cgi /usr/mww-wol/cgi-bin/wake.cgi


(habe entgegen "/data" "/var/tmp" zu Testzwecken gewählt), erzeugt nach Klicken des "Wakeup" Butons ein "File not found"

Wie kann man die wake.cgi modifizieren, dass der Schalter -b per default immer abgesendet wird?
 
Generell funktioniert das Überschreiben/Ändern von Dateien so:
Code:
OLD=/usr/mww-wol/cgi-bin/wake.cgi
NEW=/var/tmp/wake.cgi

cp -p "$OLD" "$NEW"
mount --bind "$NEW" "$OLD"
#ändern
vi "$NEW"
 
Danke, das klappt eigentlich, nur ist die Datei wake.cgi nach dem Neustart leer.

Könnte man in der rc.custom etwas eintragen, damit die Datei nach Reboot aufs Neue editiert und abgespeichert wird?

Also vi Befehle? Geht sowas?
 
Für automatisches Ändern ist sed besser als vi.
Die Methode mit mount --bind ist eher zum Testen geeignet. Wenn Dir klar ist, was geändert werden musst, änderst Du das am Besten gleich in der Build-Umgebung und erstellt ein neues Image.
 
Äußerst hartnäckig.

Aber es geht jetzt. In der Tat habe ich zunächst bei der Freetz-Image Erstellung die wake.cgi
in

trunk\packages\target-mipsel_uClibc-0.9.28\wol-cgi-0.6\root\usr\mww-wol\cgi-bin

ausgetauscht, mit folgendem Inhalt:
HTML:
#!/bin/sh



cgi_width=560
. /usr/lib/libmodcgi.sh

eval "$(modcgi mac:interf wol)"   
                                  
if [ -z "$WOL_MAC" ]; then        
        cgi_begin 'Fehler'     
        echo "<p><b>Fehler</b>: Keine MAC Adresse angegeben</p>"
        cgi_end                                                 
        exit 1                                                  
fi                                                              
                                                                
cgi_begin 'Wecke '"$WOL_MAC"' auf...'                           
                                                                
echo -n '<pre>sending magic frame...'                           
                                     
if [ -z "$WOL_INTERF" ]; then        
        ether-wake -b "$WOL_MAC" 2>&1
else                                 
        ether-wake -b -i "$WOL_INTERF" "$WOL_MAC" 2>&1
fi                                                 
                                                   
echo 'done.</pre>'                                 
echo '<form action="/cgi-bin/index.cgi"><input type="submit" value="Zur&uuml;ck"
                                                                                
cgi_end



Ich hatte aber dann mit diesem Image beim klicken der Taste "Wakeup" immer ein "File not found". Ich schätze mal, da hätte ich vorher noch irgendwelche Reche setzten müssen?
Nach einer Woche des Testens habe ich es dann folgendermaßen gemacht:
mit Win32pad eine Datei wake.cgi im Unix-Format angelegt, und sie zu meinem Webspace hochgeladen. Inhalt der wake.cgi s.o. (Im Unix-Format abspeichern nicht vergessen!)

In die rc.custom des Freetz Images folgendes eingetragen:

Code:
cd /var
wget http://webspace_deiner_wahl/wake.cgi
chmod 777 /var/wake.cgi
mount --bind /var/wake.cgi /usr/mww-wol/cgi-bin/wake.cgi

Damit geht es. Wake on Wlan ist in Verbindung mit dem WNCE2001 endlich möglich.

Danke noch mal für die Hilfe.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.