線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2963
推到 Plurk!
推到 Facebook!

IdFtp connectㄉ問題.......

尚未結案
whalala
一般會員


發表:10
回覆:6
積分:3
註冊:2002-05-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-06 13:12:04 IP:211.23.xxx.xxx 未訂閱
請問用 IdFtp connect時出現502 SYST command not implemented ㄉ錯誤訊息,原因為何?如何排除? 但我用 NMFtp connect同一ㄍServer,卻無此錯誤。 謝謝各位不吝指教...........
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-08 16:41:45 IP:218.163.xxx.xxx 未訂閱
502 Command not implemented.  命令未被執行    網海無涯,學無止境!
whalala
一般會員


發表:10
回覆:6
積分:3
註冊:2002-05-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-09 11:07:08 IP:211.23.xxx.xxx 未訂閱
再請教版主,為何會出現這ㄍ錯誤, 我用NMFtp連時就無此訊息,是否該調整什麼屬性,還是FTP Server 設定ㄉ問題。 謝謝........
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-09 12:03:51 IP:218.163.xxx.xxx 未訂閱
參考以下文章:    公司代理伺服器使用Wingate。我用CuteFTP在設置防火牆以後就可以聯接上FTP伺服器,然而在NMFTP中設置以後卻連不上。 在CuteFTP中防火牆的類型為User@站點。 NMFTP好像沒有。只有FTuser,FTopen和FTSite。 請問該如何解決。用別的元件也行。只要能解決問題,如果用API最好有源碼。 ---------------------------------------------------------------    1.Wingate有透明網關的功能,你只需要再你的機器上把IP設置裡的預設網關設為Wingate機器的IP就可以與外面透明通訊,不需要設置任何代理。 2.TNMFTP性能奇差無比(抗斷線,重連接能力極差),我推薦你使用Indy套間(就是以前的WinShoe)裡的FTP元件,Dephi6里已經包含了這一套VCL,聽說BCB6里也有了,但我還沒見過BCB6,耳聽不一定為實,你如果是BCB5,就去下一套好了,他好像是免費的,它應該是功能最全、功能也最強大的網路通訊VCL了,同時它還有完整的幫助檔案,很好用。 ---------------------------------------------------------------    你的Wingate版本是多少,既然設了網關,就不需要設代理,網關是透明的,其實就是一個一端口的路由器。 ---------------------------------------------------------------    好,就衝你這400分,我回家再把Indy再裝上研究、研究,但我一直沒搞清楚SOCKET3和SOCKET5的代理是什麼意思,有什麼區別,你清楚嗎? ---------------------------------------------------------------    我想原因在於FTP協議的問題. FTP要過防火牆有點特別...  FTP協議有主動方式與被動方式, 主要是建立資料傳輸連接的發起方不同.    NMFTP元件沒有考慮那麼多. ---------------------------------------------------------------    >>我看了聯上伺服器了,但是在List時就出錯了。 >>'425 can't bulder data connection'    從這點可以看出,不管怎麼樣,能夠連接出去的.只是不能讓FTP伺服器 向客戶端再主動建一個連接而已. 在這種情況下,為什麼還要設代理方式呢 ?    關於這個,同意JamesJiang(歡樂英雄) WINGATE好像是軟路由方式,而不是代理方式... 你確定CUTEFTP裡面代理設置生效的嗎?    ---------------------------------------------------------------    我用IndyFTP可以的,要自己加寫Http Proxy程式碼,就是要擴展Indy,我的FTP:http://lyhome.3322.net, Link: http://lyhome.3322.net/lysoft/lyftp.exe 試一試,要是可以的,就說明我改寫成功了,那個東東5萬行程式碼的 ---------------------------------------------------------------    IndyFTP解決方法:一個TidFTP,一個TIOHandlerSocket,一個TsocksInfo, 通過屬性連接起來,就是IdFTp1.IOhandler:=idIOhanlderSocket1; idIohandlerSocket1.SocksInfo:=idSocksInfo1的意思,不必寫程式碼的, 設置好SocksInfo的版本為Socks5,Host為代理的IP或Domain Name,Port為代理的端口,就可以讓IndyFTp通過協議為Socks5的代理伺服器(防火牆)連接了,當然別忘記設置好IdFTp的ProxySettings的ProxyType哦,還有其他的,關於User@站點的是要根據你的代理伺服器(防火牆)的支持協議而定,一般有好幾種的:    Open FTP-Host:FTP-Port SITE FTP-Host FTP-Port SITE FTP-Host:FTP-Port SITE FTP-User@FTP-Host FTP_port SITE FTP-User@FTP-Host:FTP_port USER FTP-User@FTP-Host FTP-Port USER FTP-User@FTP-Host:FTP-Port USER FTP-User@FTP-Host Proxy-User USER Proxy-User@FTP-Host CheckPoint Firewall:USER FTP-User@Proxy-User@FTP-Host / PASS pass@firewallpass    Indy只支持其中的幾種,其他的自己添加。 看不懂?那是通過SendCmd的底層命令發送聯接指令給代理伺服器,由代理伺服器解釋以後,建立到外部FTP伺服器的連接,因為你是不能直接連接到外部FTP的,記得就是這時一定要用Passive模式,因為你在防火牆之後,只有你可以主動訪問外部,而外部不可以主動訪問你,關於HTTP Proxy是怎樣呢?也是差不多,就是複雜些:建立HTTP連接,通過SendCmd的底層命令發送Connect FTP:Port HTTP/1.0User-Agent: Mozilla/4.0 (compatible; LY FTP Explorer)Proxy-Connection: Keep-Alive等Http信息,是回車 換行,不管通過那一種連接,連接建立以後直接發送FTP命令就可以了,注意List和上傳/下載(stor/retr)的時候會建立新的連接,這時候也要用上述方法建立,否者無法成功建立新的資料端口,SendCMD是Indy的通用命令,用於發送原始的TCP資料(ASCII碼的),從這裡下載Indy9.0.10: http://www.nevrona.com/indy/ 還有就是Indy本身就有很多的bug,我搞了半年才修正了不少,這個最新的也有不少噢,很對不起我不能提供修正版和完整的Proxy解決辦法的源程式碼給各位,請大家見涼。
下面是Indy9.0.10修正版的片段程式碼:    // added by Liu Yang 2002.2.1
fpcmSiteHostPort: // Send command SITE (FTP-Host FTP-Port)
begin
 if (Length(ProxySettings.UserName)>0) then 
  begin
   if SendCmd('USER '   ProxySettings.UserName, [230, 331]) = 331 then 
     begin
       SendCmd('PASS '   ProxySettings.Password, 230);
     end; // 230是允許的FTP協議返回程式碼,
         //詳細的看RFC 959 http://www.rfc-editor.org/rfc/rfc959.txt
  end;//proxy login
 SendCmd('SITE ' FHost ' ' IntToStr(FPort));//? Server Reply? 220?
 if SendCmd('USER '   FUserName, [230, 331]) = 331 then 
  begin
   SendCmd('PASS '   FPassword, 230);
  end;
