ZTE MC889A (DNA-versio)

  • Keskustelun aloittaja Keskustelun aloittaja TJ74
  • Aloitettu Aloitettu
Se lisäosa kyllä nakkaa pihalle, mut hallinnan pitäisi vastata normaalisti ellei ole just FWA-firmis. Tyhjentämällä tr069-config toimii normaalisti, ainakin itsellä jo toista kuukautta yhteyden uptime
 
Sen verran lähelle menee, että hyödynnetään samaa threadia. ZTE on julkaissut tietyille markkinoille uuden MC889(A) Pro -version, jossa on ainakin tehokkaampi antennivahvistus ja kiinnitysmekanismi muuttunut helpottamaan suuntaamista. Saa nähdä, tuleeko Suomen markkinoille saataville:


889 ja Pro vierekkäin, kokoero on huomattava.

1726511525698.png
 
MC889A_DNAY_B13_FWA


Onko tähän ohjeita?
setTR069Config kun POSTaa hallinnasta kikkailen tyhjäksi niin katoo ne tiedot. On tuohon kans python-pala, mut en oo korjannu siihen paria juttua ja voi vaatia koodin läpikäyntiä;

Käyttö on tr069.py <purkin ip, 192.168.8.1> <käytäjänimi, admin> <salasana, 1234> --login multi

Koodi:
#!/bin/python3

import requests
from requests.exceptions import RequestException
import hashlib
from datetime import datetime
import urllib.parse
import json
import sys
import time
import urllib3
#from http.server import BaseHTTPRequestHandler, HTTPServer
import argparse

parser = argparse.ArgumentParser("ZTE tr069 tool")
parser.add_argument("ip", help="Router ip address")
parser.add_argument("username", help="Router username", default="admin")
parser.add_argument("password", help="Router password")
parser.add_argument("--login", help="Login method (multi, single)", default="single")
args = parser.parse_args()

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

s = requests.Session()

class zteRouter:

    def __init__(self, ip, username, password, login):
        self.login = login
        self.ip = ip
        self.protocol = "http"  # default to http
        self.username = username
        self.password = password
        self.try_set_protocol()
        self.referer = f"{self.protocol}://{self.ip}/"

    def try_set_protocol(self):
        protocols = ["http", "https"]
        for protocol in protocols:
            url = f"{protocol}://{self.ip}"
            try:
                response = requests.get(url, timeout=5, verify=False)
                if response.ok:
                    self.protocol = protocol
                    # print(f"{self.ip} is accessible via {protocol}")
                    return
            except RequestException:
                pass  # If RequestException occurs, try the next protocol
        # print(f"Could not determine the protocol for {self.ip}")

    def hash(self, str):
        return hashlib.sha256(str.encode()).hexdigest()

    def get_LD(self):
        header = {"Referer": self.referer}
        payload = "isTest=false&cmd=LD"
        r = s.get(self.referer + f"goform/goform_get_cmd_process?{payload}&_=", headers=header, data=payload, verify=False)
        return r.json()["LD"].upper()

    def getVersion(self):
        header = {"Referer": self.referer}
        payload = "isTest=false&cmd=wa_inner_version"
        r = s.get(self.referer + f"goform/goform_get_cmd_process?{payload}", headers=header, data=payload, verify=False)
        return r.json()["wa_inner_version"]

    def get_AD(self):
        def md5(s):
            m = hashlib.md5()
            m.update(s.encode("utf-8"))
            return m.hexdigest()

        def sha256(s):
            m = hashlib.sha256()
            m.update(s.encode("utf-8"))
            return m.hexdigest()  # no .upper() to match whatever mc7010 had
            #return m.hexdigest().upper()  # .upper() to match your example hash

        wa_inner_version = self.getVersion()
        hash_function = sha256 # set depending on device, MC7010 md5, MC889 sha256?
        cr_version = ""  # is empty, is printed on getInfos

        a = hash_function(wa_inner_version + cr_version)

        header = {"Referer": self.referer}
        rd_response = s.get(self.referer + "goform/goform_get_cmd_process?isTest=false&cmd=RD", headers=header, verify=False)

        rd_json = rd_response.json()
        u = rd_json.get("RD", "")

        result = hash_function(a + u)  # Use hash_function here as well
        print("result (hash of a + u):", result)  # Debug print

        return result

    def getCookie(self, username, password, LD, login):
        header = {"Referer": self.referer}
        hashPassword = self.hash(password).upper()
        ztePass = self.hash(hashPassword + LD).upper()

        if login == "multi":
            payload = {
                'isTest': 'false',
                'goformId': 'LOGIN_MULTI_USER',
                'password': ztePass,
                'user': username
            }
        else:
            payload = {
                'isTest': 'false',
                'goformId': 'LOGIN',
                'password': ztePass,
            }

        r = s.post(self.referer + "goform/goform_set_cmd_process", headers=header, data=payload, verify=False)
        return "stok=" + r.cookies["stok"].strip('\"')

    def getTRInfo(self):
        ip = self.ip
        cookie = self.getCookie(username=self.username, password=self.password, LD=self.get_LD(), login=self.login)
        #cmd_url = f"{self.protocol}://{self.ip}/goform/goform_get_cmd_process?multi_data=1&isTest=false&cmd=wa_inner_version%2Clte_rssi%2CZ5g_rssi%2Clte_rsrp%2CZ5g_rsrp%2Clte_rsrq%2CZ5g_rsrq%2Clte_snr%2CZ5g_SINR%2Csignalbar%2Ccell_id%2Cnr5g_action_band%2Ccell_id%2Cnetwork_provider%2Cmonthly_tx_bytes%2Cmonthly_rx_bytes%2Crealtime_tx_bytes%2Crealtime_rx_bytes%2Crealtime_tx_thrpt%2Crealtime_rx_thrpt%2Cwan_ipaddr%2Cwan_apn"
        cmd_url = f"{self.protocol}://{self.ip}/goform/goform_get_cmd_process?multi_data=1&isTest=false&cmd=cr_version%2Ctr069_ServerURL%2Ctr069_CPEPortNo%2Ctr069_ServerUsername%2Ctr069_ServerPassword%2Ctr069_ConnectionRequestUname%2Ctr069_ConnectionRequestPassword%2Cwan_ipaddr%2Ctr069_PeriodicInformEnable%2Ctr069_PeriodicInformInterval%2Ctr069_CertEnable%2Ctr069_DataModule%2Ctr069_Webui_DataModuleSupport"

        headers = {
            "Host": ip,
            "Referer": f"{self.referer}index.html",
            "Cookie": f"{cookie}"
        }

        response = s.get(cmd_url, headers=headers, verify=False)
        return response.text

    def setTRInfo(self):
        ip = self.ip
        #cookie = self.getCookie(username=self.username, password=self.password, LD=self.get_LD())
        cookie = self.getCookie(username=self.username, password=self.password, LD=self.get_LD(), login=self.login)

        headers = {
            "Host": ip,
            "Referer": f"{self.referer}index.html",
            "Cookie": f"{cookie}"
        }

        payload = {
            'isTest': 'false',
            'goformId': 'setTR069Config',
            'AD': self.get_AD(),
            "tr069_ServerURL": "https://ltm.mdna.fi:7548/tr069/ServiceHandle",
            "tr069_CPEPortNo": "",
            "tr069_ServerUsername": "",
            "tr069_ServerPassword": "",
            "tr069_ConnectionRequestUname": "",
            "tr069_ConnectionRequestPassword": "",
            "tr069_PeriodicInformEnable": "1",
            "tr069_PeriodicInformInterval": "7200",
            "tr069_CertEnable": "1",
            "tr069_DataModule": "",
            "tr069_Webui_DataModuleSupport": ""
        }
        response = s.post(self.referer + "goform/goform_set_cmd_process", headers=headers, data=payload, verify=False)
        return response.text

