无法使用 ftplib 列出 FTP 目录 – 但 FTP 客户端工作
Cannot list FTP directory using ftplib – but FTP client works
我正在尝试连接到 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
抛出此错误:
Error:
[WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
我已经使用 FileZilla 测试了连接(运行ning 在同一台机器上),它工作正常。
这是 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
Status: Server sent passive reply with unroutable address
以上表示FTP服务器配置错误。它将其内部网络 IP 发送到外部网络(到客户端 – FileZilla 或 Python ftplib),在那里它是无效的。 FileZilla 可以检测到并自动回退到服务器的原始 IP 地址。
Python ftplib 不做这种检测。
您需要将 FTP 服务器修复为 return 正确的 IP 地址。
如果修复服务器不可行(这不是你的并且管理员不合作),你可以让 ftplib 忽略 returned(无效)IP 地址并使用原始地址代替覆盖 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
另一个解决方案可能是使用 IPv6。参见 Python 3.8.5 FTPS connection。
对于具有类似后果的不同问题,请参阅 。
我正在尝试连接到 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
抛出此错误:
Error:
[WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
我已经使用 FileZilla 测试了连接(运行ning 在同一台机器上),它工作正常。
这是 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
Status: Server sent passive reply with unroutable address
以上表示FTP服务器配置错误。它将其内部网络 IP 发送到外部网络(到客户端 – FileZilla 或 Python ftplib),在那里它是无效的。 FileZilla 可以检测到并自动回退到服务器的原始 IP 地址。
Python ftplib 不做这种检测。
您需要将 FTP 服务器修复为 return 正确的 IP 地址。
如果修复服务器不可行(这不是你的并且管理员不合作),你可以让 ftplib 忽略 returned(无效)IP 地址并使用原始地址代替覆盖 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
另一个解决方案可能是使用 IPv6。参见 Python 3.8.5 FTPS connection。
对于具有类似后果的不同问题,请参阅