0

我在 ftp 目录中寻找 index.html 文件。根据他们推荐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
4

1 回答 1

0

通过添加设置ftp.set_debuglevel(2) 并启用详细登录后。我注意到客户端没有在命令之后发送任何命令。通过查看 ftp 协议,我注意到登录后 ftp 决定了他们将在其上进行通信的一些随机端口。从那我认为可能有防火墙问题。尽管我已经允许 20、21、22 和 960。所以我尝试完全禁用防火墙。并运行脚本,它完美地工作。让我很困惑的事情有时是脚本有效,而且大多只是超时。从目前的情况来看,我假设每当出现超时问题时,它主要与防火墙或安全设置有关,例如当我们连接到 ec2 服务器等时。/etc/vsftpd.conflog_ftp_protocol=YESpasvsudo ufw disable

启用调试级别和详细级别也帮助了我很多其他我在黑暗中工作的情况。

这是通信卡住或无法正常工作的日志。

*get* '227 Entering Passive Mode (192,168,10,6,200,66).\n'
*resp* '227 Entering Passive Mode (192,168,10,6,200,66).'
于 2019-10-27T19:11:12.237 回答