Jump to content
SilviuCS

[Source] Login to phpBB2 | phpBB3 | myBB | vBulletin | IPB2 | IPB3

Recommended Posts

Posted (edited)

At this moment, it is possible to login to:

- phpBB2

- phpBB3

- myBB

- vBulletin (latest version)

- IPB2

Class '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 Property
End Class

Class 'HTTPWorker'

Imports System.Net
Imports System.Text
Imports System.IO.Compression

Public 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 Class


Class 'phpBB2'

Imports System.Net

Public 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 Function
End Class

Class 'phpBB3'

 Imports System.Net

Public 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 Function
End Class

Class 'myBB'

 Imports System.Net

Public 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 Function
End Class

Class '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 Function

End Class

Class '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 Function
End 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 by SilviuCS
Posted

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...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...