InternetOpen и Socks5

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sYstEmiZer
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 18.03.2004 (Чт) 13:06
Откуда: Москва

InternetOpen и Socks5

Сообщение sYstEmiZer » 08.09.2005 (Чт) 17:26

Как правильно организовать коннект к FTP через socks5. Никак не получается - все время коннектится напрямую! Киньте свежую мысль!

Коннекчусь так:
Код: Выделить всё
hOpen = InternetOpen("eDIY FTP Client", INTERNET_OPEN_TYPE_PROXY, Trim(ProxyName) + ":" + CStr(ProxyPort), vbNullString, 0)
hConnection = InternetConnect(hOpen, sServer, INTERNET_INVALID_PORT_NUMBER, sUser, sPassword, INTERNET_SERVICE_FTP, dwSeman, 0)


Может где-то надо явно указать Socks? Если было уже тыкните ссылкой, пожалуйста.[/code]
С переподвыподвертом!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.09.2005 (Чт) 20:40

А разве IE (в смысле wininet) поддерживает SOCKS5? :-?
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.09.2005 (Пт) 0:19

FleX_2004, а при чём здесь релей-то?? :-?
Изображение

sYstEmiZer
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 18.03.2004 (Чт) 13:06
Откуда: Москва

Сообщение sYstEmiZer » 09.09.2005 (Пт) 8:34

2 tyomitch:

Да поддерживает: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internetopen.asp

2 FleX_2004:

Там не совсем то, что нужно. Хотелось бы посмотреть на исходники работающего ftp клиента, который может соединяться с FTP через прокси с авторизацией (API Wininet). Такая функция есть у некоторых менеджеров закачки и файловых менеджеров (Total Commander, Far). [/url]
С переподвыподвертом!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.09.2005 (Вс) 21:19

sYstEmiZer писал(а):2 tyomitch:

Да поддерживает: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internetopen.asp

И где там написано, что SOCKS5 поддерживается? :shock:
Изображение

sYstEmiZer
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 18.03.2004 (Чт) 13:06
Откуда: Москва

Поддерживается.

Сообщение sYstEmiZer » 12.09.2005 (Пн) 8:47

tyomitch
The WinINet functions recognize only CERN type proxies (HTTP only) and the TIS FTP gateway (FTP only). If Microsoft Internet Explorer is installed, these functions also support SOCKS proxies.

Скорее всего используется wsock32.dll
Здесь есть пример коннекта через socks4 правда на foxpro, но смысл понятен. Подозреваю, что для socks5 будет также. Проверю - напишу.
Проблема, что везде примеры авторизации по http, а мне нужно FTP . Но судя по осуждению тут до прокси все идет по http, а потом уже от прокси до ftp-сервера по ftp. Какие мысли?
С переподвыподвертом!

sYstEmiZer
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 18.03.2004 (Чт) 13:06
Откуда: Москва

Дополнение

Сообщение sYstEmiZer » 12.09.2005 (Пн) 11:43

Очень правда смущает вот эта фраза:
The WinINet functions support server and proxy authentication for http sessions. Authentication of gopher and ftp servers must be handled by the InternetConnect function. Currently, FTP gateway authentication is not supported.
С переподвыподвертом!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Поддерживается.

Сообщение tyomitch » 12.09.2005 (Пн) 20:32

sYstEmiZer писал(а):tyomitch
The WinINet functions recognize only CERN type proxies (HTTP only) and the TIS FTP gateway (FTP only). If Microsoft Internet Explorer is installed, these functions also support SOCKS proxies.

Скорее всего используется wsock32.dll
Здесь есть пример коннекта через socks4 правда на foxpro, но смысл понятен. Подозреваю, что для socks5 будет также. Проверю - напишу.
Проблема, что везде примеры авторизации по http, а мне нужно FTP . Но судя по осуждению тут до прокси все идет по http, а потом уже от прокси до ftp-сервера по ftp. Какие мысли?

Мысли:
1. IE поддерживает только SOCKS4 (не SOCKS5). Я проверял.
2. Совершенно непонятно, откуда берётся вывод "если работает через SOCKS4, то и через SOCKS5 как-то так же". Это два совершенно несовместимых протокола.
3. И при чём здесь вообще SOCKS, если у тебя не сокс-прокси, а фтп-гейт?
4. Бывает много разных видов проксей. В частности, до прокси всё может идти по HTTP, может по FTP, а может по SOCKS.
У тебя-то какой прокси? Или ты все сразу хочешь поддержать?
Изображение

sYstEmiZer
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 18.03.2004 (Чт) 13:06
Откуда: Москва

Сообщение sYstEmiZer » 13.09.2005 (Вт) 9:50

