2016-05-11 185 views
0

因此,我正在使用python 2.7中的ftplib連接到遠程FTP服務器(從另一臺服務器)以下載文件。當我執行RETR命令,它會拋出:FTP RETR命令拋出「沒有路由到主機」

 self.get_connection().retrbinary("RETR " + source, open(destination, 'wb').write) 
     File "/usr/lib/python2.7/ftplib.py", line 414, in retrbinary 
     conn = self.transfercmd(cmd, rest) 
     File "/usr/lib/python2.7/ftplib.py", line 376, in transfercmd 
     return self.ntransfercmd(cmd, rest)[0] 
     File "/usr/lib/python2.7/ftplib.py", line 335, in ntransfercmd 
     conn = socket.create_connection((host, port), self.timeout) 
     File "/usr/lib/python2.7/socket.py", line 575, in create_connection 
     raise err 
    socket.error: [Errno 113] No route to host 

現在我的代碼是在另一臺服務器工作正常,但在這其中,似乎不是。所以我嘗試ping x.x.x.x(它的工作原理),我用telnet x.x.x.x 21(它的工作原理),ftp x.x.x.x(它的工作原理!)。然後我去了防火牆(在兩臺服務器上),並允許所有在&出的流量,仍然得到相同的錯誤...

任何想法? (正如我所說的,這是第三個服務器上工作正常...它似乎login命令工作正常,但不是RETR)

編輯:

這是直接執行的命令的樣本FTP

enter image description here

回答

1

...連接到遠程FTP服務器

根據你的描述,你連接到遠程服務器,服務器顯示,它使用私有IP地址。我的猜測是,服務器知道的地址(10.0.0.8)不是用來連接服務器的地址,即服務器位於某個路由器的後面,並且已完成端口轉發或地址轉換。

不幸的是,當其中一方在路由器後面時,FTP並不真正起作用。當客戶端位於路由器(被動)或服務器(主動)後面時,您可以使用被動和主動模式。但是如果兩者都在路由器後面,你通常會丟失。

+0

謝謝Steffen的回答,不幸的是你是對的...因爲我想要做的只是一次性的事情,我做到了這一點。 。 – Oussama

0

你試圖連接到服務器FTPES?

試試這個:

from ftplib import FTP_TLS 
creds = [ 
    'host', 'username', 
    'password'] 
ftps = FTP_TLS(*creds) 
ftps.prot_p() 
ftps.retrlines('LIST') 

這應該列出目錄中存在的

可以比使用類似文件,

ftps.retrbinary("RETR " + 'test.csv' ,open('test.csv', 'wb').write) 

到從服務器檢索和寫入文件它在當地。

FTPLIB

+0

謝謝你的回答,但不是不是FTPES – Oussama

相關問題