FTP主动被动模式浅析

上周在一个项目中需要用到文件FTP功能,需要从主机A将文件上传到主机B,但是,网络安全部门要在A,B主机上设置防火墙,只能访问固定范围内的端口。

首先了下FTP的两种模式,假设主机A连接主机B
M,N均大于1024

主动模式,连接步骤:
1.A从本地启用一个端口:N
2.连接B的21端口,建一个命令链接。
3.向B发送一个连接端口T,等于N+1
4.B启用本地20端口
5.B连接A的T端口,建立一个数据链接。
6.可以开始数据传输了。

被动模式,连接步骤:
1.A从本地启用一个端口:N.
2.连接B的21端口,建一个命令链接.
3.B生成一个端口M,发送到A.
4.A启用本地N+1端口.
5.A连接B的M端口,建立一个数据链接.
6.可以开始数据传输.

之前的问题是A服务器的防火墙只能对B开放一部分端口,例如:1026至1040.这样的话,我们可以采用主动模式,利用apache的FTPClient.connect(host, port, localAddr, localPort)方法来指定本地端口,如果创建命令链接时的本地端口为1026,那么B连接A的端口就为1026+1=1027,这样就能限定B连A的端口范围。

如果要采用被动模式的话,需要在服务端设定端口M的范围,这样整个FTP服务器的访问端口就被限定死了,不够灵活。

注意:
经过测验,用JAVA FTP的连接情况和AIX自带FTP工具的连接情况是不一样的,如下是主动模式的连接情况

用JAVA FTP
可以看到本地连接端口 33834 和 33833 是N+1的关系
tcp4   57484      0  134.96.94.58.33834     134.96.83.40.20        ESTABLISHED
tcp        0      0  134.96.94.58.33833     134.96.83.40.21        ESTABLISHED

用AIX FTP
可以看到本地连接端口 50417和 50447 不是N+1的关系
tcp        0      0  134.96.94.58.33475     134.96.83.40.21        ESTABLISHED
tcp4       0      0  134.96.94.58.33542     134.96.83.40.20        ESTABLISHED


猜你喜欢

转载自jerome-alk.iteye.com/blog/1621547
今日推荐