快捷搜索: 王者荣耀 脱发

FTP的主动模式和被动模式工作原理及抓包分析

1.FTP的PORT(主动模式)和PASV(被动模式)

(1) PORT(主动模式)

在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送FTP用户名和密码,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令,告诉服务端客户端采用主动模式并开放了端口。FTP服务器接收到PORT命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。

(2) PASV(被动模式)

在被动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送用户名和密码进行登陆,同时会开启N+1端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P(端口P的范围是可以设置的,后面会说到这个是很重要的)进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。

(3)被动模式抓包分析:

ftp客户端连接服务器端要做SSL双向认证,所以会看到客户端使用59739端口来连接ftp服务端的2121端口,绿色的框框部分内容应该是服务端把服务端随机起的端口号40006加密发送给客户端,让客户端传输文件时,使用40006端口。

可以发现,客户端发送文件给服务端使用的端口号正是56740(等于59739+1)。发送文件使用的新的端口号,所以不再走TSL加密协议了。因为,登陆认证过程,只要登陆成功,就代表客户端和服务端是相互信任的了。这时候,是允许开启新的端口号来传输文件。

最后,有两行黑色的[Tcp Retransmission]数据包,这是两次重传信息。是因为,ftp服务器是安装在内网的,没有配置服务端传输文件的端口P的范围,而且,在防火墙上没有映射59740这个端口到外网去,所以会导致ftp客户端使用59740端口传输数据包到ftp服务端会失败的。Tcp协议重传三次,不成功就失败。

2.两种模式的比较

主动模式和被动模式的不同简单概述为: 主动模式传送数据时是“服务器”连接到“客户端”的端口(客户端开启数据端口);被动模式传送数据是“客户端”连接到“服务器”的端口(服务端开启数据端口)。

主动模式需要客户端必须开放端口给FTP服务端,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。

被动模式只需要服务器端开放端口给客户端连接就行了,如果服务端在防火墙内,也需要做端口映射才行。

3.被动模式入的坑

我们系统里FTP使用的是被动模式,而且服务是安装在小网内的,与大网通信,要做IP和端口映射。当时没收手动配置FTP服务端数据传输的端口范围,在防火墙上只是做了这么一段的30000-30010的端口映射。导致客服端(一种设备)上传的时候只有一次上传成功了,这是因为服务端随机开放的一个端口恰好在30000-30010范围之内。其他任何时候都上传不成功。抓包看,只有客服端连接服务端数据包。

所以,FTP服务安装在小网中(防火墙内部),使用被动模式的话,且客户端位于防火墙外部,要限制FTP服务起的数据传输端口范围,而且要把这些端口要映射出去。

参考:

经验分享 程序员 微信小程序 职场和发展