Python:nlst()通过使用FTP\u TL挂起“清单来了”

2024-04-29 00:12:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我被困在这里好几天了。我使用python通过FTP连接到我的服务器。我已经看到很多关于这个错误的帖子,并且已经做了几乎所有的改变,但仍然没有运气。我可以连接到我的服务器,创建目录,但是当它出现在列表ftps.nlst()ftps.retrlines('LIST')或{}时,它们都被卡住/挂起在:

150 Here comes the directory listing.

以下是我的服务器vsftpd配置文件:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
chroot_local_user=YES
allow_writeable_chroot=YES
pam_service_name=vsftpd
pasv_enable=YES
pasv_promiscuous=YES
pasv_min_port=40000
pasv_max_port=55999
pasv_address = ip_address
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
user_sub_token=abc
local_root=/home/abc/ftp
user_sub_token=username
local_root=/path/to/username/images
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

调试日志为:

^{pr2}$

在我的代码中,我还放置了:

ftps.ssl_version = ssl.PROTOCOL_SSLv23;
ftps.passive = True
ftps.prot_p()

有人能告诉我哪里做错了吗?在

谢谢


Tags: no服务器sslportenablelocaletcprivate
1条回答
网友
1楼 · 发布于 2024-04-29 00:12:00

问题可能是FTP服务器要求新数据通道中的TLS会话与控制通道相同。这在Python3.7中还没有修复。子类ftplib.FTP_TLS如在这里找到的解决方案https://stackoverflow.com/a/43301750,我做了一个小修正:

import ftplib


class ReusedSslSocket(SSLSocket):
    def unwrap(self):
        pass


class MyFTP_TLS(ftplib.FTP_TLS):
    """Explicit FTPS, with shared TLS session"""
    def ntransfercmd(self, cmd, rest=None):
        conn, size = ftplib.FTP.ntransfercmd(self, cmd, rest)
        if self._prot_p:
            conn = self.context.wrap_socket(conn,
                                            server_hostname=self.host,
                                            session=self.sock.session)  # reuses TLS session            
            conn.__class__ = ReusedSslSocket  # we should not close reused ssl socket when file transfers finish
        return conn, size

相关问题 更多 >