Простой однопоточный Proxy на Visual Basic
Руководство для начинающих программистов
Автор: Валерий Шмелёв
[Скачать исходный код] [Обсудить на форуме]
Создадим стандартный проект Visual Basic. Разместим на форме элемент Label “IP этого компьютера”
Подключим новый компонент Winsock к проекту для работы с сетью по протоколу IP
- компонент Winsock
Разместим на форме 2 экземпляра Winsock. Winsock1 – для серверной части и Oflameron для клиентской части. Серверная часть принимает запросы от Web-броузера (например, Internet Explorer) по порту, например, 125 и передает их клиентской части. Клиентская часть Oflameron (Winsock2) по стандартному порту 80 передает запросы к реальному Web-серверу.
Напишем серверную часть Proxy
Private Sub Form_Load()
Form1.Visible = True
Do ''Серверную часть включаем на прослушивание порта ( Listen )
If Winsock1.State <> sckConnected And Winsock1.State <> sckListening _
Then 'Если еще нет соединения и порт
'не прослушивается
Beep
Winsock1.Close 'Закрываем связь
Winsock1.LocalPort = 125 ‘Номер порта для прослушивания
Winsock1.Listen 'начинаем прослушивать порт 125
End If
DoEvents
Loop ‘Повторять
End Sub
Обработка соединений
Private Sub Winsock1_ConnectionRequest(ByVal requestID _
As Long) 'Если есть запрос на соединение
Winsock1.Close 'Прекращаем прослушивать порт
Winsock1.Accept requestID 'Подсоединяем клиента
'(броузер) по номеру его запроса
End Sub
Объявим переменную
Dim ToServer As String 'Для отправки запроса от
'клиентской части Proxy к Web-серверу
Private Sub Winsock1_DataArrival(ByVal bytesTotal _
As Long) 'Обработка поступающих данных
'(запросов от Web-броузера)
Dim ServerData As String 'Объявим переменную для принятых данных ServerData
Winsock1.GetData ServerData 'Принять данные в переменную
ToServer = ServerData ‘’Переписать запрос в переменную для отправки к Web-серверу
Oflameron_SendToWebserver ''Отправить запрос к Web-серверу
End Sub
Строка «ToServer = ServerData» - не обязательна, имеет смысл, если нужно обрабатывать данные – писать в лог, фильтровать, делать поиск данных в запросах и т.д.
Пишем клиентскую часть Proxy
(для работы с реальным Web-сервером. Подключение к Web-серверу, отправка запросов и прием данных)
Объявим переменные
Dim Webport 'Номер порта
Dim Data As String 'Для получения данных от Web-сервера
Private Sub Oflameron_SendToWebserver() 'Подключиться к Web-серверу
Oflameron.Close 'закрываем связь
Oflameron.RemoteHost = "10.62.182.54" 'Адрес Web-сервера или его IP адрес
Oflameron.RemotePort = 80 'Номер порта. Стандартно для HTTP
Oflameron.Connect 'подключаемся к Web-серверу
Webport = Oflameron.RemotePort 'Запомнить номер порта (не обязательная строка)
End Sub
Процедура Oflameron_Connect выполняет действия как только будет установлено соединение с Web-сервером
Private Sub Oflameron_Connect() 'Отправить запрос к Web-серверу
If Oflameron.State <> sckConnected Then Exit Sub ''Проверить. Если нет подключения, то выйти из процедуры
Oflameron.SendData ToServer 'Отправить строку запроса на Web-сервер
End Sub
Процедура получения данных от Web-сервера
Private Sub Oflameron_DataArrival(ByVal bytesTotal _
As Long) 'Будет вызываться, когда
' придут какие-то данные
'от Web-сервера
Text1.Text = Oflameron.State
If Oflameron.State <> sckClosing Then
Oflameron.GetData Data 'будет содержать данные,
'полученные от Web-сервера
Winsock1.SendData Data 'Отправить полученные данные
'от Web сервера на Web-броузер
End If
End Sub
- поставили номер порта 125 для серверной части Proxy
Поменяем настройки Proxy и порта в Internet Explorer,
чтобы запросы отправлялись к нашему Proxy
Настройка LAN
Где - адрес нашей Proxy (IP-адрес Вашего компьютера) и порт 125, который будет прослушивать серверная часть Вашего Proxy
Загрузим в броузер Internet Explorer страницу с вебсервера
Proxy-сервер работает – пересылает запросы и полученные данные.
Это работающий пример очень простого однопоточного Proxy-сервера в самой минимальной конфигурации кода. Позволяет понять важные особенности сетевого программирования, создать рабочий экземпляр программы.