Python ftplib登录成功但retrlines/nlst超时故障求助
问题解决:Python ftplib调用LIST/nlst超时故障
故障原因
Python标准库ftplib默认使用FTP主动模式(PORT模式),这种模式下服务器需要主动发起反向连接到客户端传输数据(比如目录列表)。若客户端网络有防火墙限制,或vsftpd主动模式配置存在问题,反向连接无法建立就会触发超时。
从你提供的CLI ftp输出也能看到服务器提示:200 PORT command successful. Consider using PASV.,说明服务器更推荐被动模式(PASV),而CLI的ftp可能自动切换了模式,或是你的环境对被动模式的数据流连接兼容性更好。
解决方法
在Python代码中登录成功后显式启用FTP被动模式即可,修改后的代码如下:
from ftplib import FTP # 替换为你的实际参数 ftp_host = "192.168.0.103" ftp_login = "login" ftp_password = "your_password" f = FTP(ftp_host) print(f.login(ftp_login, ftp_password)) print(f.pwd()) # 启用被动模式 f.set_pasv(True) f.retrlines('LIST') f.close()
补充说明
- 被动模式下,服务器会开放随机端口等待客户端主动发起连接,这种模式在带防火墙或NAT的网络环境中兼容性更强。
- 若启用被动模式后仍有问题,可检查CentOS7虚拟机的防火墙规则,确保vsftpd配置文件(
/etc/vsftpd/vsftpd.conf)中设置的pasv_min_port和pasv_max_port端口范围已开放,同时确认虚拟机的网络端口转发设置正确。
内容的提问来源于stack exchange,提问作者jeyzorus
相关产品推荐
相关产品推荐

