Automatisches Neustart Skript für den Speedport Hybrid Router

Gelöst

Hallo Community,

 

Da der Speedport Hybrid des öfteren, z.B durch eine Zeitschaltuhr, neugestartet werden muss, habe ich mir überlegt ein kleines Skript dafür zu schreiben, welches den Router sauber neustartet, und dieses auch an die Community weiterzugeben.

 

Benötigt wird dafür jediglich ein Gerät mit Linux oder Windows (OS X sollte auch funktionieren), am besten wäre natürlich ein Minicomputer wie das Raspberry Pi o.Ä., welches das Skript, z.B mit Hilfe von Crontabs, zu bestimmten Zeitpunkten ausführt.

 

Zu finden ist das Skript mit Installationsanleitung hier: https://github.com/popoklopsi/Speedport-Hybrid-Rebooter

Bzw als direkt Download Link hier: https://github.com/popoklopsi/Speedport-Hybrid-Rebooter/archive/master.zip

 

Ich hoffe ihr könnt damit etwas Anfangen. Solltet ihr Fragen oder Probleme haben könnt ihr gerne Fragen.

 

Grüße David

1 AKZEPTIERTE LÖSUNG
Hi,

ich habe das Script aktualisiert, ihr könnt es hier finden: https://github.com/Triniayo/Speedport-Reboot

Bei Fragen oder Problemen könnt ihr euch gern an mich wenden. Fröhlich

Lösung in ursprünglichem Beitrag anzeigen  

Danke für das Script, aber wieso überhaupt rebooten?

 

Weil viele nach einiger Zeit im Betrieb Probleme mit dem SP-H haben und diesen dann neustarten müssen. Ich mache das im Schnitt täglich.

Gelöschter Nutzer

Moin @witche123!

Na da bekommsten Kudo von mir! Nicht, weil ich so oft neustarten müsste, sondern weil ich jetzt sehen konnte, wofür der 'derivedk' gut ist. (hab mir zwar sowas gedacht...)

 

Baue mir gerade sowas ähnliches in C++ Zwinkernd

