Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1092037
  • 博文数量: 252
  • 博客积分: 4561
  • 博客等级: 上校
  • 技术积分: 2833
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-15 08:23
文章分类

全部博文(252)

文章存档

2015年(2)

2014年(1)

2013年(1)

2012年(16)

2011年(42)

2010年(67)

2009年(87)

2008年(36)

分类: LINUX

2012-11-02 18:26:43

EPSV EPRT 与 PASV PORT
前天迁移数据,涉及到FTP,发现这方面还什么都不懂,赶紧学习了下FTP!
中途接触到 ESPV EPRT  PASV PORT,也自己看了FTP Extensions  RFC,FTP 协议还是蛮简单的!

首先说下主动模式 PORT EPRT 的不同
[root@54 ~]# curl -uming:ming --ftp-port 172.16.1.54 ftp://172.16.2.56    # EPRT 请求:
C -> S     EPRT |1|172.16.1.54|61257|\r\n              # 数据包如同这样
S -> C     200 PORT command successful\r\n
[root@54 ~]# curl -uming:ming --ftp-port 172.16.1.54 --disable-eprt ftp://172.16.2.56        # 关闭EPRT 使用 PORT
C -> S     PORT 172,16,1,54,250,151\r\n              # 不清楚 250,151 -> port: 64151
S -> C     200 PORT command successful\r\n

先说共同点,就是都包含端口,和IP,之所以包含IP是因为如果PORT经过SNAT后,FTP 无法访问一个内网IP,只能到达网关,所以需要指向网关IP!
EPRT |1|172.16.1.54|61247|\\                # 前面1 代表IPV4,如果是2则代表IPV6,这就说明兼容了IPV6 !


再来看看EPSV的不同!
[root@54 ~]# curl -uming:ming ftp://172.16.2.56          # EPSV请求
C -> S     EPSV\r\n      
S -> C     229 Extended Passive mode OK (|||41796|)\r\n
[root@54 ~]# curl -uming:ming --disable-epsv ftp://172.16.2.56            # 关闭EPSV 使用 PASV
C -> S     PASV\r\n
S -> C     227 Entering Passive Mode (172,16,2,56,151,189)\r\n          #

可 以看到,使用指令不同,返回的状态码也不同,两者都返回port,但是EPSV却没有返回IP地址,这是因为,如果FTP 在防火墙后端使用DNAT转发,那么这个IP正好是个内网就会导致访问错误,而EPSV 只返回端口,就避免了这个问题,Client直接连接到 FTP Server 外网防火墙,防火墙上正确转发就OK了!

总结:
可以看到rfc959和NAT确实存在些问题,用","作为分隔符很不舒服!
关于EPRT PESV 格式以及分隔符的说明,请阅读rfc2428!


rfc2428        
FTP Extensions for IPv6 and NATs

2. The EPRT Command

EPRT

3. The EPSV Command

()
阅读(16263) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~