无法使用ftplib列出FTP目录-但是FTP客户端可以使用

时间:2019-04-23 15:33:45

标签: python ftp ftplib

我正在尝试连接到FTP,但是我无法运行任何命令。

ftp_server = ip
ftp_username = username
ftp_password = password

ftp = ftplib.FTP(ftp_server)
ftp.login(ftp_username, ftp_password)
'230 Logged on'

ftp.nlst()

ftp.nlst抛出此错误:

  

错误:
  [WinError 10060]连接尝试失败,因为一段时间后连接方未正确响应,或者由于连接的主机未能响应,建立的连接失败


我已经使用FileZilla(在同一台计算机上运行)测试了连接,并且工作正常。

这是FileZilla日志:

Status: Connection established, waiting for welcome message...
Status: Insecure server, it does not support FTP over TLS.
Status: Logged in Status: Retrieving directory listing...
Status: Server sent passive reply with unroutable address. Using server address instead.
Status: Directory listing of "/" successful

1 个答案:

答案 0 :(得分:1)

  

状态:服务器发送了无法路由的被动回复

以上表示FTP服务器配置错误。它将内部网络IP发送到外部网络(无效)到外部网络(客户端– FileZilla或Python ftplib)。 FileZilla可以检测到该错误并自动回退到服务器的原始IP地址。

Python ftplib不执行这种检测。

您需要修复FTP服务器以返回正确的IP地址。


如果修复服务器不可行(这不是您的服务器,并且管理员不合作),则可以使ftplib忽略返回的(无效)IP地址并使用原始地址,而不是覆盖 FTP.makepasv

  SmartFTP(FTP)类:
    def makepasv():
        invalidhost,端口=超级(SmartFTP,自身).makepasv()
        返回self.host,端口

ftp = SmartFTP(ftp_server)

#其余代码相同