如何在Windows命令提示符下使用被动FTP模式?

时间:2013-09-05 18:35:04

标签: windows ftp command-prompt

在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>

我的防火墙已停用。

10 个答案:

答案 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)

虽然这不直接回答有关命令行的问题,但是从Windows操作系统,请使用Windows资源管理器ftp://username@server

默认使用被动模式

对于命令行,活动模式是默认值

答案 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

如果您不喜欢在注册表中闲逛,请执行以下操作:

  1. WinKey + R 打开“运行”对话框。
  2. 键入inetcpl.cpl,然后按 Enter 。将打开“ Internet选项”对话框。
  3. 单击“高级”选项卡。
  4. 进入树形视图的“浏览”部分,并确保将“使用被动FTP”项设置为“开”。
  5. 单击“确定”按钮。

每次使用ftp.exe时,请记住通过

quote pasv

登录到远程主机后立即

命令。

PS:如果防火墙抱怨,则授予ftp.exe访问专用网络的权限。

答案 8 :(得分:-1)

FileZilla运行良好。我使用支持被动模式的FileZilla FTP客户端“手动传输”。

实施例: 打开FileZilla并选择“转移”&gt;&gt;然后在手动传输窗口中进行“手动传输”,执行以下操作:

  1. 确认选择了正确的下载/上传选项
  2. 对于Remote:输入要下载的文件所在的目录名称
  3. 对于Remote:输入要下载的文件的名称
  4. 对于本地:浏览到要将文件下载到
  5. 的所需目录
  6. For Local:输入文件名以保存下载的文件为(使用与要下载的文件相同的文件名,除非您想要更改)
  7. 复选框“立即开始传输”并单击“确定”
  8. 下载应该暂时开始
  9. 注意:如果您忘记了复选框“立即开始传输”...没问题:只需右键单击要下载的文件(在FileZilla窗口底部的Process Queue(文件传输队列)中)窗格并选择“Process Queue”
  10. 下载过程应该暂时开始
  11. 完成

答案 9 :(得分:-2)

对于被动模式,您需要使用命令“ literal” ftp>文字PASV