Страница: 1 | 2 |
Вопрос: InternetOpen и Socks5
Добавлено: 08.09.05 18:24
Автор вопроса: sYstEmiZer | ICQ: 280647023
Как правильно организовать коннект к 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? Если было уже тыкните ссылкой, пожалуйста.
Ответы
Всего ответов: 18
Номер ответа: 1
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #1
Добавлено: 09.09.05 23:25
наверно проще подыскать готоывй пример, думаю такие найдутся...
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 10.09.05 00:00
C Сокетами работает ws2_32.dll, а InternetConnect это wininet.dll, которая с сокетами не работает, и получается что конектится на прямую
Номер ответа: 3
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #3
Добавлено: 10.09.05 10:55
ха-ха, вы тут без меня (пока у меня с инетом траблы), вижу, насоветуете.
Как это "не работает с сокетами?" wininet.dll юзает сокеты вовсю.
Чтобы пустить такую штуку через сокс сервер надо:
1. Поискать что-то по теме InternetSetOption и подобных апишек (точно имена не помню).
2. Делать как SocksCap - перехватывать апишки и перенаправлять на сокс сервер
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 10.09.05 14:21
1) И где там в InternetSetOption указать соект?
2) "и перенаправлять на сокс сервер"... и покажи ж как создать сокс сервер не используя ws2_32.dll?
Номер ответа: 5
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #5
Добавлено: 10.09.05 18:43
HACKER, ты, кажется, путаешь сокс и сокет
Номер ответа: 6
Автор ответа:
«UL.eXe»
ICQ: 197.895.916.247
Вопросов: 72
Ответов: 540
Профиль | | #6
Добавлено: 11.09.05 22:42
Поддерживаю HACKER'a - сокс помоему без ws2_32.dll никак не создать.
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 11.09.05 23:36
А, тьфу... сокс, Sharp хорошо что заметил, а то я бы тут долго всем доказывал про сокеты Но честно говоря я сколько не смотрел на АПИ в wininet.dll ненашёл как сокс указать там... Просто параметры для стандартного коннекта, ну хотя может я так смотрел А может был и частично прав, что чисто на wininet.dll коннект через сокс не сделашь...
Номер ответа: 8
Автор ответа:
sYstEmiZer
ICQ: 280647023
Вопросов: 16
Ответов: 45
Профиль | | #8
Добавлено: 12.09.05 09:33
Цитирую MSDN:
Естественно сам wininet не могет подключиться к SOCKS, а wsock32.dll ему поможет. Нарыл тут кусок кода на авторизацию:
hOpenHandle = InternetOpen("ProgramName", INTERNET_OPEN_TYPE_PRECONFIG,
NULL, NULL, 0);
hConnectHandle = InternetConnect(hOpenHandle, ServerURLCharString,
INTERNET_INVALID_PORT_NUMBER, NULL,
NULL, INTERNET_SERVICE_HTTP,0,0);
hResourceHandle = HttpOpenRequest(hConnectHandle, "GET",
 ServerRoot + ServerStartup).ReturnCharPtr(),
NULL, NULL, NULL,
INTERNET_FLAG_KEEP_CONNECTION, 0);
InternetSetOption(hResourceHandle, INTERNET_OPTION_PROXY_USERNAME,
strUsername, len(strUsername)+1);
InternetSetOption(hResourceHandle, INTERNET_OPTION_PROXY_PASSWORD,
strPassword, len(strPassword)+1);
HttpSendRequest(hResourceHandle, NULL, 0, NULL, 0);
HttpQueryInfo(hResourceHandle, HTTP_QUERY_FLAG_NUMBER |
HTTP_QUERY_STATUS_CODE, &dwStatus, &dwStatusSize, NULL);
InternetCloseHandle(hOpenHandle);
Проблема только, что это авторизация по протоколу http, но говорят, что авторизация с проксей проходит как раз по http. Какие мысли? Будет работать?
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 12.09.05 11:50
2 sYstEmiZer аааа....!!!! я слепой!!!! Ну не вижу я в этом шмоте кода что-то чтобы указывало на какой либо сокс!!! Разбуйте мне глаза!
Номер ответа: 10
Автор ответа:
sYstEmiZer
ICQ: 280647023
Вопросов: 16
Ответов: 45
Профиль | | #10
Добавлено: 12.09.05 12:45
Вот эта фраза правда очень смущает:
Номер ответа: 11
Автор ответа:
sYstEmiZer
ICQ: 280647023
Вопросов: 16
Ответов: 45
Профиль | | #11
Добавлено: 12.09.05 12:47
2 HACKER
ServerURLCharString = "socks=ftp.trulala.ru:1080"
Номер ответа: 12
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #12
Добавлено: 12.09.05 14:14
та сам то пробовал, или так... по теории вероятности с точки зрения тенденции субкоординации и координации в наш век абстракции и деградации, теоритически немного косо на половину кое как это наверно должно чуть-чуть работать...
)))))))))))))
о загрузил, аж самому смешно стало!
Номер ответа: 13
Автор ответа:
sYstEmiZer
ICQ: 280647023
Вопросов: 16
Ответов: 45
Профиль | | #13
Добавлено: 12.09.05 15:23
2 HACKER:
А ты чего прямо отсюда загрузил - да это я так для примера выложил )).
Я только что пробовал этот способ, но не совсем понял как подцепить авторизованную FTP сессию? Вся эта WinInet-авторизация на проксе проходит по протоколу http. Организовать ftp connect у меня не получается. Может я вообще, что не так делаю. На всякий случай привожу код:
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 обнуляется с ошибкой 87:Internet connection error.
Дальше чего делать ваще не знаю. Есть мысли?
Номер ответа: 14
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #14
Добавлено: 12.09.05 18:24
Я вам скажу по секерту, евсли вы впишите в ИЕ работу через сокс - работать он не будет через сокс. Косяк? х. з.
Если вы пропустите ИЕ через SocksCap - все будет ок
Номер ответа: 15
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #15
Добавлено: 12.09.05 23:21
DaSharm, продолжай...