Das Auslesen von den 'Hidden-Menu-Werten' funktioniert soweit, aber den 'derivedk' brauchte ich dafür ja noch nicht. Machs in C++, weil ich am Ende eine ausführbare Datei ohne Abhängigkeiten haben will. (und eine C++-Klasse Zwinkernd

Und mein Python ist eh nicht sooo gut....

 

Übrigens: Oft reicht es, die Netzwerk-Verbindungen zu Re-Initialisieren -> da gibt's einen gut versteckten Link für. (Bei den Datenschutz-Einstellungen / Stufe 2 / 'Was ist das?' -> im Erklärungs-Text ist ein Link 'Verbindung trennen und wiederherstellen'. Ein Klick darauf und DSL/LTE/Tunnel/IP/Systemzeit/Konfigurationssitzung... - also im Grunde alles Netzwerkbezogene wird erneuert - und geht schneller als ein kompletter Neustart Zwinkernd )

 

mfg, emkay

wofür 'derivedk' gut sein soll habe ich noch nicht verstanden 😛

 

man kann aber so ziemlich alles ohne 'derivedk' und ohne den 'csrf_token' machen

ich habe mit selber was zusammen gebastelt in PHP

https://github.com/Stricted/speedport-hybrid-php-api

 

reboot funktioniert auch super Fröhlich

das trennen und neuverbinden des dsl links will ich aber auchnoch mit einbauen

 

MfG

Stricted

Gelöschter Nutzer

Moin @Stricted!

Also er hat ihn benutzt, um die Anfrage an den Router per AES zu verschlüsseln. Ist allerdings auch möglich, daß das gar nicht mehr nötig ist. Könnte durchaus ein Relikt eines früheren Routers sein, auf dessen Firmware der Speedport-Hybrid aufbaut.

- frühere Speedports brauchten ja auch HTTPS.

 

Da eins meiner Ziele der Zugriff auf 'ausgeblendete' Einstellungen ist (vorallem LTE-Frequenz), baue ich den 'derivedk' vorsichtshalber mit ein.

 

Lustig ist: jetzt gibts schon in allen möglichen Sprachen Quellen - javascript, Python, PHP, C++ Zwinkernd

 

mfg, emkay

wofür der derivedk gut ist habe ich zwischenzeitlich beim studieren der javascript files selber rausgefunden

verwenden kann ich den leider nicht da php kein AES mit dem modus CCM beherrscht

bin am überlegen ob ich die sjcl https://github.com/bitwiseshiftleft/sjcl lib in php portiere

 

ist doch gut wen es in mehreren sprachen was dazu gibt Zwinkernd je mehr desto besser 😛

 

MfG

Stricted

Gelöschter Nutzer

Ich musste auch erstmal schauen, wie ich sowas mit möglichst wenigen 'exotischen' Bibliotheken mache. (Bin ein Fan von Standards / notfalls Quasi-Standards)

Hab mich dann für C++11 / libCurl / libOpenSSL entschieden. Für JSON-Parsing nehm ich momentan einfach C++11-regex.

Damit ist allerdings mein C++-Quellcode auch nicht viel länger, als die Scripts, die ich bis jetzt gelesen habe. (manches mag in C++ länger sein, dafür werden aber zB. Cookies bei mir automatisch verwaltet, was Code spart...)

Dank QT kann ich mir dann am Ende eine GUI für Linux/Windows/Android bauen Zwinkernd

 

mfg, emkay

ich möchte es ähnlich handhaben also möglichst wenig 'exotische' Bibliotheken
klappt alles soweit, das meiste hat php von haus aus an board nur das blöde aes kann es in dieser form nicht
auch mit openssl komme ich nicht weiter http://php.net/manual/de/ref.openssl.php
heißt nun entweder irgendeine dubiose php extension nehmen die eh kein schwein installiert hat
oder sjcl nach php portieren

und ne gui könnte ich mir auch bauen http://gtk.php.net/ Zwinkernd

MfG
Stricted
Gelöschter Nutzer

@Stricted; also wenn OpenSSL in PHP zur Verfügung steht --> da ist alles drin, was man braucht. Ich erzeuge damit das gehashte Passwort und den derivedk Zwinkernd

Und soweit ich das sehen konnte ist ein paasendes AES auch drinn...

 

Was PHP & GUI angeht: Ich weis Zwinkernd

Ich kenn' die meisten üblichen Sprachen, C++ ist nur meine 'Leib-Sprache' Zwinkernd

Und in diesem Fall fand ich's auch sinnvoll: Statisch gelinkte, unabhängig ausführbare Kommandozeilen-Version -> lässt sich im Grunde notfalls für nen Taschenrechner kompilieren Zwinkernd (Oder eben Windows/Linux/Android/irgendwelche anderen Router im Netzwerk)

Und dank QT ein GUI-Quellcode für alle Plattformen inkl. Android.

 

PHP find ich auch nicht schlecht, wenn's sich anbietet. (hab mal nen Faxserver aufgesetzt - der bestand zu einem großen Teil aus PHP und Komandozeilen-Tools / selbst die Hintergrunddienste waren da PHP --> musste schnell gehen Zwinkernd )

 

mfg, emkay

mh finde in php keine mölichkeit das zu decrypten, kann auch an der openssl implementation in php liegen
weder per openssl noch per mcrypt komm ich an die daten ran

ich finde das aes gecrypte eh etwas sinnlos
als beispiel das syslog
willst du es er data/SystemMessages.json auslesen musst du die rückgabe decrypten (warscheinlich auch den request)
du kannt dir den log aber auch als plaintext über data/Syslog.json mit dem parameter exporttype = 0 holen
irgendwie seltsam das ein teil der daten als plaintext abfragbar sind und ein anderer teil nur per aes decryption

MfG
Stricted

@Gelöschter Nutzer

da nun doch etwas zeit vergangen ist hole ich das thema nochmal rauf Fröhlich

 

mitlerweile habe ich das AES problem gelöst und doch noch einiges in meine php klasse eingebaut ( https://github.com/Stricted/speedport-hybrid-php-api )

 

da mir nun etwas langweilig war und ich mich so oder so mit c# beschäftigen wollte dachte ich mir "zum lernen ist das ein super projekt" ich werde nebenher ein c# programm bauen mit dem man den gesammten router konfigurieren und auslesen kann Zwinkernd

 

hier mal ein kleiner screenshot vom rumtesten (das syslog kann ich schonmal auslesen ^^) http://puu.sh/j6FAE/677631bdac.png

 

sobald ich was ordentliches vorweisen kann werde ich daraus ein opensource projekt auf github machen

 

Gelöschter Nutzer

Moin Leutz!

 

Wollt nur mal schnell Bescheid geben, daß es mir immerhin möglich war, das 'Haupt-Dateisystem' der .057er-Firmware zu entpacken.

1. das ist schon ziemlich 'Standard-Linux' Zwinkernd

2. liegen mir jetzt alle html/css/js/json-Dateien(Templates) vor... Sind dummerweise recht viele. Könnte also dauern, wenn man was bestimmtes sucht;) (suche immernoch die Frequenzeinstellung)

 

Ob es umgekehrt möglich ist, die Firmware wieder zu packen & zu installieren, hab ich nicht getestet - das wäre dann der heilige Gral.

 

Habe allerdings wegen der Frequenzeinstellung auch eine Anfrage laufen. Mal schauen, wie die Antwort ausfällt. Vielleicht müsst' ich dann nicht gleich die ganze Kiste 'hacken';)

 

mfg, emkay

 

PS: 'binwalk' zerlegt die Firmware in Images, 'unjffs2' kann das Dateisystem dann mounten. (zumindest unter Linux)

was suchst Du denn genau?

Gelöschter Nutzer

Moin @buenni!

 

Ich suche immernoch nach einer Möglichkeit, die LTE-Frequenz festzulegen.

 

In absteigender Preferenz suche ich also:

- 'verstecktes' Menü (html)

- API über json

- API über javascript

 

oder noch schlimmer, weil man dann wohl die Firmware patchen müsste:

- Konfigurations-Dateien

- Kommandozeilen-Befehle

- da Linux, könnten auch Huawei AT-Commands oder Treiber-Parameter funktionieren

- native API (C/C++) --> das wäre der Extrem-Fall

 

Im Grunde wäre ich mit jeder Möglichkeit, die LTE-Frequenz zu beeinflussen, zufrieden. Meinetwegen auch ein telnet/ssh Zugang. (im root liegen scheinbar auch ein paar key-dateien)

 

mfg, emkay

@Gelöschter Nutzer wäre es möglich das du mir das ganze mal zukommen lässt?

ich selber war bisher leider noh nicht erfolgreich beim entpacken der firmware

würde aber sicher einiges vereinfachen wenn man direkt schauen könnte wo man welsche daten abgreifen kann

 

MfG

Stricted

Gelöschter Nutzer

Moin @Stricted!

 

Hab ja auch einen 'Moment' gebraucht, um's auf zu kriegen;)

(wie cool wär das - wenn man's wieder 'zu' bekäme;))

 

Reicht dir der 'www-teil'? (html/css/js/json)

Den könnte ich geziped vielleicht posten. Da sind zumindest ein paar mir vorher unbekannte .json bei - die allerdings teilweise verschlüsselt&gehexed antworten.

Dauert aber nochn Moment, weil grad nich am Rechner.

 

mfg, emkay

moin @Gelöschter Nutzer

 

ja der 'www-teil' würde mir erstmal reichen

 

ja das mit dem entpacken will bei mir nicht so richtig, das firmware mod kit gibt mir nur .img datein (gzip compressed laut binwalk) die ich weder mounten noch entpacken kann

 

MfG

Stricted

Gelöschter Nutzer

Moin @Stricted!

 

Sorry, das Forum war eben down...

 

Wenn Du das Firmware-Mod-Kit hast, brauch ich Dir die Daten gar nicht geben;)

(und die Telekom kann mich nicht wegen Copyright-Verletzung verklagen;))

 

