我在 Windows 2012R2 Standard 服务器上运行 Filezilla-Server。我正尝试通过 FTP 连接另一台 Windows 2012R2 Standard 服务器并从该服务器发送文件。
我正在运行这个批处理文件:
@echo off
cls
echo open xxx.xxx.xxx.xxx> ftpcmd.dat
echo user xxxxxxxxx>> ftpcmd.dat
echo xxxxxxxx>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo lcd %1>> ftpcmd.dat
echo lcd %1zip>> ftpcmd.dat
echo pwd>> ftpcmd.dat
echo mdelete *>> ftpcmd.dat
echo mkdir %1>> ftpcmd.dat
echo cd %1>> ftpcmd.dat
echo mput *.*>> ftpcmd.dat
echo quit>> ftpcmd.dat
@echo on
ftp -i -n -s:ftpcmd.dat
这是我运行的结果:
C:\backup>ftp -i -n -s:ftpcmd.dat
ftp> open xxx.xxx.xxx.xxx
Connected to xxx.xxx.xxx.xxx.
220-FileZilla Server version 0.9.44 beta
220-written by Tim Kosse ([email protected])
220 Please visit http://sourceforge.net/projects/filezilla/
ftp> user xxxxxxxxx
331 Password required for xxxxxxxxx
230 Logged on
ftp> bin
200 Type set to I
ftp> lcd ppsvm
Local directory now C:\backup\ppsvm.
ftp> lcd ppsvmzip
Local directory now C:\backup\ppsvm\ppsvmzip.
ftp> pwd
257 "/" is current directory.
ftp> mdelete *
_ <-- it just sticks here and goes nowhere
从上面的 ^ 可以看出,它停在 mdelete 处,并且不执行任何其他操作。
我检查了 Filezilla-Server 日志,其中显示以下内容:
8:28:21 AM - (not logged in)> Connected, sending welcome message...
8:28:21 AM - (not logged in)> 220-FileZilla Server version 0.9.44 beta
8:28:21 AM - (not logged in)> 220-written by Tim Kosse ([email protected])
8:28:21 AM - (not logged in)> 220 Please visit http://sourceforge.net/projects/filezilla/
8:28:21 AM - (not logged in)> USER xxxxxxxxxxxxx
8:28:21 AM - (not logged in)> 331 Password required for xxxxxxxxxxxxx
8:28:21 AM - (not logged in)> PASS ****************
8:28:21 AM - xxxxxxxxxxxxx> 230 Logged on
8:28:21 AM - xxxxxxxxxxxxx> TYPE I
8:28:21 AM - xxxxxxxxxxxxx> 200 Type set to I
8:28:21 AM - xxxxxxxxxxxxx> XPWD
8:28:21 AM - xxxxxxxxxxxxx> 257 "/" is current directory.
8:28:21 AM - xxxxxxxxxxxxx> TYPE A
8:28:21 AM - xxxxxxxxxxxxx> 200 Type set to A
8:28:21 AM - xxxxxxxxxxxxx> PORT xxx,xxx,xxx,xxxx,xxxx,xxxx
8:28:21 AM - xxxxxxxxxxxxx> 200 Port command successful
8:28:21 AM - xxxxxxxxxxxxx> NLST *
8:28:21 AM - xxxxxxxxxxxxx> 150 Opening data channel for directory listing of "/*"
8:28:32 AM - xxxxxxxxxxxxx> 425 Can't open data connection for transfer of "/*"
我已将 Filezilla-Server 添加到我的防火墙设置中:
我甚至关闭了防火墙以验证它没有干扰,所以我不相信它是防火墙。
我不知道发生了什么事。有人有什么建议吗?
答案1
主动 FTP 是双向的(控制连接从客户端到服务器,数据连接从服务器到客户端),因此它需要允许服务器特定端口上的传入连接和客户。
以下是一段引文FileZilla 维基(对 ftp 内部原理有很好的解释)
FTP 与大多数其他协议的区别在于它使用辅助连接进行文件传输。当您连接到 FTP 服务器时,实际上是在建立两个连接。首先,建立所谓的控制连接,通过该连接传输 FTP 命令及其响应。然后,为了传输文件或目录列表,客户端通过控制连接发送特定命令以建立数据连接。
(...)
在主动模式下,客户端在本地机器上打开一个套接字,并使用 PORT 命令将其地址告知服务器。一旦客户端发出传输文件或列表的命令,服务器就会连接到客户端提供的地址。
您还可以在 wiki 中找到有关客户端和服务器防火墙配置的信息。