我的所有计算机都位于一个路由器后面。我在其中一个路由器上运行着一个 FileZilla 服务器。
我正在尝试使用批处理脚本和 Windows 的内置 ftp.exe 自动上传到服务器。我已经设置了动态 DNS 服务,以便能够从路由器外部访问我的服务器,并且我已经在路由器中设置了到我的服务器的端口转发。我可以使用 Google Chrome、Windows 资源管理器和 FileZilla 客户端正常连接和传输。
但是,每当我尝试使用 ftp.exe (手动或批处理脚本)时,我都可以连接到服务器,但如果我尝试执行任何打开数据连接的操作(LIST
,STOR
或RETR
),我会收到以下错误:425 Can't open data connection.
我已允许 ftp.exe 进入两台计算机的防火墙。有人知道发生了什么事或我该如何修复它吗?如果有人知道可移植的独立(只有一个 exe 而没有其他文件)命令行客户端,我就不需要使用 ftp.exe。
编辑我知道我的 ISP 封锁了许多端口,包括 21 和该范围内的其他几个端口。所有这些都设置在端口 2121 上,被动端口设置为 2122-2142,所有这些都已在路由器中转发。
也许 ftp.exe 只会使用某个端口进行数据连接,而我的 ISP 封锁了该端口?如果是这样,我该如何改变这种情况?
答案1
常规主动 FTP 使用单独的服务器发起的数据连接进行传输,并且仅使用常规端口 21 连接作为控制通道。但是,当客户端位于防火墙后面时,防火墙可能会阻止此连接。我猜 Chrome、Explorer、FireZilla 等足够聪明,可以尝试被动模式,在该模式下,原始客户端发起的连接将同时用作控制通道和数据通道。
看来 Windows 的默认 CLI FTP 客户端不支持被动模式。因此您需要切换到FTP服务器。或者,我认为更好的选择是使用 SFTP。FTP 不安全,实际上只能在 LAN 上使用。SFTP 完全加密,并且只使用单个通道来传输数据和命令。如果您需要 CLI SFTP 客户端,远程FTP是一个不错的选择。
答案2
我也遇到过这个问题。解决方案是关闭杀毒软件的防火墙(我使用的是 McAfee),因为它会阻塞 FTP 端口。
答案3
Windows FTP CLI 支持被动模式。使用“quote pasv”进入被动模式。