Click here to Skip to main content
15,745,335 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Imports System '
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.IO
Imports System.Threading
Namespace WebProxy2
    Class WebProxy2
        Private clientSocket As Socket
        Private read() As [Byte] = New Byte(1024) {}
        Private Buffer As [Byte]() = Nothing
        Private ASCII As Encoding = Encoding.ASCII
        Private HTTP_VERSION As String = "HTTP/1.0"
        Private CRLF As String = ControlChars.Cr + ControlChars.Lf
        Private RecvBytes(4096) As [Byte]
        Public Sub New(ByVal socket As Socket)
            Me.clientSocket = socket
        End Sub 'New
        Public Sub run()
            Dim clientmessage As [String] = " "
            Dim sURL As [String] = " "
            Dim bytes As Integer = readmessage(read, clientSocket, clientmessage)
            If bytes = 0 Then
            End If
            Dim index1 As Integer = clientmessage.IndexOf(" "c)
            Dim index2 As Integer = clientmessage.IndexOf(" "c, index1 + 1)
            If index1 = -1 Or index2 = -1 Then
                Throw New IOException
            End If
            Console.WriteLine("Connecting to Site: {0}", clientmessage.Substring(index1 + 1, index2 - index1))
            Console.WriteLine("Connection from {0}", clientSocket.RemoteEndPoint)
            Dim part1 As String = clientmessage.Substring(index1 + 1, index2 - index1)
            Dim index3 As Integer = part1.IndexOf("/"c, index1 + 8)
            Dim index4 As Integer = part1.IndexOf(" "c, index1 + 8)
            Dim index5 As Integer = index4 - index3
            sURL = part1.Substring(index1 + 4, part1.Length - index5 - 8)

                Dim IPHost As IPHostEntry = Dns.Resolve(sURL)
                Console.WriteLine("Request resolved: ", IPHost.HostName)
                Dim aliases As String() = IPHost.Aliases
                Dim address As IPAddress() = IPHost.AddressList
                Dim sEndpoint As New IPEndPoint(address(0), 80)
                Dim IPsocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
                If IPsocket.Connected Then
                    Console.WriteLine("Socket connect OK")
                End If
                Dim [GET] As String = clientmessage
                Dim ByteGet As [Byte]() = ASCII.GetBytes([GET])
                IPsocket.Send(ByteGet, ByteGet.Length, 0)
                Dim rBytes As Int32 = IPsocket.Receive(RecvBytes, RecvBytes.Length, 0)
                Console.WriteLine("Recieved {0}", +rBytes)
                'Buffer = RecvBytes;
                ByteGet = RecvBytes
                Dim strRetPage As [String] = Nothing
                'strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, rBytes)
                While rBytes > 0
                    rBytes = IPsocket.Receive(RecvBytes, RecvBytes.Length, 0)
                    ' strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, rBytes)
                    Dim i As Int32 = UBound(ByteGet)
                    ReDim Preserve ByteGet(UBound(ByteGet) + rBytes + 1)
                    For x As Long = 1 To rBytes
                        ByteGet(i + x) = RecvBytes(x - 1)
                End While
                strRetPage = strRetPage + ASCII.GetString(ByteGet, 0, ByteGet.Length)
                clientSocket.Send(ByteGet, ByteGet.Length, 0)
                ' sendmessage(clientSocket, strRetPage)

            Catch exc2 As Exception
            End Try
        End Sub 'run
        Private Function readmessage(ByVal ByteArray() As Byte, ByRef s As Socket, ByRef clientmessage As String) As Integer
            Dim bytes As Integer = s.Receive(ByteArray, 1024, 0)
            Dim messagefromclient As String = Encoding.ASCII.GetString(ByteArray)
            clientmessage = CType(messagefromclient, [String])
            Return bytes
        End Function 'readmessage
        Private Sub sendmessage(ByVal s As Socket, ByVal message As String)
            Buffer = New [Byte](message.Length - 1) {}
            Dim length As Integer = ASCII.GetBytes(message, 0, message.Length, Buffer, 0)
            s.Send(Buffer, length, 0)
        End Sub 'sendmessage
        'Entry point which delegates to C-style main Private Function
        Overloads Sub Main()
        End Sub
        Overloads Shared Sub Main(ByVal args() As String)
            Const port As Integer = 8889
            Dim tcplistener As New TcpListener(port)
            Console.WriteLine("Listening on port {0}", +port)
            While True
                Dim socket As Socket = tcplistener.AcceptSocket()
                Dim webproxy As New WebProxy2(socket)
                Dim thread As New Thread(New ThreadStart(AddressOf
            End While
        End Sub 'Main
    End Class 'WebProxy2
End Namespace 'WebProxy2

If i configure firefox or IE to the proxy server I do receive the header no problem.
Sample Header
GET HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-gsarcade-launch, application/, application/, application/msword, application/xaml+xml, application/, application/x-ms-xbap, application/x-ms-application, application/x-silverlight, */* Accept-Language: en-us User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; InfoPath.2; .NET CLR 3.5.30729) Accept-Encoding: gzip, deflate Proxy-Connection: Keep-Alive Host: Cookie: PREF=ID=2cc48986d0a30551:U=4583f9a4276fb2df:FF=0:TM=1297940975:LM=1297941095:S=k0i-eurczYyMJF2q; NID=44=t7EdDRwCJHYI-iYWLo4NeRJ3DtFmv7wZ4yeUmEdemRP7X83I-kRJd6Ah3uf2rw-et_c_H5zYDd7vJuApaX0vs2K_jz30l7uQZPfmTdOeTvKpi67lXrbkiTP2DIOKeYew

My question is how do I send this back to the browser and display the page?
Updated 31-Mar-23 20:09pm

1 solution

Well, you're creating a new socket when you connect to it, and passing that new socket to Webproxy2 here:

Dim socket As Socket = tcplistener.AcceptSocket()
Dim webproxy As New WebProxy2(socket)

Then, in webProxy2 it's passed to the private object clientSocket... Right? So to send that back to the browser, you would just convert it to a byte array and do a clientSocket.send(yourByteArray).

...and I see you're already doing that ( clientSocket.Send(ByteGet, ByteGet.Length, 0) ). If you're getting nothing in the browser, then I guess I would create a web client and connect to google so I could see the difference in the response. Maybe then you'll be able to see why it's not displaying in your browser.

Hope this helps...

- Pete
Share this answer
ravi kumar86 19-Apr-13 7:16am    
thanks your suggestion is valuable , I have solve this problem

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900