VB2010 Login Abfrage von Webseiten

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Saphira104.

    VB2010 Login Abfrage von Webseiten

    Ich habe eine sehr einfache Frage die aber zurzeit für mich zum einsteigen noch Etwas schwierig ist .

    Folgendes :

    Ich habe ein Forum das ja 2 loginfelder Besizt sprich : id="ips_password" und id="ips_username" ... nun kann man ja mit VB per Webbrowser befehl und Textboxen eine Abfrage machen das der Inhalt
    der jeweiligen Textboxen auf die Webseite zum Login gehen in die jeweiligen Felder (versteckt im Script) sobald das Passwort richtig war kommt "You are now signed in" andernfals Error

    Wie kann ich das möglich machen?


    Gefunden habe ich : (aus dem forum hier)

    Quellcode

    1. ublic Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. WebBrowser1.Document.GetElementById("loginName").InnerText = TextBox1.Text
    4. WebBrowser1.Document.GetElementById("password").InnerText = TextBox2.Text
    5. WebBrowser1.Document.Forms(0).InvokeMember("submit")
    6. End Sub
    7. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    8. WebBrowser1.Navigate("http://www.wer-kennt-wen.de/")
    9. End Sub
    10. End Class


    Somit müsste ich das nur ändern zu :

    Quellcode

    1. ublic Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. WebBrowser1.Document.GetElementById("ibf_username").InnerText = TextBox1.Text
    4. WebBrowser1.Document.GetElementById("ibf_password").InnerText = TextBox2.Text
    5. WebBrowser1.Document.Forms(0).InvokeMember("submit")
    6. End Sub
    7. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    8. WebBrowser1.Navigate("http://www.webseite.de/")
    9. End Sub
    10. End Class


    Aber da fehlt noch irgendwie die Abfrage ob Login richtig oder falsch war?

    Du könntest auf der Webseite prüfen ob irgendwas (das man nur nach dem Login sieht) sichtbar ist. Nach dem Klick auf Login kannst du auf das Event Webbrowser.DocumentComplete warten.

    Was mir bei deinem Code aufgefallen ist... oben schreibst du das die Felder ibs_username heißen und unten im Code steht ibf_username...
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!
    So...

    [

    VB.NET-Quellcode

    1. Dim User = TextBox1.Text, Pwd = TextBox2.Text
    2. Dim Request As HttpWebRequest = CType(WebRequest.Create("http://www.forumlink.de/forum/index.php"), HttpWebRequest)
    3. Request.Method = "POST"
    4. Request.ContentType = "application/x-www-form-urlencoded"
    5. Dim Post As String = "ips_username=" & User & "&ips_password=" & Pwd
    6. Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
    7. Request.ContentLength = byteArray.Length
    8. Dim DataStream As Stream = Request.GetRequestStream()
    9. DataStream.Write(byteArray, 0, byteArray.Length)
    10. DataStream.Close()
    11. Dim Response As HttpWebResponse = Request.GetResponse()
    12. DataStream = Response.GetResponseStream()
    13. Dim reader As New StreamReader(DataStream)
    14. Dim ServerResponse As String = reader.ReadToEnd()
    15. reader.Close()
    16. DataStream.Close()
    17. Response.Close()
    18. If InStr(ServerResponse, "You are now signed in") Then
    19. Form2.show()
    20. Else
    21. MessageBox.Show("Password false!")
    22. End If


    Habe mit HttpHeader ausgelesen aber der "link" zum login sieht anders aus als sonst sprich :

    rememberMe=1&ips_username=USER&ips_password=PASSWORT&auth_key=880ea6a14ea49e853634fbdc5015a024&submit=Sign+In: undefined

    Irgendwas klappt noch nicht ?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Saphira104“ ()

    wirst du dann auf eine andere Seite weitergeleitet oder kommt nur diese "You are now signed in" ?
    Wo kommt dieser Response-Text (HTML oder Request)?

    Ist der dann einfach im HTML mit drin? Dann musst du die DIV/das Element in dem der Text ausgegeben wird per Webbrowser holen und schauen, ob der gewünschte Text drin steht.

    LG, Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    ich kann dir bis dato nicht ganz folgen.
    Bitte logge dich im Forum ein und schau nach, wo der Text eingebettet ist (Entwicklertools).
    Vermutlich in irgendeiner DIV oder einem Paragraphen, der entweder eine spezielle ID oder eine spezielle Klasse hat.
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    So :

    VB.NET-Quellcode

    1. GetSetting("Loader", "txtuser", "txtuser")
    2. Dim User = txtUser.Text, Pwd = txtPass.Text
    3. Dim Request As HttpWebRequest = CType(WebRequest.Create("http://www.webseite/forum/index.php?app=core&module=global&section=login&do=process"), HttpWebRequest)
    4. Request.Method = "POST"
    5. Request.ContentType = "application/x-www-form-urlencoded"
    6. Dim Post As String = "ips_username=" & User & "&ips_password=" & Pwd
    7. Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
    8. Request.ContentLength = byteArray.Length
    9. Dim DataStream As Stream = Request.GetRequestStream()
    10. DataStream.Write(byteArray, 0, byteArray.Length)
    11. DataStream.Close()
    12. Dim Response As HttpWebResponse = Request.GetResponse()
    13. DataStream = Response.GetResponseStream()
    14. Dim reader As New StreamReader(DataStream)
    15. Dim ServerResponse As String = reader.ReadToEnd()
    16. reader.Close()
    17. DataStream.Close()
    18. Response.Close()
    19. If InStr(ServerResponse, "ModeratorCP") Then
    20. SaveSetting("Loader", "txtUser", "txtUser", txtUser.Text)
    21. SaveSetting("Loader", "txtPass", "txtPass", txtPass.Text)
    22. Form2.Show()
    23. Me.Hide()
    24. Else
    25. MsgBox("Login fail... Try again", MsgBoxStyle.Critical, "Fehler")
    26. End If


    Die Daten von HTTPheaders bringen nur :

    Quellcode

    1. http://www.webseite.de/forum/index.php?app=core&module=global&section=login&do=process
    2. POST /forum/index.php?app=core&module=global&section=login&do=process HTTP/1.1
    3. Host: www.webseite.de
    4. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0
    5. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    6. Accept-Language: de,en-US;q=0.7,en;q=0.3
    7. Accept-Encoding: gzip, deflate
    8. Content-Type: application/x-www-form-urlencoded
    9. Content-Length: 112
    10. Referer: http://www.webseite.de/forum/
    11. Cookie: __cfduid=d3e6bffcb7261ebd43086baef6802c881504800191; rteStatus=rte; pass_hash=d8834e51732fd5c15c98ef8bca4b9d8; member_id=5; member_id=0; pass_hash=0; ipsconnect_ef8a21df7af8ebec9ae8a73d9f970ef=0; toggleCats=%2C%2C; membersOnlineToday=0; session_id=b2936daff6cd9adda6368674c77b160a; modtids=%2C; coppa=0; PHPSESSID=6pub7fdior8sg8kmsd8clmn0f7; hide_sidebar=0
    12. Connection: keep-alive
    13. Upgrade-Insecure-Requests: 1
    14. rememberMe=1&ips_username=USER&ips_password=PASSWORT&auth_key=880ea6a14ea49e853634fbdc5015a024&submit=Sign+In: undefined


    Kann man damit ein Login basteln oder eher das System ungeignet?
    Rein fürs Verständnis: Wozu den Response Auswerten?

    Angenommen du willst dich einloggen, dann setzt du über den Webbrowser dein Username und Passwort in das jeweilige Input-Feld.
    Danach löst du nur den Button Login aus und je nachdem, ob du zur Startseite weitergeleitet worden bist oder noch auf der Login-Page verharrst, war der Login erfolgreich oder nicht.

    Da macht m.M.n. ein erneutes Senden des HTTP-Requests keinen Sinn.

    Lg, Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Wie meinst du das? WebRequest.Create also hier der normale foren link?

    Die frage ist nur wiso es nicht klappt

    PS :

    Quellcode

    1. http://www.webseite.de/forum/index.php?app=core&module=global&section=login&ips_username=USER&ips_password=PASSWORT&rememberMe=1


    was muss ich noch machen das es absendet bzw. submit etc??


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Saphira104“ ()

    bei einem Webbrowser bindest du im Grunde den IE in dein Projekt mit ein.
    Da kannst du zu Seite XY navigieren.
    Dort angekommen füllst du die Inputs wie du es in deinem Startpost schonmal gezeigt hast. (Innertext,...)

    Danach muss es da einen Login-Button geben. Den Selekterst du ebenso wie in Post #1 und Triggerst das Click event.

    VB.NET-Quellcode

    1. ​WebBrowser1.Document.GetElementById("loginName").InnerText = TextBox1.Text
    2. WebBrowser1.Document.GetElementById("password").InnerText = TextBox2.Text
    3. WebBrowser1.Document.Forms(0).InvokeMember("submit")


    Dann bist du entweder eingeloggt oder nicht, wie du es eben von einem normalen Browser auch kennst.

    Wenn deine Inputfields keine Id haben, kannst du mit diesem Code auch keine Werte eintragen - logischerweise. Also müsstest du dir da was einfallen lassen. (Über Klassen gehen, Namen auslesen oder sowas)

    LG, Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    OK, das Problem mit der Abfrage ist das der Webbrowser läd und somit auch Explorer und Script errors zeigt...

    Login trägt es ein aber wie kann man das "submit" so ändern das es nicht bei der "suchbar" auf submit geht sondern beim Login?

    Schöner wäre alles im Hintergrund ohne webbrowser mit Abfrage danach als Login

    VB.NET-Quellcode

    1. WebBrowser1.Document.Forms


    gibt ein Array aus den Forms auf der Seite zurück.
    Also unter index 0 nimmt es die erste. Und wenn die erste Form zur Suchbar gehört, feuert er eben das ab.
    Also entweder sucht du den richtigen Index. -> Wenn eine Form hinzukommt musst du das erneut machen.

    oder schaust dir den Button an.
    z.b.

    HTML-Quellcode

    1. <input type="submit" class="login_submit">Login</input>


    Wenn du sowas hast, kommst du mit GetElementById nicht weit, da keine ID vorhanden ist. da könntest du über den Type (=input) gehen und machst eine Foreach und checkst, ob es die Klasse login_submit hat. Wenn ja, triggerst du den Click auf dem Element.

    Verstehst du was da so abgehen muss damit du an dein Ziel kommst oder ist das noch etwas zu krass für dich?

    LG, Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Ja auch das als Frau verstehe ich etwas :D

    Aber das bringt mir leider doch nicht sehr viel denn :

    Wenn der User angemeldet ist muss er sich ausloggen.
    Am besten wäre es wirklich ein normaler Login -> abfrage was danach kommt und die nächste Form Starten.

    Oder ich muss doch mit Mysql ran gehen. Nur benuzt IPboard 3.x hash und salt etc..
    Ich meinte bzgl. des Wissensstandes ;)

    Der Login und das Weiterleiten geschieht jedoch serverseitig, sprich es ist kompliziert (je nach System auch nicht möglich) den Login zu callen und danach auf die nächste Seite weiterzuleiten
    Ich verstehe noch nicht ganz, was das mit IPboard 3.x zu tun hat?

    Es geht doch im Endeffekt nur um eine Webpage, oder?
    Mit Login -> den willst du ausführen über ein .NET-GUI, oder?
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Ja es geht um IPboard 3.x das unser Forum ist (noch im Aufbau) und diese Login Form ist für uns Wichtig um unsere Member darauf anmelden zu lassen.

    So das Loginform 2 erscheint . Das ganze über Mysql wird zu schierig und zu unsicher (möchte keine daten ins Programm) kann man ja auslesen schon mit dem editor.

    Per PHP wäre noch eine Lösung aber da ist wieder das Problem string, hash, salt etc...

    Mfg
    So nochmal für mich, ich hab mir gerade den ganzen Post durchgelesen und erkenne nicht genau, was du tun willst.

    Du hast ein Forum -> ok

    Du willst da iwas mitm Login bubbeln. -> was genau??

    Wozu soll das mit dem Login dienen?
    Umsonst hat das Forum doch keinen eigenen Login, oder?

    Sprich: lege kurz die spezifischen Anforderungen fest.


    Dann lege fest, in welcher Sprache du das umsetzen möchtest.
    Wenn alles geklärt ist und wir auf dem selben Stand sind, können wir weiter reden ;)

    Lg, Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Genau das Forum hat einen Login.

    Ich möchte aber eine anwendung FÜR das forum und möchte nur Leute darauf die auch auf dem Forum angemeldet sind darauf haben.

    Eigentlich noch dazu welche Gruppe sie sind . Solte dafür sein das Member und Premium 2 verschiedene dinge sehn könn aber das anderes Thema.

    Der Login von IPboard soll nur dazu genuzt werden um mich mit der Anwendung zu verbinden für die Leute die auf dem Forum sind.

    Oder ist es möglich mit PHP ein Login zu bauen der Pass hash und salt verwendet und darüber die form steuern ? wäre sicherer denk ich mal.

    members_pass_hash

    members_pass_salt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Saphira104“ ()

    Im Grunde musst du nur schauen, ob du den SourceCode vo IPboard editieren kannst.
    Da gibt es dann irgendwo den Login-Code bei dem du vor dem eigentlichen Login die Daten überprüfst und dann - wenn alles passt - den Login durchführst, oder - wenn es eben nicht passt - den Login abbrichst und eine Fehlermeldung zurück gibst.

    Eine extra Anwendung dafür ist denke ich nicht zielführend.

    Lg, Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    OK, lezte möglichkeit :

    Quellcode

    1. //Get password hash and salt using email
    2. $result=mysql_query("SELECT * FROM ".$pf."members");
    3. while($rows=mysql_fetch_array($result)){
    4. $checkpass=$rows['members_pass_hash'];
    5. $salt=$rows['members_pass_salt'];
    6. }
    7. //echo $checkpass . "<br />" . md5($_POST['pass']);
    8. //$ip = explode('.', $_SERVER['REMOTE_ADDR']);
    9. //$salt2 = md5($DBpassword . $DBusername);
    10. //$pass2 = md5( md5( $id . "-" . $ip[0] . '-' . $ip[1] . '-' . $m_login_key) . $salt2);
    11. $password = md5( md5( $salt ) . md5( $password ) );


    Wie ist das gemeint? Direkt aus der mysql sprich md5 davon nochmal md5 dann den salt und nochmal md5 = passwort?

    md5(md5($salt).md5($pass)) so das man es einbindet um das passwort zu nutzen

    Ok habe gesehn IPboard 3.x nutz md5(md5(salt):lower()..md5(password):lower()):lower()

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Saphira104“ ()