操作系统
端口 20 和 21 已开放
IIS6 - 已启用直接元数据库编辑
配置 FTP 服务被动范围为 5500-5550
5500-5550 已添加到 Windows 防火墙
iisreset 并通过重新启动 ftp 服务进行双重检查
什么都没变,当我连接并进入被动模式时,每当我尝试列出或传输文件时,它仍然挂起。主动模式同样没用。
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\user>ftp
ftp> open x.x.x.x
Connected to x.x.x.x.
220-Microsoft FTP Service
xxxxxxxxxxxxxxxxxx
220 xxxxxxxxxxxxxxxxxx
User (x.x.x.x:(none)): user
331 Password required for user.
Password:
230-YOUR ACTIVITY IS BEING RECORDED TO THE FULLEST EXTENT
230 User user logged in.
ftp> QUOTE PASV
227 Entering Passive Mode (82,19,25,134,21,124)
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
并且它挂了..
现在我可以从微软文档中看到,在较新的 Windows 版本中,建议采取类似的附加步骤,但它们在 2003 上不起作用......
netsh advfirewall firewall add rule name=”FTP Service” action=allow service=ftpsvc protocol=TCP dir=in
netsh advfirewall set global StatefulFTP disable
我是不是漏掉了什么,最后这个 StatefulFTP 是什么意思
编辑
我可以使用 WinSCP 客户端连接和传输二进制文件 - 因此问题一定出在我的 ftp 命令上,不是吗?有人能看出我的 Windows ftp 客户端示例有什么问题吗?为什么它会挂在 ls 上,我也尝试了 QUOTE LIST,但它只是挂了,而且 Windows ftp 客户端在活动中不起作用,如果我尝试进入“二进制”然后输入它就会挂起 - 在我在路由器上添加 5500-5550 之前,这有效。此后,我已将此范围添加到路由器,但 Windows ftp 客户端没有任何区别。
答案1
也许是防火墙阻止了...
要纠正此问题并允许在 Windows 防火墙上跟踪 FTP 状态,请从命令提示符运行以下命令:
netsh advfirewall set global StatefulFtp enable
或者将inetsrv.exe放到防火墙的信任程序里。
编辑
在 Windows Server 2003 上配置防火墙的脚本:
C:\Inetpub\AdminScripts\adsutil.vbs set /MSFTPSVC/PassivePortRange “ 5500-5550″
FOR /L %I IN (5500,1,5550) DO netsh firewall add portopening TCP %I “Passive FTP Port “%I
答案2
原来 Windows FTP 客户端需要添加到防火墙,哈哈