Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## Speedport W724V Typ A Reconnect -- For new Firmware 05011603.05.028 [Nov 2017] and probably also 05011603.05.020 [Dec 2016]
- ## Based on Speedport Smart Reconnect by Bizzy13
- ##
- ## INSTALL INSTRUCTION
- ##
- ## Windows:
- ## - Download Python 2.7 https://www.python.org/ftp/python/2.7.14/python-2.7.14.msi
- ## - Install Python 2.7 under C:\Python27\
- ## - Download pycryptodome-3.4.7-cp27-cp27m-win32.whl and save it directly under C:\ https://pypi.python.org/simple/pycryptodome/
- ## - Open the command prompt and type in the following commands
- ## cd C:\Python27\Scripts
- ## pip install C:\pycryptodome-3.4.7-cp27-cp27m-win32.whl
- ## - JDownloader Settings
- ## Reconnect method -> External Batch Reconnect
- ## Interpreter -> C:\Python27\python.exe
- ## Batch-Script -> C:\PATH_TO_RECONNECT_SCRIPT\Reconnect.py
- ##
- ## Linux:
- ## - Python 2.7 (In the most Linux Distributions already included)
- ## - Download pycryptodome-3.4.7.tar.gz https://pypi.python.org/simple/pycryptodome/
- ## - Open the Terminal and type in the following command
- ## sudo pip install /PATH_TO_THE_DOWNLOADED_FILE/pycryptodome-3.4.7.tar.gz
- ## - JDownloader Settings
- ## Reconnect method -> External Batch Reconnect
- ## Interpreter -> /usr/bin/python
- ## Batch-Script -> /PATH_TO_RECONNECT_SCRIPT/Reconnect.py
- ##
- ##
- ## CONFIG
- ##
- device_password = "YourPassword" # The device password for login
- speedport_url = "http://speedport.ip/" # The URL to the Speedport W724V Typ A Configurator
- Sleeptime = 5 # If the Reconnect don't work, change the number to 10 and then try again
- ##
- ## DO NOT CHANGE ANYTHING BELOW THIS LINE
- ##
- from Crypto.Hash import SHA256
- import time
- import sys
- import socket
- import json
- import urllib
- import urllib2
- import cookielib
- login_html = "html/login/index.html"
- login_json = "data/Login.json"
- connection_json = "data/Connect.json"
- connection_html = "html/content/internet/connection.html"
- ipinfo_json = "data/InetIP.json"
- challenge_val = ""
- http_header = {"Content-type": "application/x-www-form-urlencoded", "charset": "UTF-8"}
- cookies = cookielib.CookieJar()
- opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))
- socket.setdefaulttimeout(7)
- # URL has to end with slash
- if not speedport_url.endswith("/"):
- speedport_url += "/"
- # Gets the challenge_val token from login page
- def get_challenge_val():
- global challenge_val
- print("Extracting Random-Key...")
- challenge_val = extract(speedport_url + login_html, 'challenge = "', '";')
- if not bool(challenge_val):
- sys.exit("Couldn't extract Random-Key from " + speedport_url + login_html)
- else:
- print("Random-Key: "+ challenge_val)
- # Login with devices password
- def login():
- print ("Logging in...")
- # Hash password with challenge_val
- sha256_full = SHA256.new()
- sha256_full.update("%s:%s" % (challenge_val, device_password))
- encrypted_password = sha256_full.hexdigest()
- # Finally login
- json_string = open_site(speedport_url + login_json, {"csrf_token": "nulltoken", "showpw": 0, "password": encrypted_password, "challengev": challenge_val})
- json_object = string_to_json(json_string)
- # Check valid response
- for x in json_object:
- if x["vartype"] == "status":
- if x["varid"] == "login":
- if x["varvalue"] != "success":
- sys.exit("Failed to login at URL " + speedport_url + login_json)
- if x["varid"] == "status":
- if x["varvalue"] != "ok":
- sys.exit("Failed to login at URL " + speedport_url + login_json)
- print("Login successful")
- # Extract a String
- def extract(url, a, b):
- html = open_site(url, None)
- start = html.find(a)
- end = html.find(b, start)
- return html[(start + len(a)) : end]
- # Reconnecting the Speedport
- def reconnect():
- # Get old IPv4 address
- oldIP = "Error"
- json_string_oldIP = open_site(speedport_url + ipinfo_json, None)
- json_object = string_to_json(json_string_oldIP)
- for x in json_object:
- if x["varid"] == "public_ip_v4":
- oldIP = x["varvalue"]
- csrf_token = get_csrf_token()
- print("Disconnecting...")
- # Disconnect Speedport with token
- open_site(speedport_url + connection_json, "req_connect=disabled&csrf_token=" + urllib.quote_plus(csrf_token))
- time.sleep(3)
- print("Connecting...")
- # Connect Speedport with token
- open_site(speedport_url + connection_json, "req_connect=online&csrf_token=" + urllib.quote_plus(csrf_token))
- time.sleep(Sleeptime)
- # Get new IPv4 address
- newIP = "Error"
- json_string_newIP = open_site(speedport_url + ipinfo_json, None)
- json_object = string_to_json(json_string_newIP)
- for x in json_object:
- if x["varid"] == "public_ip_v4":
- newIP = x["varvalue"]
- print("Old IP: " + oldIP)
- print("New IP: " + newIP)
- if oldIP == newIP:
- print("Reconnect failed")
- else:
- print("Reconnect successful")
- #Log Out
- open_site(speedport_url + login_json, {"logout": "byby", "csrf_token": urllib.quote_plus(csrf_token)})
- quit()
- def get_csrf_token():
- print("Extracting csrf_token...")
- html = open_site(speedport_url + connection_html, None)
- start = html.find("csrf_token")
- # Found a crsf token?
- if start == -1:
- sys.exit("Couldn't extract csrf_token")
- # Get raw token
- end = html.find(";", start)
- ex = html[(start + len("csrf_token = \"") - 1) : (end - 1)]
- print("csrf_token: " + ex)
- return ex
- # Opens a specific site
- def open_site(url, params):
- # Params only for post requests and dicts
- if params != None and type(params) is dict:
- params = urllib.urlencode(params)
- # Open URL
- req = urllib2.Request(url, params, http_header)
- res = opener.open(req)
- # Return result
- return res.read()
- # Converts a string to a json object
- def string_to_json(string):
- # Replace special tokens
- string = string.strip().replace("\n", "").replace("\t", "")
- # Some strings are invalid JSON object (Additional comma at the end...)
- if string[-2] == ",":
- string_list = list(string)
- string_list[-2] = ""
- return json.loads("".join(string_list))
- return json.loads(string)
- # At first get challenge_val
- get_challenge_val()
- # Then login
- login()
- # Then Reconnecting
- reconnect()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement