Wake-On-Lan per URL-Aufruf von außen auslösen

Hallo,
ich bin nur selten im Forum, deshalb kommt die Antwort so spät.
Mir ist gerade nicht ganz klar was euer Problem ist. Das tar-Archiv enthält zwei Files: "start" und "my_cgi". Das "start"-script muss man ausführen (also z.B. mit telnet einloggen und im Directory, wo man das archiv ausgepackt hat "./start" aufrufen). Das script kopiert "my_cgi" auf die Ramdisk und überläd das cgi-script "system_status".
Gibt man jetzt in einem Browser den ...system_status... link ein wird stattdessen "my_cgi" aufgerufen. Das wertet die Paramter ?wol=xyz aus, sucht die mac-Addresse der angegebenen IP-Addresse und ruft ether-wake auf.
In #15 hat Markus19 seine debug.cfg gepostet, er installiert (oder besser erzeugt) das cgi-script also ohne Stick.
In #16 hat RalfFriedl beschrieben, wie man das noch etwas übersichtlicher hinschreiben kann.

Es kann sein, dass das Überladen je nach Branding nicht funktioniert, man sollte vielleicht besser /usr/www/cgi-bin/system-status statt /usr/www/avm/cgi-bin/system_status überladen. Außderdem könnte man sich das Umkopieren des originalen system_status sparen, da dies ja auch nur ein link nach /usr/bin/system_status ist.

Ob das auf einer 7050 läuft hängt davon ab, ob die 7050 ein cgi-script system_status hat. Ansonsten kann man auch ein anderes cgi-script überladen, man sollte aber wissen was man tut (und auf jeden Fall nicht webcm dafür nehmen!). system_status erschien mir ziemlich Risiko-los. Man kann aber natürlich auch das ganze Directory überladen und eigene cgi-scripte hinzufügen, eines könnte dann ja auch "wol" heissen... Dann könnte noch das ether-wake in der 7050 fehlen, das war in älteren Firmwareständen nicht drin.

Ich bin ansonsten ein Freund davon zu verstehen was man tut. Dann kann man sich auch helfen, wenn eine Anleitung bei einer neuen Version nicht mehr tut. Wenn jemand diese Anleitung schreiben will, kann er das ja gerne tun.

Gruss, Reiner
 
Zuletzt bearbeitet:
Vielen Dank ruesmueller, für die Zusammenfassung.
Es wird sich nicht Jeder auf der Unix-Shell wohlfühlen, wie auch viele Linux-Jünger an Win scheitern ;-)
Ich fühle mich wohler, wenn die einzelnen Schritte so erklärt werden, dass sie auch für Nicht-Experten verständlich sind.
Ich mache nun den Anfang und vielleicht kann die Guideline miteinander ergänzt werden, wäre schön!

Wie aktiviert man den Telnet-Server auf der Fritz-Box?

Mit ISDN-Telefon #96*7* wählen, am Display wird die Aktivierung bestätigt.

Wie aktiviert man den Telnet-Client unter Windows?

Der Telnet-Client ist leider versteckt und man muss ihn (zumindest unter Win7) explizit aktivieren:
Systemsteuerung >> Programme und Funktionen >> Win Funktionen aktivieren >> Telnet-Client >> OK

Wie greife ich nun auf die Linux-Shell der Fritz-Box zu?

Win-Command-Shell aufmachen mit "cmd", dann "telnet" aufrufen, ?/help zeigt alle Kommandos.
open fritz.box, Passwort eingeben (so erforderlich), Anmeldung an Mini-Linux BusyBox ist erfolgt.

To be continued...

Gruß
 
@go4java: ich habe bereits mehrmals versucht, dir per PM zu erklären, wie das ganze läuft und was das Skript macht. Aber deine Antworten ließen mich darauf schließen, dass du das Konzept dahinter noch nicht verstanden hast. Ich denke du kommst nicht drumrum, dich zuerst allgemein mit FritzBox-Mods zu beschäftigen, denn man kann hier viel falsch machen. Und einfach irgendwas in irgendwelche Dateien zu schreiben ist sicher nicht der richtige Weg.
Ich habe selbst von Linux keine Ahnung, deswegen musste ich mich auch damit beschäftigen. Das hat dann zum einen den Vorteil, dass man das Skript für seine Zwecke anpassen kann, und zum anderen, dass man versteht, was passiert, und ggf. Fehler nachvollziehen und beheben kann.
 
