在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>
我的防火墙已停用。
答案 0 :(得分:42)
Windows FTP命令行客户端(ftp.exe
)在任何版本的Windows上都不支持被动模式。由于无处不在的防火墙和NAT,它现在变得毫无用处。
使用quote pasv
赢得了帮助。它仅将服务器切换到被动模式,而不是客户端。
请改用其他任何Windows FTP命令行客户端。大多数其他支持被动模式。
例如WinSCP默认为被动模式,可以转换Windows FTP script to WinSCP script。
(我是WinSCP的作者)
答案 1 :(得分:38)
Windows实际上不支持被动模式。
您可以通过三种不同的方式将命令发送到服务器,但不会在Windows客户端启用被动模式。
这些参数用于发送各种命令,pasv
不是微软在编写时所想到的。
您必须找到支持命令行使用的第三方软件,如WinSCP,而不是使用Windows本机软件。
答案 2 :(得分:10)
答案 3 :(得分:7)
quote PASV
命令不是ftp.exe
程序的命令,它是FTP服务器请求高阶端口进行数据传输的命令。被动传输是指通过这些高阶端口的FTP数据,而控制权保留在较低端口中。
Windows ftp.exe
程序可用于发送FTP服务器命令,以在两个FTP服务器之间进行被动数据传输。标准的Windows安装不会,也可能不应该将FTP服务器服务作为被动传输的端点运行。因此,如果标准窗口框需要被动传输,则需要ftp.exe
以外的解决方案作为到本地主机的FTP,因为其中一个连接在大多数Windows环境中都不起作用。
您可以在两个不同的主机(但不是同一主机上的两个连接)之间实现被动FTP传输,如下所示:
打开两个提示,使用一个ftp.exe
连接到源FTP服务器,一个连接到ftp.exe
连接到目标FTP服务器。
现在使用原始命令PASV和PORT在服务器之间建立被动连接。 quote PASV
命令将以省略号中的IP /端口进行响应。将该数据用于quote PORT <data>
命令。现在建立了被动链接,假设防火墙没有阻止四个端口中的一个或多个(FTP控制为2,FTP数据为2)
接下来,使用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
答案 4 :(得分:6)
CURL客户端支持FTP协议,适用于被动模式。获取下载无SSL 版本,您不需要任何openssl.dll库。只有一个curl.exe命令行应用程序 http://www.paehl.com/open_source/?CURL_7.35.0
curl.exe -T c:\test\myfile.dat ftp://ftp.server.com/some/folder/myfile.dat --user myuser:mypwd
另一个是Putty psftp.exe,但服务器密钥验证提示需要一个技巧。此命令行输入NO表示提示含义,此时正在使用的密钥未存储在注册表中。您需要一个外部脚本文件,但如果您上下复制多个文件,有时它会很好 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
echo n | psftp.exe ftp.server.com -l myuser -pw mypwd -b script.txt
script.txt(可以输入任何ftp命令)
put "C:\test\myfile.dat" "/some/folder/myfile.dat"
quit
答案 5 :(得分:1)
如果您使用的是Windows 10,请安装适用于Linux,WSL和Ubuntu的Windows子系统。
$ ftp 192.168.1.39
Connected to 192.168.1.39.
............
230 Logged in successfully
Remote system type is MSDOS.
ftp> passive
Passive mode on.
ftp> passive
Passive mode off.
ftp>
答案 6 :(得分:0)
这是一个常见问题。 当我们启动ftp连接时,只有外部ip打开了用于pasv连接的端口。但是NAT后面的ip不会打开连接,因此被动连接会因PASV命令而失败
我们需要指定在打开连接时打开与
的连接ftp -p {host}
答案 7 :(得分:0)
根据此Egnyte article,从Windows 8.1开始支持被动FTP。
注册表项:
"HKEY_CURRENT_USER\Software\Microsoft\FTP\Use PASV"
应设置为值yes
如果您不喜欢在注册表中闲逛,请执行以下操作:
inetcpl.cpl
,然后按 Enter 。将打开“ Internet选项”对话框。每次使用ftp.exe
时,请记住通过
登录到远程主机后立即
quote pasv
命令。
PS:如果防火墙抱怨,则授予ftp.exe
访问专用网络的权限。
答案 8 :(得分:-1)
FileZilla运行良好。我使用支持被动模式的FileZilla FTP客户端“手动传输”。
实施例: 打开FileZilla并选择“转移”&gt;&gt;然后在手动传输窗口中进行“手动传输”,执行以下操作:
答案 9 :(得分:-2)
对于被动模式,您需要使用命令“ literal” ftp>文字PASV