Http Website einloggen - Befehle ausführen (für Router)


Fridulin

Erfahrenes Mitglied
Http Website einloggen - Link ausführen (für Router)

Hallo,

ich habe volgendes Problem, wobei ich hoffe einer von euch könnte mir Helfen. Es geht darum, mein Router verliert öfters mal die Verbindung und da ich nicht jedesmal mich erstmal beim Router einloggen will um dort stundenlang rumzuklicken, daß er die Verbindung aktualisiert bzw. sich noch einmal neu einwählt.
Deshalb möchte ich gerne ein Programm welches dies auf Knopfdruck erledigt. Hat jemand eine Idee wie ich dies ambesten Lösen kann?
Mein Router hat nur ein Webinterface.

Grüße und Vielen Dank im vorraus
 
Zuletzt bearbeitet:

Alexander Schuc

crazy-weasel
Hi.

Mit der HttpWebRequest Klasse kannst du das realisieren.
Schau dir einfach paar Beispiele an. Ist relativ einfach.

Für das einloggen wirst du die Credentials Eigenschaft benutzen müssen.

Sieht dann in etwa so aus:
Code:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
req.Credentials = new System.Net.NetworkCredential("username", "passwort");
Danach musst nur noch die richtige Seite aufrufen, und die richtigen Parameter als QueryString oder via Post-Methode übergeben. Wird eher letztes sein.
Dazu kannst du mit der Methode GetRequestStream einen Stream holen, und dort schreibst du dann die Parameternamen / Parameterwert Paare rein.

MfG,
Alex
 

Fridulin

Erfahrenes Mitglied
Hi, vielen Dank für deine Antwort. Diese hat mir schon sehr geholfen. Ich habe es jetzt geschafft eine Website herunterzuladen und in eine Varible zu packen. Nun ist nur volgendes Problem, wie führe ich jetzt dort einen Link aus? Eigentlich ist es eine POST Routine die ich für den Roter ausführen muß, aber zum Testen ist die Link-Variante sicherlich ersteinmal einfacher.


Grüße und Vielen Dank
 

Alexander Schuc

crazy-weasel
Du musst einfach nur nochmal einen HttpWebRequest erstellen mit der neuen URL.
Für jeden Link den du folgen willst, sprich für jede Anfrage, einfach einen WebRequest erstellen und ausführen.
 

Fridulin

Erfahrenes Mitglied
Du hast Recht so einfach ist dies. Aber wie funktioniert das jetzt mit der Post Routine und ich habe eben noch einmal Probiert meine Routers Webseite auszulesen, dies klappte aber leider nicht. Er konnte sich nicht einloggen.
Code:
HttpHaupt.Credentials = new System.Net.NetworkCredential("benutzer", "pass");
Damit klappt es leider nicht. Ich kann es auch nicht bei Response einfügen, dann sagt er mir ein Fehler.
Code:
(HttpWebResponse)HttpHaupt.GetResponse();
Grüße und vielen Dank

 

Fridulin

Erfahrenes Mitglied
Ja habe schon meine Daten angegeben in dem Beispiel. Also ich habe jetzt folgendes verwendet.
Code:
HttpWebRequest HttpHaupt =(HttpWebRequest)WebRequest.Create(http://192.168.1.254);
HttpHaupt.Credentials = new System.Net.NetworkCredential("user", "pass");
HttpWebResponse myHttpWebResponse1 = (HttpWebResponse)HttpHaupt.GetResponse();
MessageBox.Show(HttpHaupt.Headers.ToString());
.... Und dann habe ich natürlich noch den StreamResponse mit Hilfe des StreamReaders in einen Array geschrieben und dann mit while es Eingelesen/Ausgeben.
Nur damit du dir ein Bild davon machen kannst.

Mit dem Post vielen Dank für die Seite, die sehr gut ist. Damit müßte ich das hinbekommen.

Grüße
 

Alexander Schuc

crazy-weasel
Mh, also wie hast denn nun das mit den Benutzerdaten angegeben? Frage nur weil du "user" und "pass" drinnen stehen hast noch.
Schon klar das du dein Routerpasswort nicht pasten willst, will nur sicher gehen.
Musst die Daten angeben, welche du in den Benutzername/Kennwort Dialog schrieben würedst. Meistens Benutzername leer, und nur ein Passwort.
 

Fridulin

Erfahrenes Mitglied
Ne ne, also das habe ich schon natürlich geändert. Wie du schon sagtest username Frei gelassen "" und bei pass natürlich das Passwort.

Grüße
 

Fridulin

Erfahrenes Mitglied
Das einloggen hat ja auf den Router noch nicht geklappt, deswegen konnte ich die POST noch nicht testen bzw. Programieren.
Bin gerade dabei mir eine eigene kleine POST Webseite zu basteln um es zu Testen ohne mich auf den Router einzuloggen,

Grüße
 

Fridulin

Erfahrenes Mitglied
Ich habe es jetzt geschafft etwas über der POST Routine zu senden!
Ich bräuchte jetzt nur noch Hilfe wegen der Auth. des Routers.

Grüße
 

Alexander Schuc

crazy-weasel
Hi.

Habe jetzt mal ausprobiert mich an meinem Router via C# einzuloggen. Habe mal den Code benutzt welchen ich dir vorgeschlagen habe. Funktionierte bei mir auch. An einer anderen Stelle hab ich damit aber kommt mir vor schon so gearbeitet. Egal.

Hab nun etwas das auch geht.

Code:
UriBuilder urib = new UriBuilder();
urib.Host = "192.168.1.1";
urib.Scheme = "http";

HttpWebRequest rq =(HttpWebRequest)WebRequest.Create(urib.Uri);
		
NetworkCredential cred = new NetworkCredential(@"HierbitteEtwasEingebenSonstGehtsNicht", "meinwundervollespasswort");
CredentialCache credCache = new CredentialCache();
credCache.Add(urib.Uri, "Basic", cred);
rq.Credentials = credCache;

HttpWebResponse response = (HttpWebResponse)rq.GetResponse();
 

Fridulin

Erfahrenes Mitglied
Habe das schon ausprobiert, war ja nur ein reinkopieren. Es funktioniert irgendwie leider auch nicht. Habe das Passwort und IP natürlich geändert, aber es Funktioniert trotzdem leider nicht....

Grüße

PS: POST Routine hat super geklappt, daß habe ich hinbekommen. (der eine Thread hatte sich mit den anderen überschnitten, deswegen habe ich es hier nocheinmal erwähnt.)

--- Edit --- Zur information, im Benutzernamenfeld darf aufjedenfall nichts stehen, wenn ich dort was eingebe (per Browser) kann ich mich auch damit nicht einloggen. Es muß aufjendenfall Leer sein. Ich habe das natürlich auch schon Probiert in den Klammern des Benutzernamens im Programm nichts zu schreiben, geht auch nicht.
 
Zuletzt bearbeitet:

Alexander Schuc

crazy-weasel
Mh.. ok. Ich habe bei mir probiert, und mein Router ignoriert die Benutzernamen angabe. Wenn ich im Programmcode keinen Angebe kommt eine Fehlermeldung.
 

Fridulin

Erfahrenes Mitglied
Haben wir evtuell andere Versionen von .Net? Ich kann bei mir den Benutzernamen im Programm leer lassen und er sagt bei mir keinen Fehler. (Kann mich wie schon erwähnt, trotzdem nicht einloggen.)
Code:
NetworkCredential cred = new NetworkCredential(@"", "meinpasswort");
 
Zuletzt bearbeitet:

Alexander Schuc

crazy-weasel
Also ich bekomme einen Laufzeitfehler. (401 - Not Authorized) -> Also kein .net Fehler, sondern nur fehlgeschlagenes einloggen.

Getestet unter .net 1.1.
 

Fridulin

Erfahrenes Mitglied
Mhh achso, dann haben wir uns Mißverstanden. Ich bekomme jedenfall egal was ich beim Benutzernamen eingebe (auch Leer) auch den Fehler:
(401) Unauthorized.

Ich glaube ich habe auch Net 1.1, bin mir aber nicht 100% sicher. Und wie ich das genau nachschauen kann, weiß ich ehrlich gesagt garnicht.
 

Alexander Schuc

crazy-weasel
MessageBox.Show(Environment.Version.ToString());

Damit hast die Versionsnummer. Sollte aber keinen Unterschied machen denke ich.

Komisch.
 

Fridulin

Erfahrenes Mitglied
Ja ich habe die Version 1.1 (1.1.4322.573)

Mißt, jetzt hab ich das alles schon hinbekommen nur bei der Authorisation scheitert es...

Aber trotzdem vielen Dank für deine Hilfe und Mühe, Grüße