我正在尝试连接到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引发此错误:
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
状态:服务器发送了具有不可路由地址的被动回复
以上表示FTP服务器配置错误。它将其内部网络IP发送到无效的外部网络(到客户端– FileZilla或Python ftplib)。FileZilla可以检测到该错误并自动回退到服务器的原始IP地址。
Python ftplib不执行这种检测。
您需要修复FTP服务器以返回正确的IP地址。
如果修复服务器不可行(这不是您的服务器,并且管理员不合作),则可以使ftplib忽略返回的(无效)IP地址,并使用原始地址来替代FTP.makepasv:
FTP.makepasv
class SmartFTP(FTP): def makepasv(self): invalidhost, port = super(SmartFTP, self).makepasv() return self.host, port ftp = SmartFTP(ftp_server) # the rest of the code is the same