Introduction
Web Proxy Server is HTTP proxy server written in VB.NET. It is
Multithreaded so many clients can access the web through this WebProxy Server.
Technology Used
System.NET, System.IO ,System.Threading and VB.NET
About the sample
This sample is a console application which acts as a multithreaded
WebProxy server.If you want to use any specific port to Listen then use that as
a command line parameter other wise default 8089 port is used. It is
multithreade Proxy Server that means multiple clients can communicate with Proxy
server.
Good luck and Enjoy VB.NET
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
Return
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)
Try
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
Console.WriteLine(address(0))
Dim sEndpoint As New IPEndPoint(address(0),
80)
Dim IPsocket As New Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp)
IPsocket.Connect(sEndpoint)
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;
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)
End While
IPsocket.Shutdown(SocketShutdown.Both)
IPsocket.Close()
sendmessage(clientSocket, strRetPage)
Catch exc2 As Exception
Console.WriteLine(exc2.ToString())
End Try
End Sub 'run
Private Function readmessage(ByVal ByteArray() As Byte, ByRef s As Socket, ByRef clientmessageAs [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
Public Overloads Shared Sub Main()
Main(System.Environment.GetCommandLineArgs())
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)
tcplistener.Start()
While True
Dim socket As Socket
= tcplistener.AcceptSocket()
Dim webproxy As New WebProxy2(socket)
Dim thread As New Thread(New ThreadStart(webproxy.run))
thread.Start()
End While
End Sub 'Main
End Class 'WebProxy2
End Namespace 'WebProxy2