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

时间:2017-04-07 13:30:01

标签: python sockets ssl ftp

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

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

我已尝试查看其他类似帖子,建议在网站上添加https://。我使用FTP而不是网址,所以这对我来说不太可能。我也尝试将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)

1 个答案:

答案 0 :(得分:2)

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

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