RouterControl für D-Link DSL-G664T

Fragen, Tipps & Tricks zu Freeware-Programmen 0190 Warner, Alle meine Passworte, SuperSpamKiller Standard usw.

Moderatoren: Ralf, mirko

Benutzeravatar
mirko
Beiträge: 23070
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Beitrag von mirko »

Auf keinen Fall würde ich etwas eigenes in den Router einspielen. Für meinen Linksys-Router gibt es auch alternative Linux-Betriebssysteme aber ich würde es nicht einspielen, wer weiß was dann passiert.
shuvuu
Beiträge: 15
Registriert: 05.01.2005, 13:47

Beitrag von shuvuu »

Hallo,

mit \"cat webcm\" kann mann sich den Inhalt anschauen, Es scheint aber nicht einfach ein Script zu sein. Und leider bekommt man nicht alles zu sehen. Ich weiss nicht, wie man Dateien per telnet aus dem Router rauskopieren

Aber erstmal vielen Dank für die Tipps.
CCS
Beiträge: 43
Registriert: 01.01.2005, 14:28

Beitrag von CCS »

es sei, denn man erfährt von D-Link, wie das CGI webcm funktioniert
Hm, das müßte man doch \"irgendwie\" auslesen können. Man kann sich mit ...
telnet <Router>
.. mit dem Router verbinden (Login-Name ist dann NICHT \"admin\", sondern \"root\"). Dann hat man Linux vor sich. Mit ...
cd /usr/www/cgi-bin
... wechselt man in das cgi-bin Verzeichnis. Mit \"ls -l\" sieht man die Datei \"webcm\" (ca. 34 KB). Diese müßte man dann \"nur\" noch mit einem Editor öffnen oder herunterladen ...
Leider wird man nach einem Timeout wieder ausgeloggt, so dass es nicht genügt, sich einmal mit dem autostart von Windows anzumelden.
Jein. Man kann im Router den Timeout einstellen (\"Werkzeuge\" - \"Benutzermanagement\"). Der Wert steht normalerweise auf 30 Min. Ich habe ihn mal hochgesetzt auf 1440 Min (=24 Stunden).
Wie sieht es eigentlich aus, wenn man das Login auf den Rechner verlegt und die Abfrage der Statusseiten ebenfalls über HTML Seiten auf dem Rechner macht ? So dass man die IP Adresse des Rechners vorgibt.
Das geht wohl so nicht: Zuerst braucht man auf dem eigenen Rechner einen Webserver (z.B. Apache oder Windows IIS). Und dann ergibt sich noch das Problem, daß ich die selbst erstellte HTML Datei zwar aufrufen kann, diese müßte dann aber per automatischem \"reload\" über das CGI Programm \"webcm\" geleitet werden, damit es mit Daten gefüllt wird. Das ist nicht das Problem, sondern RouterControl würde nur die erste HTML Datei auf Daten untersuchen - und das ist die selbst HTML erstellte Datei - also noch ohne Daten.

Ich habe es jetzt so gelöst:
Timeout im Router auf 24 Stunden eingestellt.
Mit den folgenden drei Dateien logge ich mich ein, unterbreche ich bei Bedarf die Verbindung zum Internet oder Connecte neu:
<html><head></head>
<body>
<form>
<input>
<input>
<input>
</form></body></html>
<html><head></head>
<body>
<form>
<input>
<input>
<input>
</form></body></html>
<html><head></head>
<body>
<form>
<input>
<input>
<input>
</form></body></html>
Ansonsten funktioniert die Status-Anzeige in RouterControl einwandfrei (z.B. IP-Adresse, Übertragene/Empfangene Bytes) - solange ich eingeloggt bin ...

Ein anderer Ansatzpunkt wäre dann noch:
Man kann auf dem Router im Verzeichnis /var/cache eigene Verzeichnisse anlegen und Dateien speichern. Dort könnte man sich ein Verzeichnis \"MyHTML\" anlegen. In dieses Verzeichnis kann man dann eine selbst erstellte HTML-Datei speichern. Z.B. meine oben vorgeschlagene Login-Datei \"MeinLogin.html\". Und dann müßte man dieses Verzeichnis in das /usr/www/ Verzeichnis einbinden (\"mounten\", \"linken\"). Dann wäre es möglich, die Login-Seite etwa so aufzurufen:
http://<Router>/MyHTML/MeinLogin.html
Und das würde dann auch RouterControl verarbeiten können.

Aber wie das genau geht - unter Linux - keine Ahnung.
Zuletzt geändert von CCS am 07.01.2005, 21:58, insgesamt 2-mal geändert.
shuvuu
Beiträge: 15
Registriert: 05.01.2005, 13:47

Beitrag von shuvuu »

Tschuldigung, ich meinte die modifizierte routercontrol.exe.

Danke
shuvuu
Beiträge: 15
Registriert: 05.01.2005, 13:47

Beitrag von shuvuu »

Hallo CSS und Hallo Mirko,

ich habe auch obigen Router von D-Link angeschafft und bin zwecks Volumenüberwachung beim TrafficMonitor und RouterController gelandet. Wie CSS habe ich mit dem Login gekämpft und diesen Thread von ihm gefunden und den im D-Link Forum. Leider habe ich auch keine Lösung. Ich denke, dass man die login_gm.html benutzen sollte, es sei, denn man erfährt von D-Link, wie das CGI webcm funktioniert. An das login_gm.html muss ausser Name und Password noch ein ENTER übergeben werden, aber wie ?
Leider wird man nach einem Timeout wieder ausgeloggt, so dass es nicht genügt, sich einmal mit dem autostart von Windows anzumelden.
Wie sieht es eigentlich aus, wenn man das Login auf den Rechner verlegt und die Abfrage der Statusseiten ebenfalls über HTML Seiten auf dem Rechner macht ? So dass man die IP Adresse des Rechners vorgibt.

Ich hätte gern das rcedit, wie es CSS bekommen hat, um mir auch die Abfragen zusammenbasteln zu können.

Danke
CCS
Beiträge: 43
Registriert: 01.01.2005, 14:28

Beitrag von CCS »

Prinzipiell nutzt dir das aber nichts, da du JavaScript mit RouterControl nicht verwenden kannst. RouterControl kann zwar HTTP-Aufrufe (GET und POST) aber kein JavaScript. JavaScript können nur die Browser.
Na, da siehste mal, daß mir da doch ein wenig das Verständnis fehlt und deine Aussage ....
So wie du es aufgeschrieben hast, sieht es logisch und richtig aus, du hast Ahnung von der Sache.
... etwas voreilig war.
Ich dachte halt, wenn in meiner modifizierten HTML-Datei so ein Aufruf wie
<a>Log in</a>
steht (und diese Zeile an die Browser-Adresszeile übergeben wird), dann würde das genauso in \"RouterCorntol\" funktionieren.
document.Meinformular.login:command/username.value=\"admin\"; geht nicht, da \"login:command/username\" kein gültiger Variablenname ist.
Hm, kann es sein, daß das der eigentliche Knackpunkt ist ? Ist vielleicht auch in der Zeile ...

http://<Router>/cgi-bin/webcm?getpage=../html/home_gm.htm&login:command/username=admin&login:command/password=passwort

... eine Übergabe der Variablen login:command/username nicht möglich (wegen des \":\" und \"/\") ?

In diesem String zur Statusabfrage kommen ja solche Variablen nicht vor:

http://<Router>/cgi-bin/webcm? getpage=../html/status_gm/connstatus.htm&var:language=gm

Hm, ich glaube an dieser Stelle komme ich jetzt nicht weiter.

Anderer Ansatzpunkt:
Der Router DI-624 basiert auf Linux. Er soll 1 MB Cache enthalten. Das Verzeichnis \"root/var\" soll beschreibbar sein. Wenn ich dort meine modifizierte HTM-Datei ablege und sie aufrufen könnte, dann könnte ich vielleicht ein automatisches Login erreichen. Allerdings habe ich von Linux überhaupt keine Ahnung.

Oder ein anderer Ansatzpunkt:
Wenn ich die modifizierte HTML-Datei auf meinem Rechner speichere und ich veranlassen könnte, daß \"RouterControl\" diese Datei zum Login verwendet ....
Benutzeravatar
mirko
Beiträge: 23070
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Beitrag von mirko »

Hm, hier verstehe ich dich nicht ... Was hat das mit GET und POST zu tun ?

Das folgende Login funktioniert im Web-Browser nicht:
http://<Router>/cgi-bin/webcm?getpage=../html/home_gm.htm&login:command/username=admin&login:command/password=passwort

Aber das funktioniert im Web-Browser (Aufruf der Status-Seite):
http://<Router>/cgi-bin/webcm? getpage=../html/status_gm/connstatus.htm&var:language=gm

Wo ist da der große Unterschied ?
Du bist schon angemeldet das ist der Unterschied. Wahrscheinlich merkt sich der Router deine IP-Adresse und lässt dich zugreifen, bist du halt Logout/Abmelden anklickst.

OK dein JavaScript enthält Fehler, so kann man das in JavaScript nicht machen
Wenn du weißt, das Fehler enthalten sind und \"man das so nicht machen kann\" -
a) wo sind die Fehler ?
b) wie macht man es dann ?
[/quote]

Na z.B. document.Meinformular.login:command/username.value=\"admin\"; geht nicht, da \"login:command/username\" kein gültiger Variablenname ist. Die Variablen kann man nur füllen, in dem man getElementById() oder elements[n] verwendet. Prinzipiell nutzt dir das aber nichts, da du JavaScript mit RouterControl nicht verwenden kannst. RouterControl kann zwar HTTP-Aufrufe (GET und POST) aber kein JavaScript. JavaScript können nur die Browser.
CCS
Beiträge: 43
Registriert: 01.01.2005, 14:28

Beitrag von CCS »

Original von CCS:
http://<Router>/cgi-bin/webcm?getpage=../html/home_gm.htm&login:command/username=admin&login:command/password=passwort

... funktioniert der Login aber auch nicht.
Original von Mirko:
Ja weil es ein POST und kein GET wohl sein muss. Nur ein GET kann man machen, wenn man die Url in der Adressleiste des Browser eingibt. Ein POST kann nur der Browser selbst oder eine Anwendung machen.
Hm, hier verstehe ich dich nicht ... Was hat das mit GET und POST zu tun ?

Das folgende Login funktioniert im Web-Browser nicht:
http://<Router>/cgi-bin/webcm?getpage=../html/home_gm.htm&login:command/username=admin&login:command/password=passwort

Aber das funktioniert im Web-Browser (Aufruf der Status-Seite):
http://<Router>/cgi-bin/webcm? getpage=../html/status_gm/connstatus.htm&var:language=gm

Wo ist da der große Unterschied ?
OK dein JavaScript enthält Fehler, so kann man das in JavaScript nicht machen
Wenn du weißt, das Fehler enthalten sind und \"man das so nicht machen kann\" -
a) wo sind die Fehler ?
b) wie macht man es dann ?
Benutzeravatar
mirko
Beiträge: 23070
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Beitrag von mirko »

