Ftplib ConnectionRefusedError: [Errno 111] Connection refused (python 3.5)
Ftplib ConnectionRefusedError: [Errno 111] Connection refused (python 3.5)
我有一个脚本应该连接到 FTP
from ftplib import FTP
with FTP('IP') as ftp:
ftp.login(user='my user', passwd='my password')
ftp.cwd('/MY_DIR')
ftp.dir()
我有一个错误:
ConnectionRefusedError: [Errno 111] Connection refused
ftp 是一个带有 vsftpd
的 EC2
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=IP
pasv_addr_resolve=YES
已经尝试过:
代码可在其他 FTP 上使用和不使用 TLS(托管在 1and1,OVH...)
我在 NodeJS 中试过这个脚本
const ftpClient = require('ftp-client');
const client = new ftpClient({
host: "IP",
port: 21,
user: "My user", // defaults to "anonymous"
password: "My password" // defaults to "@anonymous"
});
client.connect(() => {
client.download('/MY_DIR/file','/tmp/file', (res) => {
console.log(res)
})
});
工作得很好,所以我排除了防火墙问题
我试过启用 TLS
ssl_enable=YES
require_ssl_reuse=NO
然后
sudo 服务 vsftpd 重启
并使用
FTP_TLS
而不是 FTP
但没有用
我还尝试通过设置
禁用被动模式
pasv_enable=NO
然后
sudo service vsftpd restart
和ftp.set_pasv(False)
也没用
解决方案
在使用 filezilla 调试方法后,尽管我们在 /etc/vsftpd.conf
中定义,但我们的 FTP 返回了 0.0.0.0
pasv_adress=IP
这个post帮助了我们:https://www.centos.org/forums/viewtopic.php?t=52408
你要评论
listen_ipv6=YES
并启用
listen=YES
在/etc/vsftpd.conf
如果您无法访问 FTP
的 vsftpd.conf,您也可以覆盖 ftplib 的 class FTP
class CustomFTP(ftplib.FTP):
def makepasv(self):
if self.af == socket.AF_INET:
host, port = ftplib.parse227(self.sendcmd('PASV'))
else:
host, port = ftplib.parse229(self.sendcmd('EPSV'), self.sock.getpeername())
if '0.0.0.0' == host:
""" this ip will be unroutable, we copy Filezilla and return the host instead """
host = self.host
return host, port
如果'0.0.0.0'
发送
则强制上一个主机
我有一个脚本应该连接到 FTP
from ftplib import FTP
with FTP('IP') as ftp:
ftp.login(user='my user', passwd='my password')
ftp.cwd('/MY_DIR')
ftp.dir()
我有一个错误:
ConnectionRefusedError: [Errno 111] Connection refused
ftp 是一个带有 vsftpd
的 EC2pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=IP
pasv_addr_resolve=YES
已经尝试过:
代码可在其他 FTP 上使用和不使用 TLS(托管在 1and1,OVH...)
我在 NodeJS 中试过这个脚本
const ftpClient = require('ftp-client');
const client = new ftpClient({
host: "IP",
port: 21,
user: "My user", // defaults to "anonymous"
password: "My password" // defaults to "@anonymous"
});
client.connect(() => {
client.download('/MY_DIR/file','/tmp/file', (res) => {
console.log(res)
})
});
工作得很好,所以我排除了防火墙问题
我试过启用 TLS
ssl_enable=YES
require_ssl_reuse=NO
然后 sudo 服务 vsftpd 重启
并使用
FTP_TLS
而不是 FTP
但没有用
我还尝试通过设置
禁用被动模式pasv_enable=NO
然后
sudo service vsftpd restart
和ftp.set_pasv(False)
也没用
解决方案
在使用 filezilla 调试方法后,尽管我们在 /etc/vsftpd.conf
pasv_adress=IP
这个post帮助了我们:https://www.centos.org/forums/viewtopic.php?t=52408
你要评论
listen_ipv6=YES
并启用
listen=YES
在/etc/vsftpd.conf
如果您无法访问 FTP
的 vsftpd.conf,您也可以覆盖 ftplib 的 class FTPclass CustomFTP(ftplib.FTP):
def makepasv(self):
if self.af == socket.AF_INET:
host, port = ftplib.parse227(self.sendcmd('PASV'))
else:
host, port = ftplib.parse229(self.sendcmd('EPSV'), self.sock.getpeername())
if '0.0.0.0' == host:
""" this ip will be unroutable, we copy Filezilla and return the host instead """
host = self.host
return host, port
如果'0.0.0.0'
发送