相关疑难解决方法(0)

FTPES - 在Python中通过显式TLS/SSL进行FTP

我需要一个python客户端来做FTPES(显式),有没有人有任何python包可以做到这一点的经验.

我无法在python中执行此操作,但可以使用FileZilla等工具连接到FTP服务器

谢谢

python ftp tcp ftpes

15
推荐指数
3
解决办法
2万
查看次数

Python FTP隐式TLS连接问题

我需要连接到能够使用lftp成功连接的FTPS服务器.但是,当我尝试使用Python ftplib.FTP_TLS时,它会超时,堆栈跟踪显示它正在等待服务器发送欢迎消息等.有谁知道问题是什么以及如何克服?我想知道是否需要在服务器端进行某些操作,但是lftp客户端如何正常工作.任何帮助是极大的赞赏.

这是堆栈跟踪:

    ftp = ftplib.FTP_TLS()  
    ftp.connect(cfg.HOST, cfg.PORT, timeout=60)
  File "C:\Users\username\Softwares\Python27\lib\ftplib.py", line 135, in connect  
    self.welcome = self.getresp()  
  File "C:\Users\username\Softwares\Python27\lib\ftplib.py", line 210, in getresp  
    resp = self.getmultiline()  
  File "C:\Users\username\Softwares\Python27\lib\ftplib.py", line 196, in getmultiline  
    line = self.getline()  
  File "C:\Users\username\Softwares\Python27\lib\ftplib.py", line 183, in getline  
    line = self.file.readline()  
  File "C:\Users\username\Softwares\Python27\lib\socket.py", line 447, in readline  
    data = self._sock.recv(self._rbufsize)  
socket.timeout: timed out  
Run Code Online (Sandbox Code Playgroud)

使用lftp成功登录到同一个ftps服务器:

$ lftp
lftp :~> open ftps://ip_address:990
lftp ip_address:~> set ftps:initial-prot P
lftp ip_address:~> login ftps_user_id  ftps_user_passwd
lftp sftp_user_id@ip_address:~> ls
ls: Fatal error: …
Run Code Online (Sandbox Code Playgroud)

python ftp ssl ftps ftplib

14
推荐指数
5
解决办法
2万
查看次数

使用python ftplib违反协议发生了EOF

我正在使用python ftplib进行隐式tls连接程序.我尝试了有问题的解决方案python-ftp-implicit-tls-connection-issue(包括Rg Glpj和Juan Moreno的答案)来建立连接.但是当我打电话retrlineretrbinary登录到这样的ftp服务器后(FTP_ITLS是子类FTP_TLS):

58 server = FTP_ITLS()
59 server.connect(host="x.x.x.x", port=990)
60 server.login(user="user", passwd="******")
61 server.prot_p()
62
63 server.cwd("doc")
64 print(server.retrlines('LIST'))
65 # server.retrbinary('RETR contents.7z', open('contents.7z', 'wb').write)
66 server.quit()
Run Code Online (Sandbox Code Playgroud)

我收到了一个EOF错误:

Traceback (most recent call last):
  File "D:/Coding/test/itls.py", line 64, in <module>
    print(server.retrlines('LIST'))
  File "D:\Python\Python27\lib\ftplib.py", line 735, in retrlines
    conn = self.transfercmd(cmd)
  File "D:\Python\Python27\lib\ftplib.py", line 376, in transfercmd
    return self.ntransfercmd(cmd, rest)[0]
  File "D:\Python\Python27\lib\ftplib.py", line 713, in ntransfercmd
    server_hostname=self.host)
  File "D:\Python\Python27\lib\ssl.py", line …
Run Code Online (Sandbox Code Playgroud)

python python-2.7

7
推荐指数
1
解决办法
993
查看次数

尝试在 Python 中列出 ftp 目录时出现 OSError

使用 Python 3.6.3。

我正在连接到 FTP 以ftplib通过 FTP_TLS使用。

ftps = ftplib.FTP_TLS('example.com', timeout=5)

# TLS is more secure than SSL
ftps.ssl_version = ssl.PROTOCOL_TLS

