Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: barsik.newmail.ru
 Профиль | | #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-сайт: dasharm.com
 Профиль | | #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-сайт: sharpc.livejournal.com
 Профиль | | #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:
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.

Естественно сам 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
Вот эта фраза правда очень смущает:
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.

Ответить

Номер ответа: 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 = InternetConnect(hOpen, sServer, INTERNET_INVALID_PORT_NUMBER, sUser, sPassword, INTERNET_SERVICE_FTP Or INTERNET_FLAG_KEEP_CONNECTION, dwSeman, 0)

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

Ответить

Номер ответа: 14
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #14
Добавлено: 12.09.05 18:24

Я вам скажу по секерту, евсли вы впишите в ИЕ работу через сокс - работать он не будет через сокс. Косяк? х. з.

Если вы пропустите ИЕ через SocksCap - все будет ок

Ответить

Номер ответа: 15
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #15 Добавлено: 12.09.05 23:21
DaSharm, продолжай...

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам