Imports System.Threading
Imports System.Net.Sockets
Imports System.Net
Imports System.Text
Module Module1
Private attempts As Integer = 0
Private MAXFILESIZE As Integer = 20 * 1024 * 1024
'MB
Sub Main(ByVal args As String())
Dim t As New Thread(New ThreadStart(AddressOf AcceptSockets))
t.Start()
End Sub
Private Sub AcceptSockets()
Dim flag As Integer = 0
Try
Dim listener As New TcpListener(IPAddress.Any, 9876)
listener.Start()
While True
'Accepts connection to IE to get GET command
Dim sock As Socket = listener.AcceptSocket()
sock.DontFragment = True
Dim fromIE As [Byte]() = Nothing
fromIE = New [Byte](MAXFILESIZE - 1) {}
flag = 1
'Recievies the GET command from IE
Dim length As Integer = sock.Receive(fromIE, 0, MAXFILESIZE, SocketFlags.None)
Dim [GET] As [Byte]() = New [Byte](length - 1) {}
For i As Integer = 0 To length - 1
[GET](i) = fromIE(i)
Next
flag = 2
'Translates Bytes -> string
Dim input As [String] = Encoding.ASCII.GetString([GET])
flag = 3
Dim outServer As New TcpClient()
'Extracts destination server from GET command
Dim ServerIP As [String] = getReceivingIP(input)
flag = 4
'Connects to Destination Server
outServer.Connect(ServerIP, 80)
flag = 5
'Retrieves Stream and writes entire
Dim stream As NetworkStream = outServer.GetStream()
stream.Write(fromIE, 0, length)
flag = 6
'Recieve response containing webpage and pictures from
'Destination server
Dim fromServer As Byte() = Nothing
fromServer = New Byte(MAXFILESIZE - 1) {}
If stream.CanRead Then
length = stream.Read(fromServer, 0, fromServer.Length)
flag = 7
sock.Send(fromServer, length, SocketFlags.None)
End If
attempts = 0
sock.Close()
End While
Catch ex As Exception
'Connection Errors
Console.WriteLine(ex.ToString())
Console.WriteLine()
Console.WriteLine("Last Successful Flag at: " & flag)
'3 consecutive failed attempts before stopping connection.
If System.Threading.Interlocked.Increment(attempts) <= 3 Then
Console.WriteLine("Attempts: " & attempts)
Console.WriteLine()
AcceptSockets()
End If
'Infinite loop so any errors remain
'On screen to be read
While True
End While
End Try
End Sub
Private Function getReceivingIP(ByVal input As [String]) As [String]
'Example of Input:
'GET http://www.google.com/ HTTP/1.1
'Accept: image/gif ....
'.
'.
'.
'Host: www.google.com
'...
'This returns www.google.com from host line
'Find beginning of host in host line
Dim begin As Integer = input.IndexOf(vbCr & vbLf & "Host: ") + 8
'find ending of host
Dim [end] As Integer = input.IndexOf(vbCr & vbLf, begin)
Dim length As Integer = [end] - begin
'get host
Dim url As [String] = input.Substring(begin, length)
Console.WriteLine(url)
Console.WriteLine()
'return host
Return url
End Function
End Module