# login before securing control channel
ftps.login('username@example.com', 'password')

# switch to secure data connection
ftps.prot_p()

# Explicitly set Passive mode
ftps.set_pasv(True)
Run Code Online (Sandbox Code Playgroud)

这一切都有效。我可以发送ftps.mkd('mydir')(制作目录)和ftps.cwd('mydir')(更改工作目录),并且都可以正常工作。

但是,如果我发送其中任何一个(据我所知,它们基本上都是同义词):

        ftps.dir()
        ftps.nlst()
        ftps.retrlines('LIST')
        ftps.retrlines('MLSD')
Run Code Online (Sandbox Code Playgroud)

然后我得到一个异常(下面还包括所有 ftplib 调试信息;通常也与 FileZilla 显示的内容相匹配):

*cmd* 'AUTH TLS'
*put* 'AUTH TLS\r\n'
*get* '234 AUTH TLS OK.\n'
*resp* '234 AUTH TLS OK.'
*cmd* 'USER username@example.com' …
Run Code Online (Sandbox Code Playgroud)

python ftp ftps ftplib python-3.x

5
推荐指数
2
解决办法
1712
查看次数

在Python中连接到"TLS上的显式FTP"(??)

我无法弄清楚如何使用ftplib查看FTP站点的文件内容.

我可以使用WinSCP连接到FTP站点,并查看根目录中的6个文件.

在Python 3.4中,我使用以下代码:

        from ftplib import FTP_TLS
        ftps = FTP_TLS(timeout=100)           
        ftps.connect(ipAddress, 21)
        ftps.auth()
        ftps.prot_p()
        ftps.login('username', 'password')
Run Code Online (Sandbox Code Playgroud)

哪个产生:

        Out[72]: '230 User logged in.'
Run Code Online (Sandbox Code Playgroud)

我可以运行这个:

        ftps.pwd()
Run Code Online (Sandbox Code Playgroud)

......我看到我在根目录中:

        Out[73]: '/'
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好吃.但是,当我试图查看目录中的内容,使用ftps.dir()或ftps.retrlines('NLST'),或者我尝试过的任何其他内容时,我得到一个超时:

TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
Run Code Online (Sandbox Code Playgroud)

我搜索过,发现有几个人说这可能是"被动与主动"连接设置问题.然而,我询问了FTP的管理员,如果它是被动的还是主动的,他表示不相信,只是说,"这不是SFTP.它是明确的FTP over TLS !!"

我对这一切都一无所知.我只是想使用ftplib(或任何其他包!)连接到他的FTP并下载一些文件.

我错过了什么?

编辑:我刚想通了WinSCP正在使用被动模式,所以这似乎是有效的.据我了解,默认情况下ftplib是被动的,但我继续将标志设置为true.这没什么,我仍然有同样的问题.

我还检查了我的防火墙(抓住吸管),它完全关闭,所以那里应该没有问题.

我还尝试使用'.sendcmd()'方法发送显式命令,该方法似乎能够发送命令,但不会获取任何响应(或者它无法查看响应).

有什么理由我能够看到我所在的目录,但没有其他任何数据?我显然已经连接并与服务器通信了,看起来这个目录可用并且对我来说是可见的,这意味着数据可以来回传递.数据是否可能以某种方式返回ftplib无法识别?有关我应该从哪里开始进行故障排除的任何想法?

最后,似乎所有内容都设置正确,因为我可以在WinSCP中看到一切正常.我应该检查哪些设置与ftplib进行比较?

编辑2:

根据要求,我设置了调试级别(感谢这个提示),下面是输出:

ftps = FTP_TLS(timeout=15)
ftps.set_debuglevel(2)                   
ftps.connect(ipAddress, 21)
ftps.set_pasv(True) …
Run Code Online (Sandbox Code Playgroud)

python ftp ssl ftplib

3
推荐指数
1
解决办法
2993
查看次数

标签 统计

python ×5

ftp ×4

ftplib ×3

ftps ×2

ssl ×2

ftpes ×1

python-2.7 ×1

python-3.x ×1

tcp ×1