61

In Ubuntu ftp -p for passive mode works fine.

How do I do the same in Windows?

I tried with quote pasv but I am getting following error:

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>

My firewall is disabled.

4

11 回答 11

67

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

使用quote pasv不会有帮助。它只将服务器切换到被动模式,而不是客户端


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

例如WinSCP默认为被动模式,并且有一个指南可用于将Windows FTP 脚本转换为 WinSCP 脚本。如果您是从头开始,请参阅使用 WinSCP 自动将文件传输到 FTP的指南。此外,WinSCP GUI 可以为您生成脚本模板

(我是WinSCP的作者)

于 2015-03-03T13:31:04.457 回答
45

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

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

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

您将必须找到支持命令行使用的第 3 方软件(如 WinSCP)并使用它而不是 Windows 原生软件。

于 2013-11-12T15:15:35.743 回答
19

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

这将默认使用被动模式

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

于 2015-06-08T18:56:38.193 回答
11

quote PASV命令不是对ftp.exe程序的命令,它是对 FTP 服务器请求数据传输的高阶端口的命令。被动传输是一种在这些高阶端口上传输 FTP 数据而在低位端口中保持控制的传输。

windowsftp.exe程序可用于发送 FTP 服务器命令以在两个 FTP 服务器之间进行被动数据传输。标准的 Windows 安装不会也可能不应该将 FTP 服务器服务作为被动传输的端点运行。因此,如果需要使用标准 Windows 框进行被动传输,那么除了ftp.exeFTP 到 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

于 2015-02-01T21:49:53.467 回答
10

CURL 客户端支持 FTP 协议,工作于被动模式。获取没有 SSL版本的下载,您不需要任何 openssl.dll 库。只有一个 curl.exe 命令行应用程序。
http://www.paehl.com/open_source/?CURL_7.35.0
http://www.paehl.com/?CURL_7.79.1

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
于 2014-03-24T18:10:55.560 回答
4

如果您使用的是 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>
于 2019-02-13T21:30:31.497 回答
1

根据这篇Egnyte 文章,从 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如果您的防火墙抱怨,请授予对私有网络的访问权限。

于 2020-01-18T23:47:47.230 回答
0

不是您真正要问的,而是ftp://username@ftp.yourserver.dom在标准 Windows 资源管理器(文件管理器,而不是 Internet 浏览器)中的搜索栏中输入将 ftp 服务器作为常规文件夹打开,您可以正常浏览和使用。

于 2021-11-05T10:43:39.490 回答
-1

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

于 2020-04-27T07:03:34.837 回答
-2

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

示例:打开 FileZilla 并选择“传输”>>“手动传输”,然后在手动传输窗口中执行以下操作:

  1. 确认选择了正确的下载/上传选项
  2. 对于远程:输入要下载的文件所在目录的名称
  3. 对于远程:输入要下载的文件的名称
  4. 对于本地:浏览到要将文件下载到的所需目录
  5. 对于本地:输入文件名以将下载的文件另存为(使用与要下载的文件相同的文件名,除非您想更改它)
  6. 复选框“立即开始传输”,然后单击“确定”
  7. 下载应立即开始
  8. 注意:如果您忘记勾选“立即开始传输”复选框... 没问题:只需右键单击 FileZilla 窗口窗格底部的要下载的文件(在 Process Queue(文件传输队列)内)并选择“进程队列”
  9. 下载过程应立即开始
  10. 完毕
于 2015-12-02T09:10:28.297 回答
-3

这是一个常见的问题。当我们启动 ftp 连接时,只有外部 ip 为 pasv 连接打开端口。但是 NAT 后面的 ip 没有打开连接,所以被动连接因 PASV 命令而失败

我们需要指定在打开连接时打开连接

ftp -p {主机}

于 2015-12-25T07:20:43.893 回答