Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 22:53

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[VB.NET] HttpWebRequest - Tutorial

Discussion on [VB.NET] HttpWebRequest - Tutorial within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,695
Received Thanks: 1,808
[VB.NET] HttpWebRequest - Tutorial

Hey,

da ich nun vermehrt PN's erhalten habe, in denen gefragt wird, wie man
HttpWebRequests benutzt, erstelle ich hier ein kleines Tutorial und werde euch zeigen, wie ihr euch damit auf Epvp einloggen könnt. Habt ihr erstmal das Prinzip verstanden, könnt ihr es eigentlich überall anwenden und somit auch einen YouTube Account Creator / Bot und sonstige Sachen erstellen.

Das einzige was wir eigentlich noch brauchen ist das Programm (Firefox-Addon).

So, nun startet ihr dieses und kreuzt unten in der Mitte "Mitschneiden" an.
Nun wird euer Browserverlauf sozusagen mitverfolgt und alle Anfragen, die euer Browser erstellt angezeigt.

Nun loggen wir uns auf Epvp ein und schauen, was uns LHH (Live HTTP Headers) anzeigt:

PHP Code:
http://www.elitepvpers.com/forum/login.php?do=login

POST /forum/login.php?do=login HTTP/1.1
Host
http://www.elitepvpers.com
User-AgentMozilla/5.0 (Windows NT 6.1rv:8.0Gecko/20100101 Firefox/8.0
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://www.elitepvpers.com/forum/
Cookie: epvp_backend=s4; __gads=ID=6f749e44ae0087e5:T=1320237926:S=ALNI_MYbOtE8lku_di_EUqg6BvxxSVr9Hg; __utma=15670114.427803338.1320237927.1322589050.1322663893.131; __utmz=15670114.1322134269.108.19.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=elite%20sro%20password%20change; IDstack=2328552; vbulletin_userlist_hide_avatars_buddylist=0; vbulletin_userlist_hide_avatars_incomingreqs=0; __utmb=15670114.40.10.1322663894; __utmc=15670114; bbsessionhash=c3af316e486100aba492eb086d001409; bblanguageid=2; bblastvisit=1322665729; bblastactivity=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 147
vb_login_username=EPVP_USERNAME&vb_login_password=EPVP_PASSWORT&cookieuser=1&s=&securitytoken=guest&do=login&vb_login_md5password=&vb_login_md5password_utf= 
Das ganze müssen wir nur noch in unserem Programm nachbilden und schon können wir uns darüber einloggen (und danach auch im eingeloggten Account weitere Sachen machen).

In der 1. Zeile von LHH sehen wir den Link, an den unser Browser die Anfrage gesendet hat.
In der 3. Zeile können wir die Art der Anfrage sehen. "POST" kommt immer dann, wenn wir z.B. etwas ausgefüllt haben und eine Seite mit den von uns zuvor eingegeben Daten (in diesem Fall die Logindaten) aufrufen.
Dann gibt es noch "GET", welches kommt, wenn wir einfach die Seite aufrufen, um sie anzeigen zu lassen (in diesem Fall wäre es dann die Hauptseite vom Epvp-Forum nach dem Login).

Da wir uns ja einloggen wollen und somit unsere Logindaten übergeben müssen, nehmen wir nun auch POST. User-Agent & Content-Type übernehmen wir einfach in unser Programm. Zu den restlichen werde ich gleich noch kommen.

Nun können wir auch schon zum Codingteil übergehen.

Erst einmal importieren wir einige Namespaces (braucht man nicht unbedingt, jedoch müssen wir es dann nicht jedesmal davor schreiben).

PHP Code:
Imports System.IO
Imports System
.Net
Imports System
.Text 
Danach erstellen wir uns gleich zu Beginn einen neuen CookieContainer.
In diesem werden alle Cookies gespeichert (so wie es euer eigener Browser auch macht), damit ihr auch wirklich noch eingeloggt seid, wenn ihr nach dem Einloggen auf eine andere Seite geht. Diesen müssen wir somit bei jeder weiteren Anfrage (Request) mitübergeben.

PHP Code:
Dim cookieCon As New CookieContainer 
So, nun erstellen wir uns unseren ersten Request.
Wie wir in der 1. Zeile von LHH sehen können, senden wir eine Anfrage an:

PHP Code:
http://www.elitepvpers.com/forum/login.php?do=login 
Somit sieht unsere Anfrage folgendermaßen aus:

PHP Code:
Dim request As HttpWebRequest DirectCast(HttpWebRequest.Create("http://www.elitepvpers.com/forum/login.php?do=login"), HttpWebRequest
(Hinweis: Das "DirectCast" [alternativ dazu auch CType] benutze ich wegen Option Strict On.
Am besten macht ihr dies auch, indem ihr einfach "Option Strict On" in die oberste Zeile einfügt. Dies ist dafür gedacht, dass ihr gleich von Beginn an alles richtig umwandelt und definiert, damit es später zu keinen Problemen im Programm kommt.)

Da wir ja unsere Logindaten übergeben wollen, müssen wir wie gesagt "POST" benutzen, also:

PHP Code:
request.Method "POST" 
Und setzen gleich unseren CookieContainer:

PHP Code:
request.CookieContainer cookieCon 
UserAgent & ContentType kopieren wir einfach aus LHH raus:

PHP Code:
request.UserAgent "Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0"
request.ContentType "application/x-www-form-urlencoded" 
So, nun kommen wir zum Übergeben der Logindaten.

Schauen wir uns mal den Content an (letzte Zeile):

PHP Code:
vb_login_username=EPVP_USERNAME&vb_login_password=EPVP_PASSWORT&cookieuser=1&s=&securitytoken=guest&do=login&vb_login_md5password=&vb_login_md5password_utf
Zu unserem Glück ein ziemlich simpler Inhalt. Diesen können wir also ohne weiteres übernehmen. Unseren Inhalt speichern wir am besten in einer Variable:

PHP Code:
Dim username As String "EPVP_USERNAME"
Dim password As String "EPVP_PASSWORD"
Dim post As String "vb_login_username=" username "&vb_login_password=" password "&cookieuser=1&s=&securitytoken=guest&do=login&vb_login_md5password=&vb_login_md5password_utf=" 
Dies müssen wir nun als einen Stream übergeben. Zunächst benötigen wir die Länge des Inhalts:

PHP Code:
Dim byteArr() As Byte Encoding.Default.GetBytes(post)
request.ContentLength byteArr.Length 
So, nun haben wir die Länge und schreiben den Inhalt in unseren Stream:

PHP Code:
Dim dataStream As Stream request.GetRequestStream()
dataStream.Write(byteArr0byteArr.Length
Nun haben wir also unsere Anfrage abgeschickt und schauen, was uns der Server geantwortet hat. Dazu erstellen wir ein HttpWebResponse:

PHP Code:
Dim response As HttpWebResponse DirectCast(request.GetResponse(), HttpWebResponse
Die Antwort haben wir nun also in der Variable "response" gespeichert.
Aus dieser lesen wir nun den Seitenquelltext aus:

PHP Code:
Dim reader As New StreamReader(response.GetResponseStream())
Dim seitenQuelltext As String reader.ReadToEnd() 
Nun haben wir den aktuellen Seitenquelltext in der Variable "seitenQuelltext" gespeichert. Um jetzt zu prüfen, ob wir wirklich eingeloggt sind, schauen wir uns mal den Seitenquelltext etwas genauer an.
Wenn wir eingeloggt sind, dann muss ja logischerweise auch die Möglichkeit bestehen, sich wieder auszuloggen. Wenn die Seite nun auf Deutsch ist, steht ja oben auf der Seite bzw. im Quelltext "Abmelden", ansonsten "Log Out".

Nun erstellen wir einfach eine kleine If-Abfrage und prüfen, ob unsere Variable sowas auch enthält.

PHP Code:
If seitenQuelltext.Contains("Log Out"Then
   
//eingeloggt
Else
   
//nicht eingeloggt
End If 
Normalerweise müsste jetzt noch "nicht eingeloggt" ausgegeben werden, weil wir derzeit noch auf der Redirect-Seite sind, die nach dem Login kommt (da wo steht "Danke für deinen Login, solltest du nicht weitergeleitet werden, klicke hier" oder so ähnlich).

Laut dem Quelltext sind wir also auf der Redirect-Seite. Dies sehe ich daran, dass der Quelltext folgendes enthält:

PHP Code:
...
Thank you for logging inxKraizy.
...
Click here if your browser does not automatically redirect you.
... 
Gehen wir also nochmal zu LHH.
Nachdem wir unsere Daten abgeschickt haben, hat unser Browser die Hauptseite von Epvp aufgerufen. Das können wir auch im LHH sehen, wenn wir etwas weiter runterscrollen:

PHP Code:
http://www.elitepvpers.com/forum/

GET /forumHTTP/1.1
Host
www.elitepvpers.com
User
-AgentMozilla/5.0 (Windows NT 6.1rv:8.0Gecko/20100101 Firefox/8.0
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://www.elitepvpers.com/forum/login.php?do=login 
Hier wird nun nicht mehr "POST" sondern "GET" verwendet, weil wir ja dann nichts mehr übergeben, sondern einfach nur die Seite aufgerufen haben. Das bilden wir in unserem Programm einfach kurz nach:

PHP Code:
request DirectCast(HttpWebRequest.Create("http://www.elitepvpers.com/forum/"), HttpWebRequest
Und nicht vergessen, die Cookies mit zu übergeben:

PHP Code:
request.CookieContainer cookieCon 
Und holen uns wieder die Antwort vom Server:

PHP Code:
response DirectCast(request.GetResponse(), HttpWebResponse)
reader = New StreamReader(response.GetResponseStream())
seitenQuelltext reader.ReadToEnd() 
So, nun müssten wir eingeloggt und auf der Hauptseite von Epvp sein.
Um das zu prüfen, benutzen wir einfach die kleine If-Abfrage von oben.

Sollten wir jedoch immer noch nicht eingeloggt sein, besteht auch die Möglichkeit, zu schauen, warum das so ist. Wenn man z.B. falsche Logindaten eingibt, erscheint die Fehlermeldung "Benutzername oder Passwort falsch" oder so ähnlich. Das prüfen wir einfach auch mit einer If-Abfrage und können dann dementsprechend dem Benutzer des Programms sagen, warum das Einloggen nicht geklappt hat.

Wenn ihr nun weitere Sachen im eingeloggten Account erledigen wollt, macht ihr das einmal in eurem Browser nach und bildet einfach den Inhalt von LHH nach.

Das war's eigentlich auch schon. Am Ende gibt's nochmal eine kleine Klasse, die das ganze etwas leichter und übersichtlicher macht, natürlich mit einem Beispiel, wie man sie benutzt.

PHP Code:
Option Strict On
Option Explicit On

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

Public Class Http
    Dim cookieCon 
As New CookieContainer
    Dim request 
As HttpWebRequest
    Dim response 
As HttpWebResponse

    
Public Function GetResponse(ByVal url As String) As String
        request 
CType(HttpWebRequest.Create(url), HttpWebRequest)
        
request.CookieContainer cookieCon
        response 
CType(request.GetResponse(), HttpWebResponse)

        Return New 
StreamReader(response.GetResponseStream()).ReadToEnd()
    
End Function

    Public Function 
GetResponse(ByVal url As StringByVal post As String) As String
        request 
CType(HttpWebRequest.Create(url), HttpWebRequest)
        
request.Method "POST"
        
request.CookieContainer cookieCon
        request
.UserAgent "Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0"
        
request.ContentType "application/x-www-form-urlencoded"

        
Dim byteArr() As Byte Encoding.Default.GetBytes(post)
        
request.ContentLength byteArr.Length

        Dim dataStream 
As Stream request.GetRequestStream()
        
dataStream.Write(byteArr0byteArr.Length)

        
response CType(request.GetResponse(), HttpWebResponse)

        Return New 
StreamReader(response.GetResponseStream()).ReadToEnd()
    
End Function
End Class 
Aufruf (mit Login + Überprüfung):
PHP Code:
Private Sub btnLogin_Click (sender As ObjectAs EventArgsHandles btnLogin.Click
   With 
New Http
      
//hier wird der Seitenquelltext gespeichert
      
Dim html As String String.Empty
      
//Login ausführen
      
Dim username As String "EPVP_USERNAME"
      
Dim password As String "EPVP_PASSWORD"
      
html = .GetResponse("http://www.elitepvpers.com/forum/login.php?do=login""vb_login_username=" username "&vb_login_password=" password "&cookieuser=1&s=&securitytoken=guest&do=login&vb_login_md5password=&vb_login_md5password_utf=")
      
//Hauptseite aufrufen
      
html = .GetResponse("http://www.elitepvpers.com/forum/")
      
//prüfen, ob Login erfolgreich war
      
If html.Contains("Log Out")
         
//eingeloggt
      
Else
         
//nicht eingeloggt
      
End If
   
End With  
End Sub 
Natürlich würde diese Klasse nicht den 1. Platz im "Schönheitswettbewerb" bekommen, das soll sie aber auch nicht. Sie soll bloß zeigen, wie man es mit einer eigenen Klasse einfacher und übersichtlicher machen kann. Natürlich besteht die Möglichkeit diese Klasse nun zu erweitern und weiter zu verbessern. Ein wichtiger Punkt ist z.B. das Prüfen auf das Vorhandensein eines Meta-Refresh (in unserem Beispiel ist es der Aufruf der Epvp-Hauptseite nach dem Login). Wie man sowas genau machen kann, werde ich später noch diesem Tutorial hinzufügen, habe leider nicht viel Zeit und am Handy geht es schlecht

Hier nochmal was kleines, wie man eine Datei uploaden kann:

Im Anhang findet ihr noch einen Projektordner eines Treasure Creators, vielleicht hilft dies ja dem ein oder anderen das Tutorial bzw. allgemein HttpWebRequests zu verstehen.

Mit freundlichen Grüßen
Kraizy
Attached Files
File Type: rar EPVP_TreasureCreator_Source.rar (143.9 KB, 528 views)



Kraizy​ is offline  
Thanks
72 Users
Old 11/30/2011, 20:36   #2
 
elite*gold: 1250
Join Date: Nov 2011
Posts: 1,510
Received Thanks: 238
Schönes Tutorial! Und ich dachte ich könnte alles -.-


iRofl is offline  
Thanks
2 Users
Old 12/02/2011, 15:00   #3
 
elite*gold: 35
Join Date: Oct 2007
Posts: 180
Received Thanks: 313
Supper TUT!! danke das du uns das Zeigst.

nun sind auch meine Fragen Beantwortet =)
.Scare©® is offline  
Thanks
2 Users
Old 12/02/2011, 15:53   #4
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,695
Received Thanks: 1,808
Quote:
Originally Posted by iRofl View Post
Schönes Tutorial! Und ich dachte ich könnte alles -.-
Quote:
Originally Posted by xX.Fire.Xx View Post
Supper TUT!! danke das du uns das Zeigst.

nun sind auch meine Fragen Beantwortet =)
Vielen Dank für euer Feedback!


Kraizy​ is offline  
Old 12/02/2011, 16:33   #5
 
elite*gold: 718
Join Date: Oct 2011
Posts: 625
Received Thanks: 64
vielen dank
l1ght # is offline  
Old 12/09/2011, 05:27   #6
 
elite*gold: 0
Join Date: Sep 2007
Posts: 500
Received Thanks: 145
Vielen Dank für Ihre Tutorial Menschen. Jetzt kann ich weitere Fortschritte in einem meiner Projekte

Edit: Auch glauben Sie, könnte ein Leitfaden für GET-Request für das Abrufen von Informationen von einer Seite und Parsen es um ein Textfeld wie machen? Beispiel GET info von elementID auf einer Webseite und den Wert dieser elementID wird in ein Textfeld analysiert werden.
summoner01 is offline  
Old 12/09/2011, 08:31   #7
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,695
Received Thanks: 1,808
@summoner01 Dazu kann man Substring und/oder Split benutzen oder Regex. Gibt mehrere Möglichkeiten.
Kraizy​ is offline  
Old 12/09/2011, 14:24   #8
 
elite*gold: 0
Join Date: Sep 2007
Posts: 500
Received Thanks: 145
Ja, als ich regex als eine Möglichkeit auf den ersten, aber ich bin neu in die Programmierung so bekommen sie alle an die Arbeit Recht ist im Moment schwierig. Denkst du, du kannst mir ein wenig helfen, vielleicht ein Beispiel nennen?
summoner01 is offline  
Old 12/09/2011, 15:11   #9
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,695
Received Thanks: 1,808
Also ich habe jetzt keine Lust hier die ganze Zeit rumzuprobieren usw. Wie gesagt google einfach mal nach Substring bzw. Split. usw.
Kleines Beispiel:
PHP Code:
<style type="text/css" id="vbulletin_css"
Um hier nun vbulletin_css rauszubekommen, kannst du Substring, IndexOf und Split benutzen:
PHP Code:
quelltext.Substring(quelltext.IndexOf("id=")).Split(""""c)(1
oder
PHP Code:
quelltext.Split("="c)(2).Split(""""c)(1
Man kann natürlich aber auch anders Splitten usw, wie gesagt, es gibt mehrere Möglichkeiten, aber Regex wäre da wohl am besten geeignet.
Kraizy​ is offline  
Thanks
1 User
Old 12/09/2011, 15:45   #10
 
elite*gold: 0
Join Date: Sep 2007
Posts: 500
Received Thanks: 145
Ah schön, vielen Dank für das Beispiel. Ich werde einen Blick in regex dazu führen, dass meine erste Idee war so gut zu nehmen.
summoner01 is offline  
Old 12/09/2011, 22:35   #11


 
elite*gold: 4
Join Date: Aug 2008
Posts: 6,787
Received Thanks: 4,989
Wieso nicht einfach den WebClient nutzen? Da spart man sich die meisten Sachen und darüberhinaus bietet die Komponente direkt asynchrone Funktionen.

Bsp. könnte so aussehen (C#):

Code:
WebClient client = new WebClient();
NameValueCollection content = new NameValueCollection();

client.UploadValuesCompleted += new UploadValuesCompletedEventHandler(client_UploadValuesCompleted);

content.Add("vb_login_username", USERNAME);
content.Add("cookieuser", "1");
content.Add("vb_login_password", "");
content.Add("s", "");
content.Add("securitytoken", "guest");
content.Add("do", "login");
content.Add("vb_login_md5password", GetMD5Hash(PASSWORD));
content.Add("vb_login_md5password_utf", GetMD5Hash(PASSWORD));

Uri siteURL = new Uri("http://www.elitepvpers.com/forum/login.php?do=login");

client.UploadValuesAsync(siteURL, content);
Da der WebClient mit der mir letzten bekannten Version keinen CookieContainer integriert hat habe ich mir mit einer Hilfsklasse Abhilfe verschafft:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Collections.Specialized;

namespace ProjectX
{
    public class CookieAwareWebClient : WebClient
    {
        private CookieContainer m_container = new CookieContainer();

        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            if (request is HttpWebRequest)
            {
                (request as HttpWebRequest).CookieContainer = m_container;
            }
            return request;
        }
    }
}
Cholik is offline  
Thanks
1 User
Old 12/15/2011, 21:37   #12



 
elite*gold: 115
The Black Market: 236/0/0
Join Date: Oct 2011
Posts: 3,075
Received Thanks: 488
wie kann ich einen proxy adden?
Train™ is offline  
Old 12/15/2011, 21:43   #13
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,695
Received Thanks: 1,808
Request.Proxy = New WebProxy(...)
Kraizy​ is offline  
Thanks
1 User
Old 12/17/2011, 05:23   #14



 
elite*gold: 115
The Black Market: 236/0/0
Join Date: Oct 2011
Posts: 3,075
Received Thanks: 488
Könntest du auch noch ein kleines Einlog Tutorial für den Webbrowser alleine machen?
Train™ is offline  
Old 12/17/2011, 17:50   #15
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,695
Received Thanks: 1,808
WebBrowser? Ich benutze die nicht weil die mist sind und was soll man da für ein Tutorial machen?


Kraizy​ is offline  
Reply



« [Tutorial] Git Grundlagen | - »

Similar Threads
HttpWebRequest C# Browsergame Bot
12/07/2017 - .NET Languages - 4 Replies
Hi, i have the following problem and it would be great if s.o. could help me. I try to write a simple bot for a browsergame which uses the HttpWebRequest and Response classes from C#. Currently i try to log in with the following script but i only get back to the login page. When i try to catch a site for logged in members only i also only get the login page. There has to be a problem with the cookie but i don't know where :( class HttpHelper { private CookieContainer...
c# httpwebrequest Travian
12/07/2017 - .NET Languages - 2 Replies
Gude Leute ich hätt da mal ein anliegen ich will mir ein kleines Tool zur vereinfachten bedinung von Travian schreiben nur leider bekomme ich das irgendwie nicht auf die Reihe. da mein Code nicht so recht funktioniert hat habe ich mir den code von jemand anderes mal geklaut aber der ergibt das gleiche problem. Das Probleme ist er zeigt die Seite nicht richtig an und er baut keine truppen wenn ich auf Button1 click. wenn mir einer das vielleicht mal flicken könnte oder mir erklären...
[C#]Mit HttpWebRequest auf Seite einloggen.
12/07/2017 - .NET Languages - 2 Replies
Hallo, Ich möchte mich gerne über ein Kleines Programm mit 2 Eingabefeldern und einem Login Button auf einer Seite einloggen. Mein Ziel ist es, nach dem Login die Cookies auslesen zu können, da dort für mich wichtige Infos gespeichert werden ;) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;
[TUTORIAL] Starter friendly tutorial to searching for Nuke casting time [TUTORIAL]
02/09/2011 - 9Dragons - 12 Replies
If you already have Cheat Engine and know how to use it, skip to part 4 of the tutorial. 1. Introduction This forum has helped me quite a bit, so I decided to give something back :) Now I've noticed there are quite a few who ask for nuke casting time hacks / address', and I've also noticed, that there are quite a few who are REALLY annoyed with these questions, so I decided to write this so both sides can benefit from it. 2. Getting started First off, you need to have Cheat Engine...
[C#]MD5-Cheksumme mit HttpWebRequest oä
08/18/2010 - .NET Languages - 1 Replies
Ich will mir mal einen gescheiten Patcher für Metin2 machen.. Jetzt soll er von den Files auf meinem Server die Checksummen ausspucken. Die Datei sollte nicht heruntergeladen werden... System.IO.FileStream FileCheck = System.IO.File.OpenRead(Dateipfad); System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvi der(); byte md5Hash = md5.ComputeHash(FileCheck);



All times are GMT +1. The time now is 22:53.


Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

BTC: 33E6kMtxYa7dApCFzrS3Jb7U3NrVvo8nsK
ETH: 0xc6ec801B7563A4376751F33b0573308aDa611E05

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2020 elitepvpers All Rights Reserved.