Ich habe jetzt noch folgendes gemacht: Ich habe mir die Login-Seite des Routers auf meinen PC kopiert. Dann habe ich die \"Variablen\" IP-Adresse, Username und Paßwort fest in diese HTML-Seite eingebaut. Anschließend habe ich die HTML-Seite Stück für Stück reduziert auf das allernotwendigste - bis halt das Login noch soeben funktionierte. Dabei ist folgende HTML-Seite herausgekommen:

<html>
<head>
</head>
<body>
<form>
<input>
<input>
<input>
</form>
<a>Login</a>
</body>
</html>

Die Variablen-Namen und -Werte darf ich nicht ändern. Wohl aber die Reihenfolge. Wenn ich mir daraus nun das folgende herleite ...

http://192.168.1.1/cgi-bin/webcm?getpag ... d=passwort

... funktioniert der Login aber auch nicht.
Ja weil es ein POST und kein GET wohl sein muss. Nur ein GET kann man machen, wenn man die Url in der Adressleiste des Browser eingibt. Ein POST kann nur der Browser selbst oder eine Anwendung machen.
Jetzt suche ich noch einen JavaScript-Experten, der mir die drei Variablen und die \"Post\"-Methode in einen einzigen JavaScript-Befehl bastelt - soll angeblich gehen. In etwa so:

