29

我在 Ubuntu 12.04 LTS 中设置了 FTP 服务器。

现在,当我尝试通过命令行从 Windows 7 连接到 FTP 服务器时ftp.exe,我已成功连接,但无法获取目录列表。我收到错误

200 PORT command successful. Consider using PASV.
425 Failed to establish connection. 
4

6 回答 6

20

passive使用ls.

从 FTP 客户端,检查 FTP 服务器是否支持被动模式,登录后,输入quote PASV.

以下是打开和关闭被动模式的 vsftpd 服务器的连接示例

vsftpdpasv_enable=NO

# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.3.5)
Name (localhost:john): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quote PASV
550 Permission denied.
ftp> 

vsftpdpasv_enable=YES

# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.3.5)
Name (localhost:john): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quote PASV
227 Entering Passive Mode (127,0,0,1,173,104).
ftp> 
于 2013-12-02T15:49:09.467 回答
16

您在主动模式下使用 FTP。

由于防火墙和 NAT,现在在主动模式下设置 FTP 可能很麻烦。

很可能是由于您的本地防火墙或 NAT,服务器无法连接回您的客户端以建立数据传输连接。

或者您的客户端不知道其外部 IP 地址,而是向服务器提供了一个内部地址(在PORT命令中),服务器显然无法使用该地址。但事实并非如此,因为 vsftpd 默认拒绝与 FTP 控制连接的源地址(port_promiscuous指令)不同的数据传输地址。

请参阅我的文章Active Mode 的网络配置


如果可能,您应该使用被动模式,因为它通常不需要在客户端进行额外设置。这也是服务器通过“考虑使用 PASV”向您建议的内容。这PASV是一个用于进入被动模式的 FTP 命令。

不幸的是,Windows FTP 命令行客户端 (the ftp.exe) 根本不支持被动模式。它使它在今天变得毫无用处。

请改用任何其他第 3 方 Windows FTP 命令行客户端。大多数其他支持被动模式。

例如WinSCP FTP 客户端默认为被动模式,并且有一个指南可用于将Windows FTP 脚本转换为 WinSCP 脚本

(我是WinSCP的作者)

于 2015-03-03T13:10:03.173 回答
11

实际上,您的 Windows 防火墙阻止了连接。cmd.exe您需要从管理员输入这些命令。

netsh advfirewall firewall add rule name="FTP" dir=in action=allow program=%SystemRoot%\System32\ftp.exe enable=yes protocol=tcp
netsh advfirewall firewall add rule name="FTP" dir=in action=allow program=%SystemRoot%\System32\ftp.exe enable=yes protocol=udp

如果出现问题,您可以通过以下方式恢复:

netsh advfirewall firewall delete rule name="FTP" program=%SystemRoot%\System32\ftp.exe
于 2016-01-20T12:10:40.167 回答
9

您需要使用被动模式。

如果您使用的是 linux 客户端,请使用pftpftp -p.

来自man ftp

-p    Use passive mode for data transfers. Allows use of ftp in environments where a firewall prevents connections from the outside world back to the client machine. Requires that the ftp server support the PASV command. This is the default if invoked as pftp.
于 2018-09-27T01:40:25.760 回答
0

对我有用的只是输入命令passive,ftp从主动模式进入被动模式。

于 2021-01-24T17:21:20.053 回答
-1

禁用 Windows 防火墙,然后在 cmd 中再次运行 ftp 命令,它将起作用

于 2021-03-26T10:09:30.347 回答