HttpParser.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.Text
  19. Public Class HttpParser
  20. #Region "Enums"
  21.     ''' <summary>
  22.     ''' HTTP Client Methods
  23.     ''' </summary>
  24.     ''' <remarks></remarks>
  25.     Public Enum HTTPMethod
  26.         [GET]
  27.         POST
  28.         CONNECT
  29.         HEAD
  30.         TRACE
  31.         PUT
  32.         DELETE
  33.         OPTIONS
  34.         LINK
  35.         UNLINK
  36.         PATCH
  37.     End Enum
  38. #End Region
  39. #Region "Properties"
  40.     Private _Method As HTTPMethod
  41.     ''' <summary>
  42.     ''' HTTP Method
  43.     ''' </summary>
  44.     ''' <value></value>
  45.     ''' <returns></returns>
  46.     ''' <remarks></remarks>
  47.     Public Property Method() As HTTPMethod
  48.         Get
  49.             Return _Method
  50.         End Get
  51.         Set(ByVal value As HTTPMethod)
  52.             _Method = value
  53.         End Set
  54.     End Property
  55.     Private _Version As String
  56.     ''' <summary>
  57.     ''' HTTP Version
  58.     ''' </summary>
  59.     ''' <value></value>
  60.     ''' <returns></returns>
  61.     ''' <remarks></remarks>
  62.     Public Property Version() As String
  63.         Get
  64.             Return _Version
  65.         End Get
  66.         Set(ByVal value As String)
  67.             _Version = value
  68.         End Set
  69.     End Property
  70.     Private _ParseAsResponsense As Boolean
  71.     ''' <summary>
  72.     ''' Parse as HTTP Response 
  73.     ''' </summary>
  74.     ''' <value></value>
  75.     ''' <returns></returns>
  76.     ''' <remarks></remarks>
  77.     Public Property ParseAsResponse() As Boolean
  78.         Get
  79.             Return _ParseAsResponsense
  80.         End Get
  81.         Set(ByVal value As Boolean)
  82.             _ParseAsResponsense = value
  83.         End Set
  84.     End Property
  85.     Private _HttpResponse As HttpResponse
  86.     ''' <summary>
  87.     ''' HTTP Response
  88.     ''' </summary>
  89.     ''' <value></value>
  90.     ''' <returns></returns>
  91.     ''' <remarks></remarks>
  92.     Public Property HttpResponse() As HttpResponse
  93.         Get
  94.             If _HttpResponse Is Nothing Then _HttpResponse = New HttpResponse()
  95.             Return _HttpResponse
  96.         End Get
  97.         Set(ByVal value As HttpResponse)
  98.             _HttpResponse = value
  99.         End Set
  100.     End Property
  101.     Private _Url As Uri
  102.     ''' <summary>
  103.     ''' Requested Path
  104.     ''' </summary>
  105.     ''' <value></value>
  106.     ''' <returns></returns>
  107.     ''' <remarks></remarks>
  108.     Public Property Url() As Uri
  109.         Get
  110.             Return _Url
  111.         End Get
  112.         Set(ByVal value As Uri)
  113.             _Url = value
  114.         End Set
  115.     End Property
  116. #End Region
  117. #Region "Constructor"
  118.     ''' <summary>
  119.     ''' New HTTP Request Parser
  120.     ''' </summary>
  121.     ''' <param name="request">Request</param>
  122.     ''' <remarks></remarks>
  123.     Public Sub New(ByVal request As String)
  124.         ParseRequest(request)
  125.     End Sub
  126.     ''' <summary>
  127.     ''' New HTTP Response Parser
  128.     ''' </summary>
  129.     ''' <param name="request">Request</param>
  130.     ''' <remarks></remarks>
  131.     Public Sub New(ByVal request As String, ByVal body As Byte())
  132.         Me.ParseAsResponse = True
  133.         Me.HttpResponse.Body = body
  134.         ParseRequest(request)
  135.     End Sub
  136.     ''' <summary>
  137.     ''' New HTTP Request from buffer
  138.     ''' </summary>
  139.     ''' <param name="request">HTTP Request Buffer</param>
  140.     ''' <param name="readData">Bytes to read</param>
  141.     ''' <remarks></remarks>
  142.     Public Sub New(ByVal request() As Byte, ByVal readData As Integer)
  143.         Dim RequestString As String = Encoding.ASCII.GetString(request, 0, readData)
  144.         ParseRequest(RequestString)
  145.     End Sub
  146.     ''' <summary>
  147.     ''' Parse HTTP Request
  148.     ''' </summary>
  149.     ''' <param name="request"></param>
  150.     ''' <remarks></remarks>
  151.     Private Sub ParseRequest(ByVal request As String)
  152.         ParseQuery(request)
  153.     End Sub
  154. #End Region
  155.     Private _RequestBody As String = String.Empty
  156.     ''' <summary>
  157.     ''' Request Body (generally post)
  158.     ''' </summary>
  159.     ''' <value></value>
  160.     ''' <returns></returns>
  161.     ''' <remarks></remarks>
  162.     Public Property RequestBody() As String
  163.         Get
  164.             Return _RequestBody
  165.         End Get
  166.         Set(ByVal value As String)
  167.             _RequestBody = value
  168.         End Set
  169.     End Property
  170.     ''' <summary>
  171.     ''' Parse HTTP Request or Response
  172.     ''' </summary>
  173.     ''' <param name="request"></param>
  174.     ''' <remarks></remarks>
  175.     Private Sub ParseQuery(ByVal request As String)
  176.         If Not Me.ParseAsResponse Then
  177.             Dim BodyPos As Integer = request.IndexOf(vbNewLine & vbNewLine)
  178.             If BodyPos > -1 Then
  179.                 Me.RequestBody = request.Substring(BodyPos + 4, request.Length - (BodyPos + 4))
  180.             End If
  181.         End If
  182.         request = request.Replace(vbNewLine, Chr(13))
  183.         Dim Lines() As String = request.Split(Chr(13))
  184.         Dim Cnt, Ret As Integer
  185.         If Lines.Length > 0 Then
  186.             Ret = Lines(0).IndexOf(" ")
  187.             If (Ret > 0) Then
  188.                 Dim FirstPart As String = Lines(0).Substring(0, Ret)
  189.                 If Me.ParseAsResponse Then
  190.                     If Not Integer.TryParse(FirstPart, Me.HttpResponse.Status) Then
  191.                         'Status Parse Error !
  192.                         Debug.WriteLine("ERR : Status not integer!")
  193.                         Me.HttpResponse.Status = 999
  194.                     End If
  195.                     Me.HttpResponse.StatusText = Lines(0).Substring(Ret).Trim()
  196.                 Else
  197.                     Me.Method = CType(System.Enum.Parse(GetType(HTTPMethod), FirstPart), HTTPMethod)
  198.                 End If
  199.                 Lines(0) = Lines(0).Substring(Ret).Trim()
  200.             End If
  201.             'If Parsing HTTP Request, Get requested URI
  202.             If Not Me.ParseAsResponse Then
  203.                 'Parse the Http Version and the Requested Path
  204.                 Dim Path As String
  205.                 Ret = Lines(0).LastIndexOf(" ")
  206.                 If (Ret > 0) Then
  207.                     Me.Version = Lines(0).Substring(Ret).Trim()
  208.                     Path = Lines(0).Substring(0, Ret)
  209.                 Else
  210.                     Path = Lines(0)
  211.                 End If
  212.                 CreateUri(Path)
  213.             End If
  214.         End If
  215.         'Generate Headers
  216.         For Cnt = 1 To Lines.Length - 1
  217.             Ret = Lines(Cnt).IndexOf(":")
  218.             If (Ret > 0 AndAlso Ret < Lines(Cnt).Length - 1) Then
  219.                 Try
  220.                     Dim HeaderName, HeaderValue As String
  221.                     HeaderName = Lines(Cnt).Substring(0, Ret)
  222.                     HeaderValue = Lines(Cnt).Substring(Ret + 1).Trim()
  223.                     Me.HttpResponse.AddHeader(HeaderName, HeaderValue)
  224.                 Catch ex As Exception
  225.                     Debug.WriteLine("Bad header response...")
  226.                 End Try
  227.             End If
  228.         Next Cnt
  229.     End Sub
  230.     ''' <summary>
  231.     ''' Create Uri
  232.     ''' </summary>
  233.     ''' <remarks></remarks>
  234.     Private Sub CreateUri(ByVal Path As String)
  235.         If (Path.Length >= 7 AndAlso Path.Substring(0, 7).ToLower().Equals("http://")) Then
  236.             Try
  237.                 Url = New Uri(Path)
  238.             Catch ex As Exception
  239.                 Console.WriteLine("Uri Error :" & ex.ToString)
  240.             End Try
  241.         End If
  242.     End Sub
  243.     ''' <summary>
  244.     ''' Decode Binary from XSS Shell Server
  245.     ''' </summary>
  246.     ''' <param name="input">Encoded string to decode</param>
  247.     ''' <returns></returns>
  248.     ''' <remarks></remarks>
  249.     Public Shared Function DecodeBinary(ByVal input As String) As Byte()
  250.         If (input.Length Mod 2) <> 0 Then
  251.             'Wrong Binary Data
  252.             Return Nothing
  253.         End If
  254.         Dim RetBuffer(CInt(input.Length / 2) - 1) As Byte
  255.         For i As Integer = 0 To RetBuffer.Length - 1
  256.             RetBuffer(i) = Convert.ToByte(Integer.Parse(input.Chars((i * 2)) & input.Chars((i * 2) + 1), Globalization.NumberStyles.HexNumber))
  257.         Next i
  258.         Return RetBuffer
  259.     End Function
  260. End Class