- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
因此,我正在尝试连接到 FTP 服务器以获取目录列表和下载文件。但是 prot_p()
函数之后的第一个命令引发异常 - 从日志中产生这些错误:
*get* '150 Here comes the directory listing.\r\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\r\n'
*resp* '522 SSL connection failed; session reuse required: see require_ssl_reuse
option in vsftpd.conf man page'
Traceback (most recent call last):
File "C:\temp\download.py", line 29, in <module>
files = ftps.dir()
File "C:\Python27\lib\ftplib.py", line 522, in dir
self.retrlines(cmd, func)
File "C:\Python27\lib\ftplib.py", line 725, in retrlines
return self.voidresp()
File "C:\Python27\lib\ftplib.py", line 224, in voidresp
resp = self.getresp()
File "C:\Python27\lib\ftplib.py", line 219, in getresp
raise error_perm, resp
ftplib.error_perm: 522 SSL connection failed; session reuse required: see requir
e_ssl_reuse option in vsftpd.conf man page
代码如下:
from ftplib import FTP_TLS
import os
import socket
host = 'example.com'
port = 34567
user = 'user1'
passwd = 'pass123'
acct = 'Normal'
ftps = FTP_TLS()
ftps.set_debuglevel(2)
ftps.connect(host, port)
print(ftps.getwelcome())
print(ftps.sock)
ftps.auth()
ftps.login(user, passwd, acct)
ftps.set_pasv(True)
ftps.prot_p()
print('Current directory:')
print(ftps.pwd())
files = ftps.dir()
ftps.quit()
我想安全地执行此操作,因此使用 FTP over TLS Explicit。我的想法是我可能需要在 ftplib 引用的 Socket
类中操作一些设置。更改服务器上的设置是不可能的。我已经使用 FileZilla 客户端成功测试了服务器,旧版本的 WinSCP 引发了同样的错误 - 尽管升级到最新版本修复了它。
有什么想法吗?
最佳答案
现在可以通过此类(FTP_TLS 的后代)轻松修复 Python 3.6+:
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) # this is the fix
return conn, size
它从最初的“控制”FTP 连接中获取 TLS session 信息,并将其重复用于每一个第二个“数据”连接,该连接经常为文件主体或目录列表的每个新数据传输而创建和关闭。重用对服务器有利,因为它不需要多次重复 TLS 握手。这正是您在消息 session reuse required
中看到的。
关于python - 使用 Python ftplib 的 FTPS - 需要 session 重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58217582/
配置 我正在使用来自 apache commons net 3.0.1 的 FtpsClient 与来自 apache ftpserver 1.0.6 的 FtpServer 对话。 客户端和服务器使
我正在运行 Ubuntu 12.10,并且使用 Yahoo Webhosting,并且我还有自己的域“example.com”。我曾经使用 FTP 将文件传输到我的虚拟主机帐户或从我的虚拟主机帐户传输
我在将文件从 Unix/Mac/Linux 环境传输到 Windows FTP 服务器时遇到问题。 而完全相同的 Java 代码可以在 Windows PC 上运行。 来自 *Nix/Mac 的传输仅
我正在使用ftps模块,并且我已经在 Cygwin 上安装了 lftp。我遇到了麻烦,因为我的 Node js 应用程序看起来连接正常,但我的命令都没有运行。该模块的文档不是很详细,所以我只是尽我所能
我们遇到的最初问题是,由于服务器证书不受信任,常规 FTP 下载开始失败。这促使我们想知道证书是否已在对方通知我们的情况下进行了更新,因此我们想下载当前证书并将其与我们 keystore 中的证书进行
仍然没有答案。感谢您提供任何帮助! 我正在使用 Apache Commons-Net3.1 并尝试让 FTPS 正常工作。当我尝试连接时,我在控制台中收到以下错误: ---编辑:代码和错误已更新---
我不知道如何在 iPhone 上制作 FTPS(FTP over SSL)。我想使用下面的代码 ftpStream = CFWriteStreamCreateWithFTPURL(NULL, (CFU
是否有可能通过具有身份验证的代理建立 FTPS 服务器连接? 为了使用代理身份验证连接到普通的 FTP 服务器,我使用了 Apache Commons 的 FTPHTTPClient。但是,我找不到在
我必须使用 SSL 与 FTP 服务器通信。 我收到了一个关于如何使用 WinScp 命令的示例: open ftpes://SomeUser:SomePass@SomeDomain.com/ -ce
我正在尝试使用 ssh/tls 连接到 ftp 服务器,但我使用的每种方法都没有帮助。 FTPSClient ftpsClient = new FTPSClient("TLS", false)
我需要 下载文件结构 (超过 4GB)来自 FTPS 服务器 (基于 TLS 协议(protocol)的隐式 FTP)。不幸的是 wget不支持 FTPS,但是 curl does .然而curl不支
我正在从事应用程序开发工作。在该应用程序上,我正在执行文件存储、检索和删除操作。为了识别服务器上的文件,我使用索引( HashMap 文件)文件。每次执行上传操作时,我都会更新“index”文件并将“
我正在尝试使用此代码将文件上传到 FTP,我遇到的问题是当语法遇到 serverURI.Scheme != Uri.UriSchemeFtp 时它返回 false。这是否意味着我的 URI 地址设置不
我能够通过 FTP 连接到 Apache FTP 服务器 ( http://mina.apache.org/ftpserver-project/index.html )。我按照同样的方式建立FTPS连
我需要将 SUSE Linux Enterprise 12 中的文件上传到仅允许隐式 FTPS 的 FTP 服务器(实际上传需要从 PHP 触发,但我可以运行任意 shell 命令)。默认情况下,防火
我的应用程序需要在上传后更改远程文件权限(STOR)。为此,它使用 ftps 连接。 与 chmod 命令类似,正确的命令是什么? 我搜索了FTP Commands and Extensions我没有
我正在尝试将文件上传到 FTP 服务器 (FTPS)。运行以下代码会产生异常: The remote certificate is invalid according to the validatio
有人要求我使用客户端身份验证证书设置 FTPS 连接。我是客户端,连接到服务器。我在 Windows7 工作站上,在防火墙后面。一些其他信息: 仅限 TLS 1.2 仅被动模式 我的 WAN IP 已
我目前正在尝试使用 PHP 在我们的服务器和远程 FTPS(FTP over SSL)服务器之间传输小文件。我是完成这项工作的标准公平,即 file_put_contents、file_get_con
我有一个场景,我需要将文件上传到远程 FTP 服务器。我尝试上传此文件的机器位于 AWS-VPC 内和 SOCKS 服务器后面,现在我正在使用以下命令来执行此操作 curl --connect-ti
我是一名优秀的程序员,十分优秀!