python fptlib mlsd生成器迭代错误

问题描述 投票:0回答:1

我正在ftp目录中寻找index.html文件。根据docs,他们建议使用mlsd。我正在尝试打印结果并寻找文件,但无法正常工作。我已经尝试通过终端及其工作正常。

#!/usr/bin/python3

from ftplib import FTP
ftp = FTP("192.168.10.6")
ftp.login("username", 'password')
resp = ftp.mlsd()
print(resp)



for name, facts in resp:
    print(name)
#also tried for item in resp:   

错误

<generator object FTP.mlsd at 0x7fee1870cd00>
Traceback (most recent call last):
  File "./test.py", line 9, in <module>
    for name, facts in resp:
  File "/usr/lib/python3.6/ftplib.py", line 596, in mlsd
    self.retrlines(cmd, lines.append)
  File "/usr/lib/python3.6/ftplib.py", line 468, in retrlines
    with self.transfercmd(cmd) as conn, \
  File "/usr/lib/python3.6/ftplib.py", line 399, in transfercmd
    return self.ntransfercmd(cmd, rest)[0]
  File "/usr/lib/python3.6/ftplib.py", line 361, in ntransfercmd
    source_address=self.source_address)
  File "/usr/lib/python3.6/socket.py", line 724, in create_connection
    raise err
  File "/usr/lib/python3.6/socket.py", line 713, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out
python python-3.x ftp ftplib vsftpd
1个回答
0
投票

设置ftp.set_debuglevel(2)后并通过添加/etc/vsftpd.conflog_ftp_protocol=YES中启用详细日志记录。我注意到客户端在pasv命令之后没有发送任何命令。通过查看ftp协议,我注意到在登录后ftp决定了它们将在其上进行通信的一些随机端口。因此,我认为可能是防火墙问题。尽管我已经允许20、21、22和960。所以我尝试通过sudo ufw disable完全禁用防火墙。并运行脚本,它运行完美。很多令我感到困惑的事情有时是脚本起作用的,而且大多数情况下只是超时。从当前情况来看,我假设无论何时存在超时问题,大多数情况都与防火墙或安全设置有关,就像我们连接到ec2服务器等时一样。

还启用调试级别和详细级别对我在黑暗中工作的其他工作有很大帮助。

这里是日志,通信阻塞或无法正常工作。

*get* '227 Entering Passive Mode (192,168,10,6,200,66).\n'
*resp* '227 Entering Passive Mode (192,168,10,6,200,66).'
© www.soinside.com 2019 - 2024. All rights reserved.