zteInstance = zteRouter(args.ip, args.username, args.password, args.login)

#class serveInfos():
#    gatheredJson = json.loads(zteInstance.getTRInfo())
#    print(json.dumps(gatheredJson))

class setInfos():
    gatheredJson = json.loads(zteInstance.getTRInfo())
    print(json.dumps(gatheredJson))
    print(zteInstance.setTRInfo())

if __name__ == "__main__":
    setInfos()
 
Pitää nollata ja heti ajaa perille, muuten kerkee mennä lukkoon kun purkki soittaa kotiin. Itse testailin tuon perille vanhentuneella SIMillä jolla se ei päässyt verkkoon.
 
@Richard ok, pitääpä kokeilla kunhan pääsen kotiin. Saisikohan tuonne tr069 configgiin työnnettyä DNA:n palvelimen ja tiedot? Jos pääsisi DNA päivitysten piiriin sillä? :think:
 
Tilasin tuollaisen MC889A Pron nyt sitten 7010:n korvaajaksi (bigbox.fi:stä, varmaan tuovat sen juuri jostain Puolasta ensin Baltiaan ja sitten lähettävät tänne). Toivottavasti softa ei ole aivan yhtä kuraa...

Tämän perusteella pitäisi olla ihan suht kuranttia kamaa PL softa ainakin taajuuksien osalta myös Suomen verkkoihin.

Jos mahdollista, laita vähän vertailua signaaliarvojen ja nopeuksien osalta MC7010 ja MC889 Pro:n välillä.
 
Tilasin tuollaisen MC889A Pron nyt sitten 7010:n korvaajaksi (bigbox.fi:stä, varmaan tuovat sen juuri jostain Puolasta ensin Baltiaan ja sitten lähettävät tänne). Toivottavasti softa ei ole aivan yhtä kuraa...
Olen testannut Puolalaista MC7010 kotimaisissa 5G verkoissa muutama vuosi sitten ja 5G ei mennyt päälle.
 

Statistiikka

Viestiketjut
253 985
Viestejä
4 417 879
Jäsenet
73 257
Uusin jäsen
Vepe21

Hinta.fi

Back
Ylös Bottom