Hallo zusammen,
da ich immer wieder mal das Problem habe, dass meine Telefone am Speedport 921V einfach nicht mehr klingeln, wenn jemand versucht anzurufen, frage ich mich, ob man den Speedport mittels curl auch rebooten kann, in etwas so, wie man damit auch die Internetverbindung trennen kann.
Gefunden habe ich dazu bisher nichts, aber vielleicht weiss ja doch jemand, ob das geht und wie.
Grüße
Dennis
Hallo,
die libcurl kann keine Metatags auswerten, daher wird mechanize benötigt um den Speedport W 921V per script zu rebooten.
Mit python würde ein script in etwa so aussehen:
Code:
#!/usr/bin/python
#
import re
import mechanize
import sys, logging, time
import socket
import simplejson
socket.setdefaulttimeout(60)
br = mechanize.Browser()
print "connecting"
try:
br.open("https://speedport.ip/html/login/")
except:
print "connection failed"
sys.exit(1)
#print rsp.info()
#print rsp.read()
# loginstate","varvalue":"0
while True:
br.set_handle_referer(False)
br.addheaders = [('Referer', 'https://speedport.ip/html/content/config/problem_handling.html')]
rsp = br.open('https://speedport.ip/data/SecureStatus.json')
d = simplejson.loads(rsp.read())
l = d[8].values()
if l[0] != 'loginstate':
print "invalid status response"
sys.exit(99)
if l[1] == '0':
break
time.sleep(10)
login = 'password={dein passwort}&showpw=0'
br.set_handle_referer(False)
br.addheaders = [('Referer', 'https://speedport.ip/html/login/')]
print "login"
while True:
rsp = br.open('https://speedport.ip/data/Login.json', login)
if rsp.read().find('success'):
break
time.sleep(10)
#print rsp.info()
#print rsp.read()
reboot = 'reboot_device=true'
print "rebooting"
# sys.exit(0)
br.set_handle_referer(False)
br.addheaders = [('Referer', 'https://speedport.ip/html/content/config/problem_handling.html')]
try:
rsp = br.open('https://speedport.ip/data/Reboot.json', reboot)
if rsp.read().find('Speedport W 921V'):
print "interface busy"
sys.exit(2)
#ssl.SSLError: The read operation timed out
except:
if str(sys.exc_info()[1]).find('timed out'):
print "reboot successful"
sys.exit(0)
else:
print "reboot failed"
sys.exit(3)
Das Script bleibt solange in einer Schleife, bis ein connect, login und der reboot initiiert werden konnten, wer das nicht will, muss in den while Schleifen einen vorzeitigen Abbruch implementieren.
Es ist allerdings ein ziemlicher Aufwand nötig um das z.B. mit einer gefreetzten Fritzbox zu realisieren. Dazu ist ein Jenny Debian Linux auf einem USB-Stick nötig. Alternativ gibt es da natürlich auch Cygwin oder eine direkte Installation von Python auf dem Windows-PC.
http://freetz.org/wiki/packages/debootstrap
Mit 'chroot /var/media/ftp/uStor01/debian bash' startet man eine shell im debian.
Dort installiert man die nötigen Pakete mit apt-get, also python, mechanize und simplejson, dann ist man in der Lage mit dem chroot Kommando z.B. in der crontab der Fritzbox das Python Script aufzurufen.
chroot /var/media/ftp/uStor01/debian /home/w921v/reboot.py
Cooler Nebeneffekt ist halt ein schickes uraltes Debian auf der Fritzbox zu haben, ich starte damit auch den ntp-server zum Datumsabgleich.
Gestestet habe ich das mit der aktuellen Firmware für den Speedport W 921V:
Firmware-Version
1.24.000
Boot-Code-Version
v1.09.01
DSL-Modem-Code-Version
5.3.6.4.1.2
DECT-Basisstation-Version
CM20_V2031_0208.h
Hardware-Version
01
Also, dann...
An die Arbeit