python - 尝试连接到 FTP 站点但收到错误的 SSL 版本号错误?

标签 python sockets ssl ftp

我正在使用 Python 2.7。 我最近使用端口 990 成功建立了到我的 ftp 站点的连接。但是,我需要切换到端口 22 的站点没有更新。所以我只更改了端口号从 990 到 22。但是,在我之后这样做我得到了错误:

[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:661)

我已经尝试检查其他类似的帖子,这些帖子建议将 https://添加到网站。我使用的是 FTP 而不是 url,所以这对我来说是不可能的。我也尝试将 ssl_version 更改为 ssl.PROTOCOL_SSLv23 但出现以下错误:

[SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:661)

这是我提供的完整代码。有谁知道问题是什么?感谢您的帮助。

from ftplib import FTP_TLS
import socket
import ssl

class tyFTP(FTP_TLS):
    def __init__(self, host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=60):
        FTP_TLS.__init__(self, host, user, passwd, acct, keyfile, certfile, context, timeout)
    def connect(self, host='', port=0, timeout=-999):
        if host != '':
            self.host = host
        if port > 0:
            self.port = port
        if timeout != -999:
            self.timeout = timeout

        try: 
            self.sock = socket.create_connection((self.host, self.port), self.timeout)
            self.af = self.sock.family
            self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile, ssl_version=ssl.PROTOCOL_TLSv1)
            # self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile, ssl_version=ssl.PROTOCOL_SSLv23)
            self.file = self.sock.makefile('rb')
            self.welcome = self.getresp()
        except Exception as e:
            print e

    return self.welcome

FTP_SITE = "sftp.MySite.com"

UPLOAD = {
    "USERNAME": "username",
    "PASSWORD": "password"
}

DOWNLOAD = {
    "USERNAME": "username",
    "PASSWORD": "password"
}

server = tyFTP()
# changed from 990. 990 works with no issues.
server.connect(host=FTP_SITE, port=22)

最佳答案

990 是隐式 FTPS 的端口,而 22 是 SSH 的端口,因此也是 SFTP 的端口。我的猜测是,他们不仅切换了端口,而且实际上从 FTPS(通过 SSL 的 FTP)切换到了 SFTP(通过 SSH 的文件传输)。这也表明您使用的主机名:sftp.MySite.com

FTPS 和 SFTP 是完全不同的协议(protocol),您不能使用实现 FTPS 的代码连接到 SFTP 服务器。对于在 Python 中支持 SFTP 的库,请参阅 google search .

关于python - 尝试连接到 FTP 站点但收到错误的 SSL 版本号错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43279452/

相关文章:

python - 使用模式阈值识别单词列表中的模式

python - 将字典转换为 Python 可读的内容

sockets - 无法连接到 VPN 中的本地服务器

java - Lollipop 握手失败

使用 ssl 形式的 WordPress 让我们加密,但主页并不完全安全。 "Attackers might be able to see images.."消息

python - sympy 的高级索引?

python - 比较 python 中的复杂 json 字符串

python - 如何在 Windows 中的 Python 3 中制定端口转发规则?

在 C linux 中关闭服务器套接字

ssl - Apache MINA SNI 实现