•  

ГлавнаяIndyЧастые вопросы по Indy → FTP-клиент работа через SOCKS-прокси

Создано: 17.05.2014 18:12:36 · Исправлено: 17.05.2014 18:12:36 · Прочтений: 1263

Здравствуй, сообщество.

Имею на руках нехорошую проблему. Есть своего рода FTP-клиент (CodeGear Delphi 2007, Indy 10). Стоит задача реализации работы через SOCKS-прокси (в частности - MS ISA Server с отключённым MS Firewall Client). Пробовал реализацию, указанную в документации (TIdFTPClient.IOHandler -> TIdIOHandlerStack.TransparentProxy -> TIdSocksInfo), однако при верно указанных параметрах аутентификации (SOCKS5) и любом типе аутентификации (saUsernamePassword, saNoAuthentication) при попытке подключения получаю:

Project raised exception class EIdSocksAuthMethodError with message Invalid socks authentication method..

Под рукой нет другого окружения, но подозреваю, что Squid скажет то же самое. Все хосты рабочие.

Возможно, есть другой метод работы с SOCKS5, или более гибкий компонент? Очень не хочется лезть в низкоуровневую работу с SOCKS5.
Попробуй скачать Overbyte ICSv7 - простые, на качественные компоненты для Delphi по сетевому взаимодействию. http://www.overbyte.be
Может помогут...
Как сказано в RFC 1928 (http://www.faqs.org/rfcs/rfc1928.html), методы аутентификации бывают такие:

o X00 NO AUTHENTICATION REQUIRED
o X01 GSSAPI
o X02 USERNAME/PASSWORD
o X03 to X7F IANA ASSIGNED
o X80 to XFE RESERVED FOR PRIVATE METHODS
o XFF NO ACCEPTABLE METHODS

Какой у вас выбран?
И кстати, на ISA сервере должно быть установлено расширение для работы с SOCKS5
Что касается ICS - пробовал, но безуспешно, по крайней мере - в данной ситуации.

По поводу ISA - вот тут я ой как прокололся; только сейчас выяснил, что SOCKS5 выключен - соответственно, только NTLM.

С другой стороны, решением могло бы быть использование HTTP Proxy with FTP support: в частности, с Total Commander такая вещь работает. Однако в IdFTP.pas наблюдаем вот такую картину:

case ProxySettings.ProxyType of
  ...
  fpcmHttpProxyWithFtp :
    begin
{GET ftp://XXX:[email protected]/ HTTP/1.0
Host: indy.nevrona.com
User-Agent: Mozilla/4.0 (compatible; Wincmd; Windows NT)
Proxy-Authorization: Basic B64EncodedUserPass==
Connection: close}
      raise EIdSocksServerCommandError.Create(RSSocksServerCommandError);
    end;//fpcmHttpProxyWithFtp


То есть данный режим, по сути, не реализован (хотя и обещался стать таковым в десятой версии). А на Кристиана Гислера мало надежды. В таком случае буду ковырять Winsock.