SilviuCS Posted August 28, 2011 Report Posted August 28, 2011 (edited) At this moment, it is possible to login to:- phpBB2- phpBB3- myBB- vBulletin (latest version)- IPB2Class 'Forum'Public MustInherit Class Forum Private _logindata As String Private _loginUrl As String Private _url As String Private _username As String Private _defaultCookieName As String Private _defaultCookieSearch As String Public Sub New(ByVal url As String, ByVal loginUrl As String, ByVal username As String, ByVal cookieName As String, _ ByVal cookieSearch As String, Optional ByVal data As String = "") Me._url = url Me.loginUrl = loginUrl Me.logindata = data Me.username = username Me._defaultCookieName = cookieName Me._defaultCookieSearch = cookieSearch End Sub Public MustOverride Function isLoggedIn(ByVal cookies As System.Net.CookieContainer) As Boolean Public Property logindata As String Get Return Me._logindata End Get Set(ByVal value As String) Me._logindata = value End Set End Property Public Property url As String Get Return Me._url End Get Set(ByVal value As String) Me._url = value End Set End Property Public Property loginUrl As String Get Return Me._loginUrl End Get Set(ByVal value As String) Me._loginUrl = value End Set End Property Public Property username As String Get Return Me._username End Get Set(ByVal value As String) Me._username = value End Set End Property Public Property defaultCookieName As String Get Return Me._defaultCookieName End Get Set(ByVal value As String) Me._defaultCookieName = value End Set End Property Public Property defaultCookieSearch As String Get Return Me._defaultCookieSearch End Get Set(ByVal value As String) Me._defaultCookieSearch = value End Set End PropertyEnd ClassClass 'HTTPWorker'Imports System.NetImports System.TextImports System.IO.CompressionPublic Class HTTPWorker Public Shared cookies As CookieContainer Private data As Byte() Public Function login(ByVal forumInstance As Forum) As Boolean Dim request As HttpWebRequest Dim response As HttpWebResponse Dim stream As IO.Stream cookies = New CookieContainer Try request = WebRequest.Create(forumInstance.loginUrl) setConnectionParameters(request) data = Encoding.ASCII.GetBytes(forumInstance.logindata) request.ContentLength = data.Length stream = request.GetRequestStream() stream.Write(data, 0, data.Length) stream.Flush() stream.Close() response = request.GetResponse() If forumInstance.isLoggedIn(cookies) Then Return True End If Catch ex As Exception 'do something with the exception End Try Return False End Function Public Sub setConnectionParameters(ByRef request As HttpWebRequest) With request .Method = "POST" .Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" .ContentType = "application/x-www-form-urlencoded" .Proxy = Nothing .CookieContainer = cookies .KeepAlive = True .ServicePoint.Expect100Continue = False .UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8) Gecko/20051111 Firefox/1.5; FBI-version/0.07" '.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate") if you want to speed up the steam reading (most boards support this) End With End Sub 'this function not implemented, it is added to show how to link the cookies from the login Public Sub navTo() 'Dim request As HttpWebRequest 'request.CookieContainer = cookies 'etcetc: you could set idletime, speed if you simultaniously want to fire requests, headers, method (get/post), etc End Sub 'Note: to read the result in login() '--If you want to read the result (using compression techniques to speed it up-- 'Dim responseStream As IO.Stream = response.GetResponseStream() 'If (response.ContentEncoding.ToLower().Contains("gzip")) Then ' responseStream = New GZipStream(responseStream, CompressionMode.Decompress) 'ElseIf (response.ContentEncoding.ToLower().Contains("deflate")) Then ' responseStream = New DeflateStream(responseStream, CompressionMode.Decompress) 'End If 'Dim streamReader As IO.StreamReader = New IO.StreamReader(responseStream, Encoding.Default) 'Dim result As String = streamReader.ReadToEnd().Trim() 'streamReader.Close() '--End ClassClass 'phpBB2' Imports System.NetPublic Class phpBB2 Inherits Forum Public Sub New(ByVal url As String, ByVal username As String, ByVal password As String) MyBase.New(url, url & "/login.php", username, "phpBB_WBB_data", "userid%22%3Bi%3A-1%3B%7D", "&username=" + _ username + "&password=" + password + "&autologin=on&login=Log+in") End Sub Public Overrides Function isLoggedIn(ByVal cookies As System.Net.CookieContainer) As Boolean If Not cookies.GetCookies(New Uri(url)).Item(defaultCookieName).Value.Contains(defaultCookieSearch) Then Return True End If Return False End FunctionEnd ClassClass 'phpBB3' Imports System.NetPublic Class phpBB3 Inherits Forum Public Sub New(ByVal url As String, ByVal username As String, ByVal password As String) MyBase.New(url, url & "/ucp.php?mode=login", username, "phpbb3_1fh61_u", "1", _ "username=" + username + "&password=" + password + "&redirect=&sid=&redirect=&login=Login") End Sub Public Overrides Function isLoggedIn(ByVal cookies As System.Net.CookieContainer) As Boolean If Not cookies.GetCookies(New Uri(url)).Item(defaultCookieName).Value.Equals(defaultCookieSearch) Then Return True End If Return False End FunctionEnd ClassClass 'myBB' Imports System.NetPublic Class myBB Inherits Forum Public Sub New(ByVal url As String, ByVal username As String, ByVal password As String) MyBase.New(url, url & "/member.php?action=login", username, "mybbuser", "", "username=" + username & "&password=" + password & "&submit=Login&action=do_login&url=") End Sub Public Overrides Function isLoggedIn(ByVal cookies As System.Net.CookieContainer) As Boolean If Not IsNothing(cookies.GetCookies(New Uri(url)).Item(defaultCookieName)) Then Return True End If Return False End FunctionEnd ClassClass 'vBulletin'Public Class vBulletin Inherits Forum Public Sub New(ByVal url As String, ByVal username As String, _ ByVal password As String) MyBase.New(url, url & "/login.php?do=login", username, "vbseo_loggedin", "yes") MyBase.logindata = "vb_login_username=" + username + "&vb_login_password=" + password + _ "&cookieuser=1&s=&securitytoken=guest&do=login&vb_login_md5password=" + Md5String(password) + _ "&vb_login_md5password_utf=" + Md5String(password) End Sub Public Overrides Function isLoggedIn(ByVal cookies As System.Net.CookieContainer) As Boolean If Not IsNothing(cookies.GetCookies(New Uri(url)).Item(defaultCookieName)) Then If cookies.GetCookies(New Uri(url)).Item(defaultCookieName).Value.Contains(defaultCookieSearch) Then Return True End If End If Return False End Function Private Function Md5String(ByVal v As String) As String Dim myProv As New System.Security.Cryptography.MD5CryptoServiceProvider Dim b As Byte() = System.Text.Encoding.ASCII.GetBytes(v) b = myProv.ComputeHash( Dim str As String = "" Dim i As Integer For i = 0 To b.Length - 1 str = (str & b(i).ToString("x2").ToLower) Next i Return str End FunctionEnd ClassClass 'IPB2'Public Class IPBoard2 Inherits Forum Public Sub New(ByVal url As String, ByVal username As String, ByVal password As String) MyBase.New(url, url & "/index.php?act=Login&CODE=01", username, "ipb_username", "", _ "&referer=" + url + "&UserName=" + username + "&PassWord=" + password + "&CookieDate=1") End Sub Public Overrides Function isLoggedIn(ByVal cookies As System.Net.CookieContainer) As Boolean If Not IsNothing(cookies.GetCookies(New Uri(url)).Item(defaultCookieName)) Then Return True End If Return False End FunctionEnd Class[b]Notes:[/b]The only reason I have put the actual forums in different classes is because:- A different version can have different functionalities you want to implement- The post string is different (I could have put a string container though for all the classes, but I didn't ~ see previous point)If you want to add different types of forums, just let your forum inherit from the class 'Forum', you'll want to include a cookie name (and maybe value) to verify if the user is logged in. You'll always will need to override the isLoggedIn() method aswell. I don't read the actual html from the response because it is just timewaiste, checking cookies is much faster.You can easily change the sync webrequests into async ones if you would want to login to different sites simulaniously. I might post a tutorial later on about this.Examples to add forumobjects and login:Dim wrkr As New HTTPWorker()'Dim phpBB2Forum As New phpBB2("http://www.myurl.com", "username", "pass")wrkr.login(wbb)Dim vBulletinForum As New vBulletin("http://www.myurl.com", "username", "pass")wrkr.login(cf)Dim myBBForum As New myBB("http://www.myurl.com", "username", "pass")wrkr.login(bb)Dim phpBB3Forum As New phpBB3("http://www.myurl.com", "username", "pass")wrkr.login(phpBB3Forum) Edited August 28, 2011 by SilviuCS Quote
me.mello Posted September 15, 2011 Report Posted September 15, 2011 Hacere...iti bati joc de mine? http://rstcenter.com/forum/36366-%5Bvbulletin-net%5D-login-phpbb2-|-phpbb3-|-mybb-|-vbulletin-|-ipb2-|-ipb3-webrequests.rst Inainte de a posta:- verifica data ultimului post, nu redeschide un topic fara un motiv serios- daca e cazul vezi mai intai ce zice prietenul Google- gandeste-te daca postul tau e util sau postezi doar ca sa te afli in treaba- asigura-te ca nu incalci regulile- fii atent la limbajul folosit, vorbeste frumos si cat mai corect gramatical La a 3-a ne suparam... Quote
orion.hacker Posted September 16, 2011 Report Posted September 16, 2011 pune-l sa explice tot...sa vedem daca stie:))...ca n-a pus vre-o sursa sau credit Quote