Normalerweise würde man "telnet fritz.box" eingeben, statt erst telnet aufzurufen und dann erst mit open die Verbindung herzustellen. Die anderen Möglichkeiten von telnet sind zwar interessant, aber selten verwendet. Und "telnet fritz.box" kann man auch direkt bei Start/Ausführen eingeben. Dafür muß man auch nicht vorher telnet aktivieren.

Ich habe hier mal den Programmcode, der von den echo-Anweisungen oben erstellt wird:
Code:
#! /bin/sh

path=/var/custom_commands
orgcmd=$path/system_status

# get Parameter ($cmd+$par) z.B. wol=192.168.1.123
cmd=$(echo $QUERY_STRING | sed -n "s/\(.*\)=\(.*\)/\\1/p")
par=$(echo $QUERY_STRING | sed -n "s/\(.*\)=\(.*\)/\\2/p")

# echo "QS: $QUERY_STRING, function: $cmd, param: $par" >>$path/param

if [ $cmd = "wol" ]; then

  # get mac from multid.leases
  set -- $(grep $par </var/flash/multid.leases) >/dev/null
  if [ $? = 0 ]; then
    mac=$2
  else
    mac=$par
  fi

  # call ether-wake
  ether-wake $mac >$path/output

  echo "Content-type: text/html"
  echo ""
  echo "<html><body>Der Wake-Befehl wurde an die Mac-Adresse $mac gesendet.<br><br>"
  echo "<a href=http://meinedyndns.no-ip.org>Zur Weboberflaeche...</a></body></html>"
  echo ""

  exit
fi

$orgcmd
Der Link auf meinedyndns.no-ip.org ist so vermutlich nicht sinnvoll. Das einfachst wäre, den Link wegzulassen und stattdessen auf den Back-Knopf im Browser zu verweisen, über JavaScript back() aufzurufen, oder href=/ zu verwenden.
 
...ich denke nun den Einsatz von FREETZ an.
Unter http://go.raidrush.ws/?http://trac.freetz.org/browser/tags/freetz-1.1.2/FIRMWARES ist aufgeführt, dass FREETZ folgende Firmware der Fritz 7170 unterstützt: * Fritz!Box Fon WLAN 7170 bzw. 7170 SL: 29.04.76.
Die aktuellste F/W-Version ist .80 vom 24.02.2010.
1.) Ist das ggf. ein Problem?

2.) Der Screenshot http://trac.freetz.org/screenshots/14 zeigt eigentlich genau die Lösung für mein Problem mit der Sony PS3: Man würde den Host (in meinem Fall ein schlafendes WHS-System) auswählen, die MAC-Adresse würde autom. gezogen und der Klick auf "Wake Up" den Media-Server (=WHS) starten.

Gruß
 
Man kann aber natürlich auch das ganze Directory überladen und eigene cgi-scripte hinzufügen, eines könnte dann ja auch "wol" heissen...

Ich hab mir das mal angeschaut, war dann ganz einfach machbar und auch das wol-cgi-script vereinfacht sich erheblich:
Code:
#! /bin/sh

OLD=/usr/www/$OEM
NEW=/var
DIR=cgi-bin

tar -c -C $OLD $DIR | tar -x -C $NEW
mount -o bind $NEW/$DIR $OLD/$DIR

cat >$NEW/$DIR/wol << 'EndOfHereFile'
#! /bin/sh

# get mac from multid.leases
set -- $(grep $QUERY_STRING </var/flash/multid.leases) >/dev/null
if [ $? = 0 ]; then
  mac=$2
else
  mac=$QUERY_STRING 
fi
  
# call ether-wake
ether-wake $mac >/dev/null
  
echo "Content-type: text/html"
echo ""
echo "<html><body>ether-wake $QUERY_STRING - $mac</body></html>"
echo ""
  
EndOfHereFile

chmod 755 $NEW/$DIR/wol

Die tar-Zeile kopiert das Directory /usr/www/avm/cgi-bin nach /var/cgi-bin, da das alles Links sind, verbraucht das nur wenig Speicher (im Gegensatz zu /usr/www/cgi-bin). Die mount-Zeile überläd dann das Originaldirectory. Dann wird das cgi-script "wol" erstellt und am Ende ausführbar gemacht. Es können jetzt auch weitere cgi-Kommandos hinzugefüht und mit "richtigem Namen" ausgeführt werden.
Also, den Code in ein Script speichern, das Script auf der Box ausführen und wol mit z.B. http://fritz.box/cgi-bin/wol?192.168.1.20 (bzw. per Fernwartung) ausführen.

Gruss, Reiner
 
Zuletzt bearbeitet:
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.