在Ubuntu ftp -p
中,被动模式可以正常工作。
如何在Windows中执行相同的操作?
我尝试使用quote pasv
,但出现以下错误:
230 OK. Current restricted directory is /
ftp> quote pasv
227 Entering Passive Mode (31,170,167,221,116,239)
ftp> cd os
250 OK. Current directory is /os
ftp> dir
500 I won't open a connection to 10.23.16.248 (only to 113.193.128.177)
425 No data connection
ftp>
我的防火墙已禁用。
Windows FTP命令行客户端(ftp.exe
)在任何版本的Windows上均不支持被动模式。由于存在无处不在的防火墙和NAT,它现在变得非常无用。
使用quote pasv
将无济于事。它仅将服务器切换为被动模式,而不将客户端切换为被动模式。
改用其他Windows FTP命令行客户端。其他大多数支持被动模式。
例如,WinSCP默认为被动模式,并且有指南可用于转换Windows FTP script to WinSCP script。
(我是WinSCP的作者)
Windows实际上不支持被动模式。
您可以通过三种不同的方式将命令发送到服务器,但不会在Windows客户端上启用被动模式。
这些参数用于发送各种命令,而pasv
并不是Microsoft编写它们时想到的。
[您将不得不找到支持命令行用法的WinSCP之类的第三方软件,并使用它代替Windows本机软件。
quote PASV
命令不是对ftp.exe
程序的命令,它是对FTP服务器请求高阶端口进行数据传输的命令。被动传输是一种FTP数据通过这些高阶端口进行传输,而控制权则保持在较低端口的一种方式。
windows ftp.exe
程序可用于发送FTP服务器命令,以在两个FTP服务器之间进行被动数据传输。标准Windows安装不会(也可能不会)使FTP服务器服务作为被动传输的端点运行。因此,如果需要使用标准Windows盒进行被动传输,则必须使用ftp.exe
以外的解决方案,因为FTP传输到localhost的方法是在大多数Windows环境中都无法使用该连接。
您可以在两个不同的主机(但不能在同一主机上的两个连接)之间实现被动FTP传输:
打开两个提示,使用一个到ftp.exe
连接到源FTP服务器,使用一个到ftp.exe
连接到目标FTP服务器。
现在使用原始命令PASV和PORT在服务器之间建立被动连接。 quote PASV
命令将以省略号表示IP /端口。将该数据用于quote PORT <data>
命令。现在,假设防火墙没有阻止四个端口中的一个或多个(2个用于FTP控制,2个用于FTP数据),您的被动链接即已建立。
下一次使用quote STOR <filename>
命令开始将数据接收到接收的FTP服务器,然后将控制命令quote RETR <filename>
发送到源FTP服务器。
所以对我来说:
client 1 > ftp.exe server1 ftp> quote PASV 227 Entering Passive Mode (10,0,3,1,54,161) client 2 > ftp.exe server2 ftp> quote PORT 10,0,3,1,54,54,161 ftp> quote STOR myFile client 1 ftp> quote RETR myFile
Cavet:我正在连接到一些旧的FTP服务器YMMV
CURL客户端支持FTP协议,并在被动模式下工作。获得不使用SSL下载]版本,您不需要任何openssl.dll库。只有一个curl.exe命令行应用程序。http://www.paehl.com/open_source/?CURL_7.35.0
如果使用的是Windows 10,请安装适用于Linux,WSL和Ubuntu的Windows子系统。
这是一个常见问题。当我们启动ftp连接时,只有外部ip打开pasv连接的端口。但是NAT后面的IP无法打开连接,因此被动连接会因PASV命令而失败]
FileZilla运作良好。我使用支持被动模式的FileZilla FTP客户端“手动传输”。
示例:打开FileZilla并选择“传输” >>“手动传输”,然后在“手动传输”窗口中执行以下操作:
据此Egnyte article,从Windows 8.1开始支持被动FTP。
注册表项: