Hallo zusammen,
ich versuche seit einigen Tagen mich mittels HttpWebRequest/HttpWebResponse an meinem Speedport-Router (Modell: w504v Typ A) einzuloggen. Dazu habe ich bisher folgende Funktion erstellt, die selbstverständlich noch ausbaufähig ist, und mir nur zur Überprüfung
des Anmeldevorgangs dienen soll.
Leider liefert diese Funktion jedoch nicht den gewünschten Erfolg. Anstelle der Index-Seite erhalte ich
den Inhalt von wait_login.stm mit der Meldung:
bereits eine Sitzung geöffnet ist.
Demnach müsste also der Login bereits erfolgt sein und bei dem Request wird ein erneuter Loginversuch übermittelt.
Wenn man die Funktion kurz hintereinander ausführt, wird beim zweiten Aufruf kein Wert für das Cookie zurückgeben.
Erst nach einer Pause von ca. 10 Minuten wird wieder ein Cookie-Value empfangen.
Die Header-Informationen habe ich über die Firefox AddOn HTTP Live Header ermittelt.
Ein erfolgreicher Login mittels curl ist mir bisher auch noch nicht gelungen:
Vielleicht hat hier ja jemand einen Idee.
ich versuche seit einigen Tagen mich mittels HttpWebRequest/HttpWebResponse an meinem Speedport-Router (Modell: w504v Typ A) einzuloggen. Dazu habe ich bisher folgende Funktion erstellt, die selbstverständlich noch ausbaufähig ist, und mir nur zur Überprüfung
des Anmeldevorgangs dienen soll.
VB.NET-Quellcode
- Public Function DoRequest(ByVal url As String, ByVal password As String, ByVal container As CookieContainer) As String
- 'Login Request
- Dim reqLogin As HttpWebRequest = DirectCast(HttpWebRequest.Create("https://speedport.ip/cgi-bin/login.cgi"), HttpWebRequest)
- reqLogin.CookieContainer = container
- reqLogin.Method = "POST"
- reqLogin.Referer = "https://speedport.ip/hcti_start_passwort.stm"
- reqLogin.KeepAlive = True
- reqLogin.Host = "speedport.ip"
- reqLogin.ContentType = "application/x-www-form-urlencoded"
- reqLogin.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
- reqLogin.Headers.Add("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3")
- reqLogin.Headers.Add("Accept-Encoding", "gzip, deflate")
- 'Login Data
- Dim encoding As New ASCIIEncoding()
- Dim data As String = Uri.EscapeDataString("pws") & "=" & Uri.EscapeDataString(password)
- Dim bytes As Byte() = encoding.GetBytes(data)
- reqLogin.ContentLength = bytes.Length
- Dim stream As Stream = reqLogin.GetRequestStream
- stream.Write(bytes, 0, bytes.Length)
- stream.Close()
- 'Login Response
- Dim resLogin As HttpWebResponse = DirectCast(reqLogin.GetResponse(), HttpWebResponse)
- 'Receive Cookie
- Dim CookieHeaderValue As String = reqLogin.Headers.Get("Cookie")
- If CookieHeaderValue <> Nothing Then
- Dim aCookie As String() = CookieHeaderValue.Split("=")
- Dim Cookie As New Cookie
- Cookie.Domain = "speedport.ip"
- Cookie.Path = "/"
- Cookie.Secure = True
- Cookie.Name = aCookie(0)
- Cookie.Value = aCookie(1)
- container.Add(Cookie)
- End If
- 'Url Request
- Dim reqIndex As HttpWebRequest = DirectCast(HttpWebRequest.Create(url), HttpWebRequest)
- reqIndex.CookieContainer = container
- reqIndex.Method = "GET"
- reqIndex.Referer = "https://speedport.ip/wait_login.stm"
- reqIndex.KeepAlive = True
- reqIndex.Host = "speedport.ip"
- reqIndex.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
- 'Url Content
- Dim resIndex As HttpWebResponse = DirectCast(reqIndex.GetResponse(), HttpWebResponse)
- Dim sr As StreamReader = New StreamReader(resIndex.GetResponseStream())
- Dim output As String = sr.ReadToEnd
- resIndex.Close()
- Return output
- End Function
Leider liefert diese Funktion jedoch nicht den gewünschten Erfolg. Anstelle der Index-Seite erhalte ich
den Inhalt von wait_login.stm mit der Meldung:
Diese Meldung erschient immer dann, wenn versucht wird auf die Administrationsoberfläche zuzugreifen, obwohl"Doppelter Administrationszugriff!"
bereits eine Sitzung geöffnet ist.
Demnach müsste also der Login bereits erfolgt sein und bei dem Request wird ein erneuter Loginversuch übermittelt.
Wenn man die Funktion kurz hintereinander ausführt, wird beim zweiten Aufruf kein Wert für das Cookie zurückgeben.
Erst nach einer Pause von ca. 10 Minuten wird wieder ein Cookie-Value empfangen.
Die Header-Informationen habe ich über die Firefox AddOn HTTP Live Header ermittelt.
Ein erfolgreicher Login mittels curl ist mir bisher auch noch nicht gelungen:
Vielleicht hat hier ja jemand einen Idee.