JavaScript:
document.Meinformular.action.value=\"http://192.168.1.1/cgi-bin/webcm\";
document.Meinformular.methode.value=\"Post\";
document.Meinformular.login:command/username.value=\"admin\";
document.Meinformular.login:command/password.value=\"passwort\";
document.Meinformular.submit()

Nur halt alles in einer Zeile ...
Verstehe ich nicht. Das was du oben gemacht hast, also in das HTML-Formular selbst die Werte für Benutzername/Passwort zu schreiben ist genau die Umsetzung dieses JavaScript-Codes. OK dein JavaScript enthält Fehler, so kann man das in JavaScript nicht machen :) , aber ich weiß was du willst. :biggrin:
CCS
Beiträge: 43
Registriert: 01.01.2005, 14:28

Beitrag von CCS »

Also eine Angabe wie

<POST>input type=submit name=\"disconnect\" value=\"Disconnect\"

funktioniert niemals.
OK - kann ich also vergessen.

Ich habe jetzt noch folgendes gemacht: Ich habe mir die Login-Seite des Routers auf meinen PC kopiert. Dann habe ich die \"Variablen\" IP-Adresse, Username und Paßwort fest in diese HTML-Seite eingebaut. Anschließend habe ich die HTML-Seite Stück für Stück reduziert auf das allernotwendigste - bis halt das Login noch soeben funktionierte. Dabei ist folgende HTML-Seite herausgekommen:
<html>
<head>
</head>
<body>
<form>
<input>
<input>
<input>
</form>
<a>Login</a>
</body>
</html>
Die Variablen-Namen und -Werte darf ich nicht ändern. Wohl aber die Reihenfolge. Wenn ich mir daraus nun das folgende herleite ...
... funktioniert der Login aber auch nicht.