end; //fpcmSiteHostPort    .............    fpcmUserPass: //USER user@firewalluser@hostname / PASS pass@firewallpass
begin // check point firewall / added port by Liu Yang 2002.2.2
 if SendCmd(Format('USER %s@%s@%s %d',[FUserName,ProxySettings.UserName,FHost,FPort]), [230, 331])=331 then 
  begin
   if Length(ProxySettings.Password)>0 then begin
    SendCmd('PASS ' FPassword '@' ProxySettings.Password, 230);
  end
 else
  begin
   SendCmd('PASS ' FPassword, 230);
  end;//if @
 end;
end;//fpcmUserPass
...........
procedure TIdFTP.Connect(AAutoLogin: boolean = True);
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;
  finally
   FHost:=TmpHost;
   FPort:=TmpPort;
  end;//tryf
  // fixed by Liu Yang 2002.2.1
  if ProxySettings.ProxyType=fpcmNone then
   begin // non-proxy connection
    GetResponse([220]);
    Greeting.Assign(LastCmdResult);
   end 
  else 
   InputBuffer.Clear; // clear buffer for using proxy to connect
if AAutoLogin then begin
  Login;
  DoAfterLogin;
  SendTransferType;
  // OpenVMS 7.1 replies with 200 instead of 215 - What does the RFC say about this?
  // Fix by Liu Yang 2002.6.9 for support Cisco FTP Server (It will reply 502)
  if SendCmd('SYST', [200, 215, 500, 502]) = 500 then 
   begin
    FSystemDesc := RSFTPUnknownHost;
   end 
  else 
   begin
    FSystemDesc := LastCmdResult.Text[0];
   end;
  DoStatus(ftpReady);
 end;
 except
   Disconnect;
   raise;
 end;
end;
網海無涯,學無止境! 發表人 - qoo1234 於 2004/02/09 12:04:58
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-26 13:52:08 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-04-28 6:12:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!