IPConnection.UseProxy
Revision as of 11:20, 23 June 2023 by 1>Admin
UseProxy (Задает прокси сервер для соединения) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция настраивает прокси сервер для использования с данным соединением. Функция должна быть вызвана до фактического соединения с удаленной стороной на неактивном объекте, затем этот объект может использоваться совместно с функцией Connect. Для получения неактивного объекта соединения необходимо использовать функцию Create. Прокси сервер может быть использован как для прямых, так и для шифрованных соединений. Причем, SOCKS прокси работает для любых передач, а WEB прокси только для работы с Web-запросами (функции группы HTTP).
Синтаксис
IPConnection.UseProxy(<Адрес и порт прокси сервера (STRING)>,<Тип прокси сервера (STRING)>,<Имя пользователя прокси (STRING)>,<Пароль пользователя прокси (STRING)>,<Дополнительные параметры прокси (STRING)>)
Аргументы
<Адрес и порт прокси сервера (STRING)>
- Адрес прокси сервера задается в виде<Доменное имя сервера, адрес IPv4 или IPv6>[:<Номер порта>]
(примеры:127.0.0.1:8080
,webproxy.orgname.local:200
, <::1=8080
). При указании IP адреса (xxx.xxx.xxx.xxx
илиxxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
), можно использовать квадратные скобки [, ] для отделения IP адреса от номера порта. Номер порта можно указывать после знака : или знака =, для IPv6 адресов можно использовать только знак = или использовать квадратные скобки, как разделитель, так как : занят для указания элементов адреса (примеры:127.0.0.1=8080
,[::1]:2020
). Если номер порта в адресе не задан, используется порт 8080. Доменное имя будет автоматически закодировано в формат Punycode. (необязательный аргумент) Для некоторых видов прокси (к примеру, SFSERVER), этот аргумент не используется и должен быть пропущен.<Тип прокси сервера (STRING)>
- Указание на тип используемого прокси сервера. Возможны следующие значения:- SOCKS4 -- для данного типа прокси не может использоваться пароль (имя пользователя можно передать). Прокси сервер работает только с IPv4 и требует прямое указание на IP-адрес с которым будет происходить соединение. Если для идентификации удаленной стороны при соединении используется URL нотация, а не IP-адрес, система автоматически в момент соединения попытается ее превратить в IP и передать прокси. Если DNS-серверы в сети недоступны, соединение не будет выполнено.
- SOCKS4A -- является дополнением к SOCKS4, позволяющим передавать на прокси сервер не только IP-адрес соединения, но и URL. В случае, когда в сети недоступны DNS-серверы, прокси-соединение будет продолжать работать корректно.
- SOCKS5 -- является развитием SOCKS4, позволяющим задавать пароль и использовать IPv6.
- HTTP или HTTPS -- равнозначные указания на Web-прокси (HTTP прокси может использоваться для нешифрованных соединений и наоборот), который может использоваться для доступа к Web-страницам. При указании этого типа сервера, пятый аргумент функции задает метод аутентификации (см. ниже).
- SFSERVER -- позволяет перенаправить TCP соединение через сервер базы данных. Фактически пакеты соединения будут проходить по тому же каналу, по которому клиент программы соединен с сервером. Такое перенаправление может сильно упростить работу, если клиент используется для соединения с удаленным в интернете сервером. Практически, программа будет иметь доступ к ресурсам сети, которые доступны на машине сервера (таким образом, к примеру, можно получить доступ к серверу УТМ ЕГАИС, работая с клиентом из интернета и использовать тот же код, который использовался для работы с ним в локальной сети). При использовании такого типа прокси, нужно понимать:
- В данный момент разрешено только перенаправление нешифрованных соединений (планируется к реализации).
- Не рекомендуется использовать это перенаправление для передачи большого объема информации (это может замедлить работу клиента).
- В прокси соединении будет отказано, пока на сервере не будут разрешены адрес и порт, к которым происходит соединение. Для соответствующих установок сервера, см. статью Установки сервера.
- NGRC, NGRCCHANNEL -- позволяет перенаправить TCP соединение через сервер ngRC или сервер перенаправления (каналов), к которому в свою очередь соединен сервер ngRC, отвечающий по именованному каналу. Использование прокси такого рода удобно, так как серверы ngRC могут использоваться в организации для удаленного администрирования сети. Сервер каналов ngRC позволяет использовать удаленное администрирование в случае, когда удаленный сервер не имеет постоянного входящего адреса IP. С помощью этого типа прокси программа может получить доступ к сервисам, находящимся в сети, единственный способ подключения к которой -- сервер ngRC. Поддерживаются как шифрованные соединения (соединения с ключами), так и не шифрованные соединения, как для прямых серверов ngRC, так и для серверов каналов ngRC. В прокси соединении будет отказано, пока на ngRC сервере в его установках или в установках соединяющегося ключа не будут разрешены адрес и порт перенаправления, к которым происходит соединение. Для соответствующих установок сервера, см. статью Установки сервера. Для установки соединения с прямыми серверами ngRC, необходимо корректно заполнить первый (адрес и порт сервера ngRC), третий (бинарный ключ соединения, если соединение шифрованное) и четвертый (пароль сервера ngRC) аргументы. Для установки соединения с сервером каналов ngRC, необходимо корректно заполнить первый (адрес и порт сервера каналов ngRC), третий (бинарный ключ соединения, если соединение шифрованное), четвертый (пароль сервера ngRC)и пятый (пароль сервера каналов и имя канала) аргументы. См. описание соответствующих аргументов.
<Имя пользователя прокси (STRING)>
- (необязательный аргумент) В зависимости от типа прокси сервера, аргумент задает:- SOCKS4, SOCKS4A, SOCKS5, HTTP, HTTPS: имя пользователя прокси сервера.
- NGRC, NGRCCHANNEL: Если аргумент не задан или является пустой строкой, будет произведена попытка установки нешифрованного соединения с сервером ngRC (обычный порт сервера 37887), иначе задает ANSI строку с бинарным файлом ключа пользователя для установки шифрованного соединения (обычный порт сервера 37932).
- SFSERVER: не используется.
<Пароль пользователя прокси (STRING)>
- (необязательный аргумент) В зависимости от типа прокси сервера, аргумент задает:- SOCKS5, HTTP, HTTPS: пароль прокси сервера.
- NGRC, NGRCCHANNEL: пароль ngRC сервера.
- SOCKS4, SOCKS4A, SFSERVER: не используется.
<Дополнительные параметры прокси (STRING)>
- (необязательный аргумент) Задает дополнительные параметры в зависимости от типа прокси-сервера. Возможны следующие значения аргумента:- Для HTTP или HTTPS серверов аргумент задает метод аутентификации и может принимать значения:
- Basic -- (по умолчанию) простой метод аутентификации, передающий имя пользователя и пароль в заголовке HTTP пакета.
- Bearer -- (планируется к реализации) аутентификация с помощью особой строки (токена), полученного от прокси-сервера ранее и имеющего определенный срок жизни.
- OAuth -- (планируется к реализации) аутентификация, не передающая в заголовке прямым текстом имя пользователя и пароль, а только их хеш. Позволяет не опасаться, что пароль станет известен третьим лицам, если прокси сервер находится в Интернете.
- SCRAM-SHA-1 или SCRAM-SHA-256 -- (планируется к реализации) методы аутентификации, позволяющие использовать хеши, ключи и шифрование.
- Для SFSERVER прокси аргумент задает таймаут при передаче данных в миллисекундах. Если аргумент не задан, будет использовано время по умолчанию (обычно 10 минут). Соединение будет закрыто, если в течение указанного количества времени по нему не будет передана информацию в какую-либо сторону.
- Для NGRCCHANNEL прокси аргумент задает пароль сервера каналов и имя ngRC канала, к которому необходимо подключиться. Связка задается в виде:
[<Пароль сервера каналов>]<Знак 1><Имя канала для подключения>
. "Знак 1" представляет собой знак с кодом 1, который можно получить вызовомChr(1)
.
- Для HTTP или HTTPS серверов аргумент задает метод аутентификации и может принимать значения:
Примеры
//Измененный пример из статьи Connect показывает, как можно осуществить загрузку веб-страницы по ее адресу посредством SOCKS5 прокси сервера. //Для загрузки по протоколу https требуется указание пути к библиотекам OpenSSL или LibreSSL. Function LoadPage(URL) bHTTPs:=pos("https://",Lowercase(URL)); If pos("//",URL)>0 Then tearStr(URL,"//"); EndIf; СтрДоб:=URL; URL:=tearStr(СтрДоб,"/"); //URL может содержать название параграфа СтрДоб:=TearStr(СтрДоб,"#"); For i:=1 to 3 Do //Создаем неактивное соединение tcp:=IPConnection.Create(); //Задаем прокси сервер для текущего соединения tcp.UseProxy("192.168.1.1:8080","SOCKS5","User","test123"); if bHTTPs Then tcp.Connect(URL+?(Pos(":",URL)+Pos("=",URL)=0,"=443"),1); Else tcp.Connect(URL+?(Pos(":",URL)+Pos("=",URL)=0,"=80")); EndIf; if tcp.IsConnected Then Break; EndIf; EndDo; if not tcp.IsConnected Then Message("Could not connect: "+URL,"!"); Exit; EndIf; СтрДоб:="/"+СтрДоб; if bHTTPs then //tcp.InitEncryption("LibreSSL","C:\LibreSSL255\libtls-15.dll"); tcp.InitEncryption("OpenSSL","C:\OpenSSL111e\libssl-1_1.dll"); endif; tcp.HTTPSetOperation("GET "+СтрДоб+" HTTP/1.0"); tcp.HTTPSetHeaderField("Host",tcp.HTTPPunycodeEncode(URL)); tcp.HTTPSetHeaderField("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); tcp.HTTPSetHeaderField("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); tcp.HTTPSetHeaderField("Accept-Language","en"); tcp.HTTPSetHeaderField("Connection","Close"); Стр:=""; Try If tcp.HTTPSendAndReceive Then Стр:=tcp.HTTPBodyAsString; If _And(Pos(_NEWLINE,Стр)=0,Pos(Chr(10),Стр)>0) Then Стр:=Replace(Стр,Chr(10),_NEWLINE); EndIf; EndIf; Except Message("Could not load: "+URL,"!"); EndTry; Exit Стр; EndFunction s:=LoadPage("https://en.wikipedia.org/wiki/Main_Page"); Message(s);