Das FMK funktioniert bei den Hybrid-Firmwares zwar nicht vollautomatisch - aber die Tools funktionieren teilweise!

 

Erstmal mit 'binwalk -e Firmware_Speedport_Hybrid_v050124.01.00.057.bin' die Firmware-Datei zerlegen.

 

Dann mit 'sudo unjffs2 20607.jffs2' mounten. (unmount funktioniert wie immer)

Das Ergebnis ist das Root-Dateisystem - inklusive des Linux-Systems.

 

Man kann jffs2-Images scheinbar nur durch mounten auf simulierten NAND-Speicher lesen. Aber aus dem Mount-Point kannst Du Dir dann alles wichtige herauskopieren.

 

Beide tools sind im FMK enthalten - ich hab allerdings das Ubuntu-binwalk genommen, weil das eh installiert war. -- Damit unjffs2 funktioniert müssen verschiedene module in deinem System installiert sein. Solltest Du Fehlermeldungen deshalb bekommen, schau einfach mal in das Script - da stehen oben die Benötigten. (das sind vor Allem eben die Treiber für emulierten NAND-Flash)

 

mfg, emkay

@Gelöschter Nutzer

wow nice, nachdem ich nun fast verzweifelt bin habe ich es nochmal auf einem server probiert und siehe da

