已回答 -
FTPES - Session Reuse Required
我可以连接到FTP服务器,但是当我尝试查看目录时,它会向我发送此错误。
522 SSL连接失败;需要会话重用:请参阅vsftpd.conf手册页中的require_ssl_reuse选项。
我研究了它,我发现有一些解决方案,但我无法理解如何实现它们。
from ftplib import FTP_TLS
ftp = FTP_TLS()
ftp.set_debuglevel(2)
ftp.connect('host')
ftp.login('user', 'pass')
ftp.prot_p()
ftp.set_pasv(True)
ftp.retrlines('LIST')
这是我的代码然后我尝试使用这种方法,但我认为它不适用于我,因为当我进入被动模式时,它会将我的公共IP发回给我。
from ftplib import FTP_TLS
# replace original makepasv function with one which always returns
# the peerhost of the control connections as peerhost for the data
# connection
_old_makepasv = FTP_TLS.makepasv
def _new_makepasv(self):
host,port = _old_makepasv(self)
host = self.sock.getpeername()[0]
return host,port
FTP_TLS.makepasv = _new_makepasv
ftp = FTP_TLS(ipAddress)
ftp.login(...)
ftp.nlst()
这是我的调试。
*get* '220 (vsFTPd 2.2.2)\n'
*resp* '220 (vsFTPd 2.2.2)'
*cmd* 'AUTH TLS'
*put* 'AUTH TLS\r\n'
*get* '234 Proceed with negotiation.\n'
*resp* '234 Proceed with negotiation.'
*cmd* 'USER '
*put* 'USER \r\n'
*get* '331 Please specify the password.\n'
*resp* '331 Please specify the password.'
*cmd* 'PASS '
*put* 'PASS \r\n'
*get* '230 Login successful.\n'
*resp* '230 Login successful.'
*cmd* 'PBSZ 0'
*put* 'PBSZ 0\r\n'
*get* '200 PBSZ set to 0.\n'
*resp* '200 PBSZ set to 0.'
*cmd* 'PROT P'
*put* 'PROT P\r\n'
*get* '200 PROT now Private.\n'
*resp* '200 PROT now Private.'
*cmd* 'TYPE A'
*put* 'TYPE A\r\n'
*get* '200 Switching to ASCII mode.\n'
*resp* '200 Switching to ASCII mode.'
*cmd* 'PASV'
*put* 'PASV\r\n'
*get* '227 Entering Passive Mode ().\n'
*resp* '227 Entering Passive Mode ().'
*cmd* 'LIST'
*put* 'LIST\r\n'
*get* '150 Here comes the directory listing.\n'
*resp* '150 Here comes the directory listing.'
*get* '522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page\n'
*resp* '522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page'