天在Windows 2003 Server上安装IIS的FTP,服务器开了Windows防火墙,添加了例外:允许外界连接21端口。一切设置完毕,使用IE连接却始终无法打开,状态栏显示“正在获取文件夹的内容”,最后提示“操作超时”。
在命令提示符下登陆一切正常,可以dir目录内容,get文件等。
重新调整了FTP设置、用户权限、NTFS权限,问题依旧。
用Cuteftp软件连接,发现了问题所在,使用PASV模式无法传输数据改用PORT模式一切正常。
上网查询了关于FTP两种连接模式的资料:
FTP的连接模式有两种,PORT和PASV。PORT模式是一个主动模式,PASV是被动模式,这里都是相对于服务器而言的。
PORT模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端的某一个大于1024的端口; 在PASV模式中,数据传输通道的建立是由FTP客户端发起的,他使用一个大于1024的端口连接服务器的1024以上的某一个端口。
如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,比如使用微软的ISA Server 2000发布一个FTP服务器,这一点非常关键,如果设置错了,那么客户将无法连接。
至此清楚了故障的原因:服务器打开了Windows防火墙,ifly通过添加端口允许外界访问服务器的21端口,因此FTP的控制信息可以正常传输。使用CMD登陆时,由于采用的是PORT模式,服务器使用20端口向客户端发起连接,这个outbound过程会被Windows防火墙放行,因此可以建立数据通道。而使用IE登陆时,默认采用的是PASV模式,客户端试图连接服务器1024以上的某个端口,这个对于服务器的inbound过程被防火墙过滤掉了,因此无法建立数据通道,出现超时错误。
解决这个问题可以从服务器或客户端两方面着手:
对于服务器可以打开需要的端口,但PASV模式连接的端口号不定,不能通过“添加端口”的方式,可以照(图1)那样通过“添加程序”的方式在防火墙上打洞。
对于客户机,指定IE只使用PORT模式也可以解决问题。见图2,IE工具菜单-> Internet选项->高级->去掉“使用被动FTP”前面的勾即可。
图1、Windows防火墙添加程序例外
图2、IE设置不使用PASV模式
|