po出问题前先了解一下FTP传输的主动被动模式:
众所周知,标准FTP传输需要两个TCP/IP连接,一个21端口是用于控制连接,20端口用于控制传输,命令连接的端口是固定的,连接是持续的,而数据连接的端口是随机的,是临时产生的,而且连接是随连随断的。于客户端主动发起数据端口,还是服务器端主动发起数据端口的不同,定义了FTP的两种传输模式,PORT和PASV。
PORT模式(主动模式),是客户端通过PORT命令告诉服务器端要使用的数据端口号,然后在客户端主动建立起这个端口的TCP/IP监听。在进行文件传输的操作时,服务器来连接客户端的这个数据端口,进行数据传输。
PASV模式(被动模式),是客户端通过PASV命令来告诉服务器端,想使用PASV方式传输数据。服务器收到命令之后,主动在服务器端建立一个数据端口的TCP/IP监听,并把这个数据端口号返回客户端。在进行文件传输的操作时,客户端去连接服务器端的这个数据端口,进行数据传输。
问题1:
想实现的功能:在多台Windows2008服务器上部署了bat监控脚本,需要把生成的文件定时ftp到一台linux服务器上,方便汇总查看。
多台服务器需要定时使用ftp上传文件到linux服务器中,发现其中部分使用win2008系统的服务器不能正常上传文件,其他的同样系统都正常。登录win2008服务器,使用ftp命令打开地址可以正常登录到ftp服务器中,但是使用put、dir命令就长时间服务器无响应传输失败,如下图所示:
显示“200 PORT command successful. Consider using PASV.”
由图中可知,客户端已经使用PASV传输,并且ftp命令能够登录到服务器,说明21端口是正常的,但ll和mput命令不能正常返回,说明程序的传输被防火墙阻挡,查询得知防火墙开启并且未允许ftp应用,所以开启即可:打开防火墙,在“允许另一个程序”中添加
“C:\Windows\System32\ftp.exe”程序后传输文件正常。
备注:
原博文见下链接:http://blog.clzg.cn/blog-2085443-862353.html
补充:在网上也看到过一个博主写到关于加该ftp的时候,说到32位系统加C:\Windows\System32\ftp.exe,64位系统加C:\Windows\SysWOW64\ftp.exe,事实并不是这样的,微软为了保障兼容性,无论是32位还是64位的DLL文件都是放到了System32文件夹中。经过验证,也证明只有前者是正确的。不过这两个文件内的文件是类似的,具体没细查,可能是自带的ftp是32位的么?
问题2:
在另一组Windows客户端中(同网段),登录ftp服务器后,运行ll等命令立马报错:如下
500illegal port command
425USE PORT
OR PASV first
查了些许资料,但是并未找到真正解决的方法。
未解。。。
待定-----------------