"JFFS2 image mounted to /mnt/1"

ich danke dir vielmahls, nun kann ich endlich mal da reinschauen Fröhlich

ohje, nachdem ich da nun reingeschaut habe wurde mir schlecht 😄
nun wundert es mich nichtmehr warum ich an manchen stellen falsche werte erhalten habe (hardcoded)
und nun wundert es mich nichtmehr warum da hin und wieder mal invalides json produziert wird ^^

das entpacken - mounten ändern etc ist wie beim Receiverbau auch

 

jffs2 machen wir z.b. so https://github.com/Duckbox-Developers/max-tdt/tree/master/tdt/flash/spark

zusammen - bau selber vorher mit ein buildsystem

 

patche von huwai gibts hier (modell anklicken) http://support.huawei.com/enterprise/search/#outside=0&searchCount=1&sp.keyword=DSL/LTE%252520Hybrid...

Gelöschter Nutzer

Moin @Stricted!

 

Frag mich mal... ich war eh noch nie ein Fan von javascript;) (duck-typing irritiert mich)

 

Das mit dem invaliden Json hab ich auch beim Entwickler von l33tport gelesen - ich hatte das Problem zum Glück nicht. Ich wollte ja nicht so viele Abhängigkeiten - und da C++ kein 'natives' Json, aber 'natives' RegEx hat, habe ich das genommen und den regex nach den Daten 'gebaut', welche der SPH mir gab.

Ich habe also keinen 'standard-konformen' json-Parser genommen - was hier scheinbar von Vorteil war Zwinkernd

 

Ich iteriere einfach per regex über die Key-Value-Pare und pack die in einen vector<map<string,string>> und nutze dann nur noch den;)

 

mfg, emkay

@Gelöschter Nutzer

mich interessiert das javascript gedönde herzlich wenig, ich ignoriere das gekonnt, das macht im grunde auch nichts als die daten von den *.json files zu laden und sachen dorthin schicken

 

ja das mit l33tport habe ich mitbekommen, aber ein regex behebt die probleme

ich hab nur 2 abhängigkeiten in meiner "php api" das wären 1. die crypt lib und die php extension mcrypt

alles andere ist glücklicherweise direkt in php integriert

 

aber allgemein ist das javascript grässlich und von den json files will ich garnicht sprechen, an manchen stellen einfach sachen hardcoded, dupliated zeug über mehrere files wo wiederum statische daten zurück gegeben werden die einfach keinen bezug zum 'key' haben, beispiel: lan.json days_online auf 0 und time_online auf 23:11:15 hardcoded will ich an genau diese daten muss ich über die overview.json gehen da nur dort reale werte stehen, das soll erstmal einer rausfinden

 

also code review findet da scheinbar so ganz und garnicht statt

 

MfG

Stricted

Gelöschter Nutzer

@Stricted: son wenig muß ich den SPH da allerdings in Schutz nehmen...

Nich alles, was da hardcoded aussieht, ist es auch. -- da stehn ja zB. Passwörter drin;)

Das scheinen teilweise nur Platzhalter zu sein (deshalb schrieb ich weiter oben von Templates)

 

Wenn die allerdings später dann nicht überschrieben werden.... böser, schwer zu findender Fehler!

 

mfg, emkay