Дата публикации статьи: 13.10.2006 11:50

Простой однопоточный 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-сервера в самой минимальной конфигурации кода. Позволяет понять важные особенности сетевого программирования, создать рабочий экземпляр программы.