Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.09;
Скачать: CL | DM;

Вниз

Proxy & TIdFTP   Найти похожие ветки 

 
workbench   (2008-09-29 09:35) [0]

Здравстуйте. У меня компонент TIdFTP c proxy работать отказывается (без proxy работает), вот здесь:

http://www.indyproject.org/KB/index.html?tidftpsocksproxy.htm

нашёл возможное решение, приведу что там написано:

"For Indy 9.0

1. Create an IOHandler such as TIdIOHandlerSocket or TIdSSLIOHandlerSocket and assign the TIdFTP.IOHandler property this.  

2. Set the TIdFTP.Passive property to true.

3. Create a TIdSocksInfo object and assign it to the IOHandler"s SocksInfo property.

4. Set the TIdSocksInfo properties as required. "

Сделал всё как написано, однако всё равно не работает, до того как это попробовал вылетала ошибка 10065 "No route to host", а после так это написал попытка соединения (FTP.Connect(true, timeout)) просто слетает по таймауту(((

Подскажите, плз, что не так делаю (как заюзать proxy "в связке" c TIdFTP)?


 
Anatoly Podgoretsky ©   (2008-09-29 09:43) [1]

> workbench  (29.09.2008 9:35:00)  [0]

У тебя или нет Интернет на компьютере, или сеть не работает, или ты указал неверный хост


 
workbench   (2008-09-29 09:46) [2]


> Anatoly Podgoretsky


Да с сетью-то проблем нет (я на форуме сижу и Indy юзаю с одного и того же компа), когда я не использую proxy - всё работает нормально


 
brother ©   (2008-09-29 09:46) [3]

пингани прокси с своей тачки, что скажет, как в браузере настроено?


 
brother ©   (2008-09-29 09:47) [4]

> когда я не использую proxy - всё работает нормально

что тогда за прокси у Вас, и зачем нужно юзать именно его, если инет есть?


 
workbench   (2008-09-29 09:51) [5]


> brother


Да я пинговал, всё нормально, 4 запроса - 4 ответа
В браузере (IE) настроено через proxy соот-но
Прога будет стоять на разных компах (в разных фирмах), где-то proxy есть, а где-то соот-но и нет, здесь я вот протестить пытаюсь и вот застрял капитально(((


 
Сергей М. ©   (2008-09-29 10:11) [6]


> где-то proxy есть


Даже если он есть, он не обязан быть именно socks proxy


 
workbench   (2008-09-29 10:21) [7]


> Сергей М.


Дык, я вот пробовал то что тут:

http://www.indyproject.org/KB/index.html?howdoiuseaproxywithindy.htm

написано, всё равно не хочет, сторонний FTP-клиент если proxy прописать нормально работает(((


 
Сергей М. ©   (2008-09-29 10:31) [8]


> сторонний FTP-клиент если proxy прописать нормально работает


Именно через тот же socks proxy ?
Или все же http proxy ?


 
workbench   (2008-09-29 10:39) [9]


> Сергей М. ©


второе, я указываю адресс\порт и способ соединения: "HTTP-proxy с поддержкой FTP"


 
Сергей М. ©   (2008-09-29 10:44) [10]


> workbench   (29.09.08 10:39) [9]
>
>


Ну так а причем здесь тогда пример для socks-прокси, если сторонний клиент на самом деле использует не socks-, а http-прокси ?


 
workbench   (2008-09-29 10:59) [11]

пример такой потому что я уже просто стал перебирать варианты (что пример некорректный в данном случае - согласен, извините), однако же, "сути" это не меняет, Indyк TIdFTP у меня упорно не хочет работать через прокси (св-во TIdFTP.ProxyType перепробовал во всех вариантах)...

вот ещё пара слов о том что было сделано для тестирования с прокси:
в настройках TCP/IP во вкладке общие был убран "Основной шлюз", только это. Это может хотя бы подтолкнуть к каким-либо намёткам? Хотя вряд ли... IE, сторонние FTP работают нормально.

Для "чистоты эксперимента" создал новый appl с одним единственным TIdFTP, прописал все параметры - опять нихт, либо ошибка 10065 (если TIdFTP.ProxyTypy), либо "Read Timeout" (это на TIdFTP.Connect если TIdFTP.ProxyTypy другой), а может ли меня сам proxy "не пускать"?


 
brother ©   (2008-09-29 11:09) [12]

> а может ли меня сам proxy "не пускать"?

запросто, если юзвер плохой)))


 
Сергей М. ©   (2008-09-29 11:16) [13]


> в настройках TCP/IP во вкладке общие был убран "Основной
> шлюз"


Шлюз имеет отношение к сетевому уровню, а не к прикладному.

Если целевой хост (в дан.случае хост, на котором активен интересующий прокси-сервис) находится в другой подсети, то указание шлюза обязательно.


> я уже просто стал перебирать варианты


А не надо их перебирать.

Ты же сам сказал, что сторонние клиенты успешно работают при опции "HTTP-proxy с поддержкой FTP", значит и твой клиент тоже должен использовать ProxyType = fpcmHttpProxyWithFtp.

Другой вопрос, что в 9-ке это м.б. не реализовано (проверяй сам - сравнивай с 10-кой)

В 10-ке в исходниках IdFTP имеется вот такой комментарий:

fpcmHttpProxyWithFtp, //HTTP Proxy with FTP support. Will be supported in Indy 10


 
workbench   (2008-09-29 11:27) [14]


> brother


а почему плохой, чем собсно отличается ftp-клиент Indy от какого-либо другого? или шутите?

вот я попробовал исп-ть WinInet, написал следущее:

var
 hSession, hConnect: HINTERNET;
 FtpDir, FTPFileName: string;
begin
 hSession := nil;
 hSession := InternetOpen(nil,
                                    INTERNET_OPEN_TYPE_PRECONFIG or  
                                    INTERNET_OPEN_TYPE_PROXY,
                                    nil{PChar("192.168.0.254")}, nil, 0);
 if not Assigned(hSession) then
   begin
   showmessage("InternetOpen error: " + inttostr(GetLastError));
   Exit
   end;

 hConnect := nil;
 hConnect := InternetConnect(hSession,
                                          PChar("www.farmk.nnov.ru"),
                                          INTERNET_DEFAULT_FTP_PORT,
                                          PChar("..."), PChar("..."),
                                          INTERNET_SERVICE_FTP,  
                                          INTERNET_FLAG_PASSIVE, 0);
 if not Assigned(hConnect) then
   begin
   showmessage("InternetConnect error: " + inttostr(GetLastError));
   Exit
   end;

в InternetOpen пробовал разные комбинации:

dwAccessType
только INTERNET_OPEN_TYPE_PRECONFIG,
только INTERNET_OPEN_TYPE_PROXY,
потом оба флага ставил

lpszProxy:
так пробовал 192.168.0.254 и так 192.168.0.254:8080

lpszProxyBypass не трогал, стояло nil

И вот что получается:
InternetOpen нормально проходит
InternetConnect всё время выдаёт ошибку - 12029, в инете нашёл только вот это про неё:

The "ERROR_INTERNET_CANNOT_CONNECT" error occurs when you send Web requests by using NTLM authentication in Windows 2000 (http://support.microsoft.com/kb/331862)

Винда у меня хоть и старенькая (Win2000), но SP стоит 4-й

Мастера (<с надеждой>), это о чём-то новом говорит?


 
workbench   (2008-09-29 11:33) [15]


> Сергей М.


У меня версия Indy 9.0.14, комментарий такой же стоит... то бишь получается через Indy не получится?


 
brother ©   (2008-09-29 11:34) [16]

> запросто, если юзвер плохой)))

если логин плохой)


 
Сергей М. ©   (2008-09-29 11:47) [17]


> получается через Indy не получится?
>


хз..

Но комментарий этот индейцы не просто же так влупили ..

Правда, из него, не понятно, то ли режим этот буде реализован не раньше чем в 10-ке, то ли он уже реализован и в 10-ке планируется его поддержка..

Попробуй отррассировать пошагово логику коннекта в этом режиме  - исходники индейские открыты ведь ..


 
workbench   (2008-09-29 11:59) [18]


> Сергей М.


попробовал - "замирает" на GetResponse([220]), соот-но если поставить ReadTimeout, то он "по нему" и "срабатывает".

procedure TIdFTP.Connect(AAutoLogin: boolean = True;
 const ATimeout: Integer = IdTimeoutDefault);
var
 TmpHost: String;
 TmpPort: Integer;
begin
 try
   //APR 011216: proxy support
   TmpHost:=FHost;
   TmpPort:=FPort;
   try
     if (ProxySettings.ProxyType > fpcmNone) and (Length(ProxySettings.Host) > 0) then begin
       FHost := ProxySettings.Host;
       FPort := ProxySettings.Port;
     end;
     inherited Connect(ATimeout); // проходит вроде нормально
   finally
     FHost := TmpHost;
     FPort := TmpPort;
   end;//tryf
   GetResponse([220]); // вот здесь и останавливается


 
Сергей М. ©   (2008-09-29 12:16) [19]


> workbench   (29.09.08 11:59) [18]


Прокси локальный ?


 
workbench   (2008-09-29 12:25) [20]

Да, локальный (SQUID)


 
workbench   (2008-09-29 12:26) [21]

ок, допустим даже если Indy отпадает, надо искать чем заменить, например, WinInet, но с ним тоже есть проблемы (я в [14] приводил), а они ещё более непонятны


 
Сергей М. ©   (2008-09-29 12:43) [22]


> локальный (SQUID)


http://www.google.ru/search?complete=1&hl=ru&newwindow=1&client=firefox-a&rls=org.mozilla%3Aru%3Aofficial&hs=4nt&q=SQUID+ftp+proxy&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=&aq=f&oq=


 
brother ©   (2008-09-29 12:46) [23]

> > локальный (SQUID)

любой squid не работает с чужим ftp...


 
workbench   (2008-09-29 13:02) [24]

Так а др клиенты как тогда работают, например вот в TotallComander`е есть FTP-клиент, пишу адресс\порт + Тип подключения: Http-proxy with FTP support... и всё прекрасно работает: подключение, закачка; ощущение такое что истина где-то вот рядом прям(((


 
workbench   (2008-09-29 13:17) [25]

Угу, спасибо за ссылки, вот типа краткое резюме:

"ftp over http proxy, который принимает запросы посредством
протокола http, преобразует их в команды ftp протокола, получает с удаленного ftp сервера файл и отдает его клиенту по http, производя при этом необходимые преобразования.

Достоинством подобного подхода является то, что работа с ftp серверами через proxy осуществляется абсолютно также, как и с http серверами. Главный недостаток очевиден - использовать здесь обычный ftp клиент невозможно."

Вот... а дальше как у Герцена: "Что делать?". 10-ю Indy юзать? А WinInet такой возможностью работы с FTP обладает? Посоветуйте, плиз, как быть, что лучше использовать?


 
Сергей М. ©   (2008-09-29 14:09) [26]


> WinInet такой возможностью работы с FTP обладает?

http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_20693225.html


 
workbench   (2008-09-29 17:56) [27]

Ок, наконец то получилось "законнектится" к ftp через proxy и скачать оттуда файлик, получилось следующее:

hSession :=InternetOpen(nil, INTERNET_OPEN_TYPE_PROXY,
                                 "192.168.0.254:8080", nil, 0);
if hSession <> nil then
 begin
 hConnect :=InternetOpenUrl(hInet,
   PChar("ftp://login:pswd@farmk.nnov.ru/price/303/price.dat"),nil,0,0,0);
 if hConnect <> nil then
   begin
   InternetReadFile(hConnect, @Buffer, SizeOf(Buffer), BytesCountRead);
   FileStr :=string(buffer);
   memo.Lines.Add(FileStr);
   memo.Lines.SaveToFile("...");
   end;
 end;

Однако возникла другая проблема - при использовании TIdFTP всё необходимое я получал посредством вызова что ни говори удобных функций Indy, здесь же необходимо вручную "выкорчёвывать" (парсить) нужную инфу из строки (я ещё не брался, но чувствую это будет полная ж...).

И вот собсно вопрос: не горожу ли я таким способом "огород" (я имею ввиду такой способ получения файлов с ftp), а если нет: может у кого-нить есть парсер на это дело или знает где взять? Подскажите, плиз...


 
Сергей М. ©   (2008-09-30 08:22) [28]


> workbench   (29.09.08 17:56) [27]


Можешь попытать еще ftp-клиента в составе пакета ICS - он тоже поддерживает работу через http- и socks4/5-прокси.


 
Anatoly Podgoretsky ©   (2008-09-30 11:33) [29]


> при использовании TIdFTP всё необходимое я получал посредством
> вызова что ни говори удобных функций Indy,

Дурдом, срочно за учебник по Паскалю, что бы узнать, что такое процедуры и функции.


 
workbench   (2008-09-30 12:20) [30]


> Anatoly Podgoretsky


?


> Сергей М.


Вот поставил Indy10

Создал новый appl, на форме только компонент TIdFTP, вот его св-ва:
 ProxySettings.Host = 192.168.0.254 (наш proxy)
 ProxySettings.Port = 8080 (порт proxy)
 ProxySettings.ProxyType = fpcmHttpProxyWithFtp (да и остальные пробовал)
 Passive = true

пишу:
 try
    idFTP.Connect
 except
    showmessage("conn err")
 end

"Замирает" на idFTP.Connect, т.е. опять-таки не хочет коннектиться через proxy(((


 
Сергей М. ©   (2008-09-30 12:25) [31]


> Вот поставил Indy10


А ты поставил его как положено, без отсебячины ?


 
workbench   (2008-09-30 12:44) [32]


> Сергей М.


строго следуя инструкции с indyproject, ошибок при установке никаких не вылетало

ICS тоже пробовал... и с ним не получается

Если бы не Total со своим работающим ftp-клиентом то подумал бы на "местные" проблемы с сетью, а так даже уже и не знаю, вариантов других уже просто не вижу(((


 
Сергей М. ©   (2008-09-30 13:00) [33]

Попробуй организовать любой локальный прокси, который выполнял бы тривиальный портмаппинг и протоколировал бы инф.обмен между клиентами и целевым прокси-сервером.

Настрой ТС и своего клиента на этот лок.прокси, а целевой прокси укажи для локального как внешний каскадируемый.

Сравни результаты протоколирования - многое сразу прояснится.


 
workbench   (2008-09-30 13:05) [34]


> многое сразу прояснится


судя по тому сколько мне понятно из вашего поста, даже если сделаю - проясниться немного)))

впрочем, щас попробую какие-нить логи с этого злосчастного proxy выцепить...


 
Сергей М. ©   (2008-09-30 13:21) [35]


> проясниться немного


Зато фрагменты рез-тов протоколирования ты сможешь выставить сюда на публичное обозрение/анализ/рекомендации


 
workbench   (2008-09-30 17:34) [36]

Уфф... eрунда какая-то выходит, если делать запрос на закачку файла с ftp, то в loge этого самого proxy на запрос со своего ip я вижу:

1222772132.301    329 192.168.0.209 TCP_MISS/200 45601 GET ftp://ezakaz@farmk.nnov.ru/price/303/price.dat - DIRECT/212.92.130.154 text/plain

...и больше ничего, а запросов когда я юзаю TIdFTP или ICS я не вижу вообще (может они просто в log не попали)

В инете не нашёл ничего путного про работу TC-FTP, пробовал вот ещё один FTP - FileZilla FTP Client, он тож чёт не пашет через proxy... 2 дня сижу, а решения нет(((


 
Сергей М. ©   (2008-09-30 17:37) [37]


> в loge этого самого proxy


Ты про какой прокси говоришь, про свой собственный локальный ?


 
workbench   (2008-09-30 17:48) [38]

да, тот самый о котором речь шла в самом начале


 
Anatoly Podgoretsky ©   (2008-09-30 19:24) [39]


> Ты про какой прокси говоришь, про свой собственный локальный
> ?

Уже давно ничего не понятно, впрочем и в начале тоже.


 
Сергей М. ©   (2008-10-01 08:13) [40]


> тот самый о котором речь шла в самом начале


А [33] я для кого писал, для Пушкина ?)

И уж если ты привел лог целевого прокси, то почему всего один ?



Страницы: 1 2 вся ветка

Текущий архив: 2008.11.09;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.012 c
15-1221481634
desc
2008-09-15 16:27
2008.11.09
О открытии сайта


3-1209101225
дучф_ч
2008-04-25 09:27
2008.11.09
при удалении полей таблицы ее размер не уменьшается


2-1222780898
vegarulez
2008-09-30 17:21
2008.11.09
Select * where date BETWEEN date1 and date2 from БД ACCESS


15-1221501740
Virgo_Style
2008-09-15 22:02
2008.11.09
Имеет место быть распродажа слонов от Acronis


6-1195190006
Сергей Колесник
2007-11-16 08:13
2008.11.09
Пример работы с WinPCap на дельфях