我正在使用vsftpd设置FTP服务器。为了测试它,我使用ftplib建立了FTP连接:
connection = ftplib.FTP(host)
connection.login(user=username, passwd=password)
并使用以下命令检查是否已连接:
connection.voidcmd("NOOP")
但是,执行几乎所有操作似乎都不起作用。例如:
connection.nlst()
永远等待,然后超时。
通过ftp连接(ubunut),我看到消息:
进入被动模式(0,0,0,0,xxx,xxx)。
Filezilla可以工作,怎么可能?
进入被动模式(0,0,0,0,xxx,xxx)。
服务器将无效的目标地址0.0.0.0作为数据连接的目标。这是由于服务器中的错误或配置错误。尝试连接到该错误的IP地址当然会失败。
某些客户端,例如FileZilla仍然可以使用,因为它们只是忽略给定的IP而仅使用端口。这种行为是有道理的,因为在FTP的最常用用法(单个客户端和单个服务器之间的直接传输)中,数据连接的目标IP地址将与控制连接的目标IP地址相同,即,两者都是IP连接的IP服务器。这也反映在较新的命令EPSV
和EPRT
中,它们仅指定端口,而不再指定IP地址。
问题是被动连接无法正常工作。这可能是因为:
listen
和listen_ipv6
都在vsftpd.conf中定义以防万一,还要检查是否在防火墙规则下没有打开被动端口