tyomitch
Ситуация такая: пишу компоненту для 1С на VB. Компонента работает с FTP, используя синтаксис 1С.
Для начала хотелось бы ее научить работать двумя способами через прокси с авторизацией:
1) по протоколу SOCKS5
2) через HTTP-прокси с поддержкой FTP.

Почему именно такими способами? Да потому что есть тестовый FTP сервер (спасибо хорошим людям), который поддерживает именно эти варианты подключений и есть Total Commander на котором все это уже работает и можно проверить работоспособность сервера если что.

Так вот, сырой осадок: чего-то не фига не работает. Прога либо вообще не коннектится, либо коннектится напрямую (проверяю по логам). На всякий случай привожу примерный код программы:

Код: Выделить всё
Option Explicit

Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetSetOption Lib "wininet.dll" Alias "InternetSetOptionA" (ByVal hInternet As Long, nOption As Long, lpBuffer As String, nBufferLength As Long) As Integer
Private Declare Function HttpOpenRequest Lib "wininet.dll" Alias "HttpOpenRequestA" (ByVal hHttpSession As Long, ByVal sVerb As String, ByVal sObjectName As String, ByVal sVersion As String, ByVal sReferer As String, ByVal something As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function HttpSendRequest Lib "wininet.dll" Alias "HttpSendRequestA" (ByVal hHttpRequest As Long, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal sOptional As String, ByVal lOptionalLength As Long) As Integer
Private Declare Function HttpQueryInfo Lib "wininet.dll" Alias "HttpQueryInfoA" (ByVal hHttpRequest As Long, ByVal lInfoLevel As Long, ByRef sBuffer As Any, ByRef lBufferLength As Long, ByRef lIndex As Long) As Integer

Private Const INTERNET_FLAG_KEEP_CONNECTION = &H400000
Private Const HTTP_QUERY_FLAG_NUMBER = &H20000000
Private Const HTTP_QUERY_STATUS_CODE = 19
Private Const INTERNET_OPTION_PROXY_USERNAME = 43
Private Const INTERNET_OPTION_PROXY_PASSWORD = 44
Private Const INTERNET_INVALID_PORT_NUMBER = 0
Private Const INTERNET_SERVICE_FTP = 1
Private Const INTERNET_SERVICE_HTTP = 3


Private hOpen As Long
Private hConnection As Long
Private hRes As Long
Private dwSeman As Long
Private sServer$, sUser$, sPassword$, dwStatus$
Private Sub Form_Load()

sServer = "ftp.tralala.ru"
sUser = "user"
sPassword = "password"
'инициализируемся
hOpen = InternetOpen("FTP Client", 3, "socks=" & sServer & ":1080", vbNullString, 0)
'Открываем сессию http
hConnection = InternetConnect(hOpen, sServer, INTERNET_INVALID_PORT_NUMBER, sUser, sPassword, INTERNET_SERVICE_HTTP, dwSeman, 0)
'Создаем хэндл запроса
hRes = HttpOpenRequest(hConnection, "GET", "/sysftp/index.txt", vbNullString, vbNullString, 0, INTERNET_FLAG_KEEP_CONNECTION, 0)
'отправляем юзера прокси
InternetSetOption hRes, INTERNET_OPTION_PROXY_USERNAME, sUser, Len(sUser) + 1
'отправляем пароль прокси
InternetSetOption hRes, INTERNET_OPTION_PROXY_PASSWORD, sPassword, Len(sPassword) + 1
'отправляем запрос
HttpSendRequest hRes, vbNullString, 0, vbNullString, 0
'вытаскиваем из него инфу
HttpQueryInfo hRes, HTTP_QUERY_FLAG_NUMBER Or HTTP_QUERY_STATUS_CODE, dwStatus, 4, 0

End Sub


А что собственно дальше???
Должно быть что-то типа такого:
Код: Выделить всё
hConnection = InternetConnect(hOpen, sServer, INTERNET_INVALID_PORT_NUMBER, sUser, sPassword, INTERNET_SERVICE_FTP Or INTERNET_FLAG_KEEP_CONNECTION, dwSeman, 0)


но у меня hConnection обнуляется с ошибкой 87:Internet connection error.
Дальше чего делать ваще не знаю. Есть мысли?
С переподвыподвертом!

sYstEmiZer
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 18.03.2004 (Чт) 13:06
Откуда: Москва

Нашел кое-чего

Сообщение sYstEmiZer » 13.09.2005 (Вт) 10:27

Тут есть пример работы Wininet по SOCKS5, правда на C, по-моему. Кто решится перевести на VB? )

Посмотрел код - такое впечатление, что используется связка WinInet с wsock32. Неужели чисто через wininet нельзя?
С переподвыподвертом!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.09.2005 (Вт) 18:33

А чисто через Винсок не проще ли будет? ;-)
Пример SOCKS5-прокси на VB через Винсок я на этом форуме уже выкладывал.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 62

    TopList