Jetzt suche ich noch einen JavaScript-Experten, der mir die drei Variablen und die \"Post\"-Methode in einen einzigen JavaScript-Befehl bastelt - soll angeblich gehen. In etwa so:
JavaScript:
document.Meinformular.action.value=\"http://192.168.1.1/cgi-bin/webcm\";
document.Meinformular.methode.value=\"Post\";
document.Meinformular.login:command/username.value=\"admin\";
document.Meinformular.login:command/password.value=\"passwort\";
document.Meinformular.submit()
Nur halt alles in einer Zeile ...
Benutzeravatar
mirko
Beiträge: 23070
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Beitrag von mirko »

Also eine Angabe wie

<POST>input type=submit name=\"disconnect\" value=\"Disconnect\"


funktioniert niemals. Logischerweise schaue ich mir nicht alle erfassten Daten an, die mir geschickt werden. Ausprobieren ob es wirklich funktioniert kann ich natürlich auch nicht. Meistens korrigiert ein anderer, der auch den Router besitzt, solchen falschen Angaben, ich ersetze das dann einfach.
CCS
Beiträge: 43
Registriert: 01.01.2005, 14:28

Beitrag von CCS »

Hallo Mirko,
ich habe mir mal kurzerhand die Strings zum \"disconnecten\" von allen gelisteten Routern in deinem Programm angesehen. Die meisten Strings arbeiten so, daß eine Seite im Webinterface des Routers aufgerufen wird und dann dort Parameter übergeben werden und zwar in der Form: der 1. Parameter wird mit \"?\" angehängt und die weiteren mit \"&\".

Allerdings: Bei 3 Routern sieht das ganz anders aus:
D-Link DI624 (FW1.25)
<POST>input type=submit name=\"disconnect\" value=\"Disconnect\"

Mentor Broadband Router Rev A1-01 V2.00.0028
<td><input></td>

Mentor MR4
<td><input></td>
Hier wird überhaupt keine Seite aufgerufen (und die Parameter sind auch nicht durch \"?\" und \"&\" abgetrennt).
Ich kann mir nicht vorstellen, daß hier so etwas konstruiert wird:
http://<Router>/input type=submit name=\"disconnect\" value=\"Disconnect\"
Oder:
http://<Router><td><input></td>
Wie funktioniert das bei denen ? Vielleicht kann ich ja eine ähnliche Methode bei meinem Problem anwenden.

Ich meine, ich kann mir zwar aus der HTML-Seite mit diesem Material:
<form>
<input>
<input>
<input>
<input>
<input>
<input>
</form>

onClick=\"DoLogin()\"

function DoLogin()
{
document.formLogin.elements[2].value=document.usrInput.username.value;
document.formLogin.elements[3].value=document.usrInput.password.value;
document.formLogin.submit();
}
Das folgende zusammenbasteln:
input type=\"hidden\" name=\"getpage\" value=\"../html/home_gm.htm\"
input type=\"hidden\" name=\"errorpage\" value=\"../html/index.html\"
input type=\"hidden\" name=\"login:command/username\" value=\"admin\"
input type=\"hidden\" name=\"login:command/password\" value=\"Mein Passwort\"
input type=\"hidden\" name=\"var:errormsg\" value=\"Error\"
input type=\"hidden\" name=\"var:language\" value=\"gm\"
onClick=\"DoLogin();\"

(oder: onClick=\"submit();\"
Nur: Wohin sende ich das ? An welche Seite übergebe ich das ? Ich könnte das an
a) cgi-bin/webcm übergeben
b) html/login_gm.htm übergeben
c) html/home_gm.htm übergeben
... aber ohne \"?\" und \"&\" ?

Oder anders herun gefragt: Im obigen Beispiel - wohin wird ...
<td><input></td>
... übergeben ?
CCS
Beiträge: 43
Registriert: 01.01.2005, 14:28

Beitrag von CCS »

Das entspricht genau den Daten, die du im Editor eingeben musst. Also

http://<IP>/cgi-bin/webcm?getpage=../html/login_gm.html&errorpage=../html/index.html&login:command/username=%USERNAME%&login:command/password=%PASSWORD%&var:errormsg=Error&var:language=gm

%USERNAME% und %PASSWORD% durch die Daten für den Aufruf des Webinterfaces ersetzen.
Ja, genau DAS habe ich schon probiert (inklusive IP-Eingabe und Username und Password) - funktioniert aber aus unerfindlichen Gründen nicht. Wobei ich auch die andere Variante mit getpage=../html/home_gm.htm probiert habe, die mir richtiger erscheint. Weil: login_gm.html ist die deutsche (gm) Seite, in die man die Login-Daten eingibt. Und diese Seite versendet die Daten an home_gm.htm

http://<IP>/cgi-bin/webcm?getpage=../html/home_gm.htm&errorpage=../html/index.html&login:command/username=%USERNAME%&login:command/password=%PASSWORD%&var:errormsg=Error&var:language=gm

Und, wie schon oben erwähnt, wenn ich erst einmal eingeloggt bin, dann funktioniert eine ähnliche Eingabe im Browser zur Abfrage des Status einwandfrei:

http://<IP>/cgi-bin/webcm?getpage=../html/status_gm/connstatus.htm&var:language=gm

Also nehme ich mal an, daß es rein semantisch alles richtig ist. Mich irritiert noch die Übergabe der Variablen errorpage= und var:errormsg=. Scheint so, daß da noch irgendwo eine weitere Prüfung der Daten erfolgt - erst dann wird die Varible var:errormsg= auf \"True\" gesetzt und dann geht\'s weiter ...

Von den zwei Foren und der Newsgroup habe ich noch keine Antwort. Aber der Status meiner Support-Anfrage an D-Link hat sich immerhin schon auf \"Weitergeleitet\" geändert (hoffentlich nicht: weitergeleitet in Papierkorb ...)
Benutzeravatar
mirko
Beiträge: 23070
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Beitrag von mirko »

Versand von Formularen per POST kann man nicht durch Eingabe im Browser machen. Versand per GET geht natürlich immer. Das entspricht genau den Daten, die du im Editor eingeben musst. Also

http://IP-des.Routers/cgi-bin/webcm?get ... r&var:lang uage=gm


%USERNAME% und %PASSWORD% durch die Daten für den Aufruf des Webinterfaces ersetzen.
CCS
Beiträge: 43
Registriert: 01.01.2005, 14:28

Beitrag von CCS »

Benutzername und Passwort für das Webinterface hast du aber in der RouterControl-Konfiguration korrekt eingegeben,
Ja.
genauso nach Änderung der Routers.dat RouterControl beendet und neu gestartet? Nicht das es an sowas simplen hängt.
Ja.
So wie du es aufgeschrieben hast, sieht es logisch und richtig aus, du hast Ahnung von der Sache. :) Leider fällt mir nichts mehr ein. :boese: Das sieht alles total einfach aus und sollte genauso funktionieren.
Ich habe jetzt noch mal eine entsprechende Anfrage in die zwei D-Link-Foren geschrieben ( http://forum.dlink.de/forum.asp?FORUM_ID=38 und http://www.dl-router.de/forum/forum23.html ) und in die News-Group news:de.comm.technik.dsl und an den Support von D-Link. Mal sehen, ob da jemand eine Antwort weiß.

In einer D-Link-FAQ laß ich noch einen Hinweis, daß man JavaScript-Befehle auch in der Form ...
javascript:document.forms[0].submit(); oder (Ausführlich)
javascript:if(checkout(form1)){document.forms[0].submit();}
... im Webbrowser eingeben können soll. Nur weiß ich nicht, wie man da jetzt die Variablen reinpackt.
Antworten