FTP 服务器连接已连接但没有响应

FTP server connection connected but not responsive

我正在使用 vsftpd 设置一个 FTP 服务器。为了测试它,我使用 ftplib:

建立了一个 FTP 连接
connection = ftplib.FTP(host)
connection.login(user=username, passwd=password)

并检查它是否已连接使用:

connection.voidcmd("NOOP")

但是,执行几乎所有操作似乎都不起作用。例如:

connection.nlst()

一直等待然后超时。

通过 ftp 连接 (ubunut) 我看到消息:

Entering Passive Mode (0,0,0,0,xxx,xxx).

Filezilla 确实有效,这是怎么回事?

问题是被动连接不工作。这可能是因为:

  1. 被动地址未在 vsftpd.conf 中定义:pasv_address=`
  2. listenlisten_ipv6 都在 vsftpd.conf
  3. 中定义

以防万一,还要检查被动端口是否未在防火墙规则下打开

Entering Passive Mode (0,0,0,0,xxx,xxx).

服务器将无效的目标地址 0.0.0.0 作为数据连接的目标。这是由于服务器中的错误或配置错误造成的。尝试连接到这个错误的 IP 地址当然会失败。

像 FileZilla 这样的一些客户端仍然可以工作,因为它们只是忽略给定的 IP 而只使用端口。这种行为是有道理的,因为在 FTP 的最常见用法(单个客户端和单个服务器之间的直接传输)中,数据连接的目标 IP 地址将与控制连接的相同,即两者都是服务器的IP。这也反映在较新的命令 EPSVEPRT 中,它们仅指定端口而不再指定 IP 地址。