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

47 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>
Run Code Online (Sandbox Code Playgroud)

我的防火墙被禁用了.

Mar*_*ryl 47

Windows FTP命令行客户端(ftp.exe)在任何版本的Windows上都不支持被动模式.由于无处不在的防火墙和NAT,它现在变得毫无用处.

使用quote pasv将无济于事.它只将服务器切换到被动模式,而不是客户端.


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

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

(我是WinSCP的作者)


tra*_*lad 39

Windows实际上不支持被动模式.

您可以通过三种不同的方式将命令发送到服务器,但不会在Windows客户端启用被动模式.

这些参数用于发送各种命令,pasv并不是微软在编写时所想到的.

您必须找到支持命令行使用的第三方软件,如WinSCP,并使用它而不是Windows本机软件.

  • 更正:"Windows`ftp.exe`不支持被动模式." 如果您使用功能齐全的FTP客户端,操作系统支持它就好了. (12认同)
  • pasv不支持包括8.1 pro.不,不支持.试试WinSCP(免费,开源,可编写脚本,有效). (5认同)
  • 我测试了XP,7,2k8,2k12 (2认同)

小智 11

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

这将默认使用被动模式

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


Bru*_*son 8

quote PASV命令不是ftp.exe程序的命令,它是FTP服务器请求高阶端口进行数据传输的命令.被动传输是指通过这些高阶端口的FTP数据,而控制在较低端口中维护的传输.

Windows ftp.exe程序可用于发送FTP服务器命令,以在两个FTP服务器之间进行被动数据传输.标准的Windows安装不会,也可能不应该将FTP服务器服务作为被动传输的端点运行.因此,如果需要使用标准窗口框进行被动传输,则除了ftp.exe作为其中一个连接的localhost 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
Run Code Online (Sandbox Code Playgroud)

Cavet:我正在连接一些旧的FTP服务器YMMV


Who*_*ome 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
Run Code Online (Sandbox Code Playgroud)

另一个是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
Run Code Online (Sandbox Code Playgroud)

script.txt(可以输入任何ftp命令)

put "C:\test\myfile.dat" "/some/folder/myfile.dat"
quit
Run Code Online (Sandbox Code Playgroud)

  • `psftp` 是 SFTP 客户端,而不是 FTP 客户端。此外,建议自动接受 SSH 主机密钥是一个可怕的安全风险。 (3认同)

小智 6

如果您使用的是 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>
Run Code Online (Sandbox Code Playgroud)