HttpReader.vb
上传用户:wangting
上传日期:2020-01-24
资源大小:2226k
文件大小:9k
源码类别:

破解

开发平台:

ASP/ASPX

  1. #Region "GPL License"
  2. 'This file is part of XSS Tunnel.
  3. '
  4. 'XSS Tunnel, XSS Tunneling tool 
  5. 'Copyright (C) 2007 Ferruh Mavituna
  6. 'This program is free software; you can redistribute it and/or
  7. 'modify it under the terms of the GNU General Public License
  8. 'as published by the Free Software Foundation; either version 2
  9. 'of the License, or (at your option) any later version.
  10. 'This program is distributed in the hope that it will be useful,
  11. 'but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. 'GNU General Public License for more details.
  14. 'You should have received a copy of the GNU General Public License
  15. 'along with this program; if not, write to the Free Software
  16. 'Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  17. #End Region
  18. Imports System.Net
  19. Imports System.IO
  20. Imports System.Collections
  21. Imports System.Web
  22. Imports System.Text
  23. ''' <summary>
  24. ''' Make Request and fire up related events
  25. ''' </summary>
  26. Friend Class HttpReader
  27. #Region "Web Request"
  28.     Private _WebRequest As HttpWebRequest
  29.     ''' <summary>
  30.     ''' Web Request 
  31.     ''' </summary>
  32.     ''' <value></value>
  33.     ''' <returns></returns>
  34.     ''' <remarks></remarks>
  35.     Public Property WebRequest() As HttpWebRequest
  36.         Get
  37.             If _WebRequest Is Nothing Then _WebRequest = GetWebRequest(Me.Uri)
  38.             Return _WebRequest
  39.         End Get
  40.         Set(ByVal value As HttpWebRequest)
  41.             _WebRequest = value
  42.         End Set
  43.     End Property
  44.     Private _Uri As Uri
  45.     ''' <summary>
  46.     ''' Uri to Request
  47.     ''' </summary>
  48.     ''' <value></value>
  49.     ''' <returns></returns>
  50.     ''' <remarks></remarks>
  51.     Public Property Uri() As Uri
  52.         Get
  53.             Return _Uri
  54.         End Get
  55.         Set(ByVal value As Uri)
  56.             _Uri = value
  57.         End Set
  58.     End Property
  59. #End Region
  60. #Region "Enums"
  61.     ''' <summary>
  62.     ''' Http Methods
  63.     ''' </summary>
  64.     ''' <remarks></remarks>
  65.     Public Enum HttpMethod
  66.         [Get] = 0 'Default Method
  67.         Post
  68.         Head
  69.         Put
  70.         Trace
  71.         Options
  72.         Delete
  73.         PostMultiPart
  74.     End Enum
  75. #End Region
  76. #Region "Constructors"
  77.     ''' <summary>
  78.     ''' New HttpRequest
  79.     ''' </summary>
  80.     ''' <param name="uri"></param>
  81.     ''' <remarks></remarks>
  82.     Public Sub New(ByVal uri As Uri)
  83.         Me.Uri = uri
  84.     End Sub
  85. #End Region
  86.     Private _PostData As String
  87.     Public Property PostData() As String
  88.         Get
  89.             Return _PostData
  90.         End Get
  91.         Set(ByVal value As String)
  92.             _PostData = value
  93.         End Set
  94.     End Property
  95.     Private _Settings As UriManager
  96.     Public Property Settings() As UriManager
  97.         Get
  98.             If _Settings Is Nothing Then _Settings = New UriManager()
  99.             Return _Settings
  100.         End Get
  101.         Set(ByVal value As UriManager)
  102.             _Settings = value
  103.         End Set
  104.     End Property
  105. #Region "Main Methods"
  106.     ''' <summary>
  107.     ''' Make a request
  108.     ''' </summary>
  109.     ''' <remarks></remarks>
  110.     Public Function Request() As String
  111.         Dim WebReq As HttpWebRequest = Me.WebRequest
  112.         'Check WebRequest
  113.         If WebReq Is Nothing Then
  114.             Debug.Assert(False, "Request is nothing ?")
  115.             Return Nothing
  116.         End If
  117.         'Exit by default in exception
  118.         Dim ExitFunction As Boolean = True
  119.         Dim HttpRes As HttpWebResponse = Nothing
  120.         Dim requestTime As DateTime = DateTime.UtcNow
  121.         Dim SourceCode As String = String.Empty
  122.         Try
  123.             HttpRes = CType(WebReq.GetResponse(), HttpWebResponse)
  124.             ExitFunction = False
  125.         Catch WebEx As Net.WebException 'Handle Web Exceptions
  126.             Select Case WebEx.Status
  127.                 Case WebExceptionStatus.Timeout
  128.                     ExitFunction = True
  129.                 Case WebExceptionStatus.ProtocolError 'Status 500, 401 etc.
  130.                     HttpRes = DirectCast(WebEx.Response, HttpWebResponse)
  131.                 Case WebExceptionStatus.ConnectFailure
  132.                 Case WebExceptionStatus.TrustFailure
  133.                     ExitFunction = True
  134.                 Case WebExceptionStatus.ServerProtocolViolation
  135.                     ExitFunction = True
  136.                 Case Else
  137.                     Debug.WriteLine(WebEx.Message)
  138.                     ExitFunction = True
  139.             End Select
  140.         Catch Ex As InvalidOperationException
  141.             ExitFunction = True
  142.         Finally 'WebException
  143.             Try
  144.                 If ExitFunction Then Exit Try
  145.                 Debug.Assert(Not HttpRes Is Nothing, "We shouldn't be in here if Response is nothing !")
  146.                 Try
  147.                     'Read stream into source code
  148.                     'TODO3 : Limit response size
  149.                     Using SReader As StreamReader = New StreamReader(HttpRes.GetResponseStream)
  150.                         SourceCode = SReader.ReadToEnd
  151.                     End Using
  152.                 Catch ex As Exception
  153.                     'Stream Read Error etc. Summary: Fucked up!
  154.                     ExitFunction = True
  155.                 End Try
  156.             Catch ex As Exception
  157.                 Debug.WriteLine(ex.ToString)
  158.             Finally
  159.                 If HttpRes IsNot Nothing Then HttpRes.Close()
  160.             End Try
  161.         End Try 'Webexception
  162.         'Just leave if we need to exit
  163.         If ExitFunction Then Return Nothing
  164.         'Debug.WriteLine("--------Source Code--------")
  165.         'Debug.WriteLine(SourceCode)
  166.         'Debug.WriteLine("---------------------------")
  167.         Return SourceCode
  168.     End Function
  169. #End Region
  170.     Public Function GetWebRequest(ByVal Uri As Uri) As HttpWebRequest
  171.         Dim WebReq As HttpWebRequest
  172.         Try
  173.             WebReq = CType(HttpWebRequest.Create(Uri), HttpWebRequest)
  174.         Catch ex As NotSupportedException
  175.             Debug.Assert(False, "Fix it at analyzpage()")
  176.             Return Nothing
  177.         End Try
  178.         'Do not follow redirect automaticly we'll do it manually
  179.         WebReq.AllowAutoRedirect = False
  180.         'Add Credentials
  181.         If Me.Settings.Credential IsNot Nothing Then
  182.             WebReq.Credentials = Me.Settings.Credential
  183.         End If
  184.         'Check Proxy
  185.         If Me.Settings.ProxyEnabled Then
  186.             'If there is proxy use otherwise use IE proxy
  187.             If Me.Settings.Proxy IsNot Nothing Then
  188.                 WebReq.Proxy = Me.Settings.Proxy
  189.             End If
  190.         Else
  191.             WebReq.Proxy = Nothing
  192.         End If
  193.         'Add Browser
  194.         WebReq.Accept = Me.Settings.Browser.Accept
  195.         WebReq.ContentType = Me.Settings.Browser.ContentType
  196.         WebReq.UserAgent = Me.Settings.Browser.UserAgent
  197.         'Add Headers
  198.         For Each Header As KeyValuePair(Of String, String) In Settings.Headers
  199.             WebReq.Headers.Add(Header.Key, Header.Value)
  200.         Next Header
  201.         'Application should follow redirect
  202.         'Should give up after a max. try
  203.         'Should not add if it's external or out of scan scope (folder, filetype etc.)
  204.         'For now just do not follow...
  205.         WebReq.AllowAutoRedirect = False
  206.         'Cache Control - Do not cache
  207.         WebReq.Headers.Add(HttpRequestHeader.CacheControl, "no-cache")
  208.         'Get Cookies (custom or/and shared session)
  209.         WebReq.CookieContainer = Settings.CookieContainer
  210.         'Request Timeout
  211.         WebReq.Timeout = Settings.RequestTimeout
  212.         'Choose Post Method
  213.         If PostData IsNot Nothing AndAlso PostData <> String.Empty Then
  214.             WebReq.Method = HttpParser.HTTPMethod.POST.ToString
  215.             WebReq.ContentType = "application/x-www-form-urlencoded"
  216.             WebReq.ContentLength = PostData.Length
  217.             Dim ReqStream As Stream = Nothing
  218.             Try
  219.                 ReqStream = WebReq.GetRequestStream()
  220.                 Dim PostByte As Byte() = Encoding.ASCII.GetBytes(PostData)
  221.                 ReqStream.Write(PostByte, 0, PostByte.Length)
  222.             Catch WebEx As Net.WebException
  223.                 Debug.WriteLine(WebEx.ToString & "Form GetRequestStream() Error !")
  224.             Finally
  225.                 If Not ReqStream Is Nothing Then ReqStream.Close()
  226.             End Try
  227.         Else
  228.             WebReq.Method = HttpParser.HTTPMethod.GET.ToString
  229.         End If
  230.         Return WebReq
  231.     End Function
  232. End Class