FlashFXP提供了两种连接FTP服务器的方式主动模式(PORT)、被动模式(PASV),而FlashFXP的默认设置为主动模式(PORT),更改FlashFXP将连接FTP服务器的方式的方法如下:
站点->站点管理器->选择需要更改的FTP站点->选项 在“使用被动模式”中点击两次去掉复选框中的勾(默认为灰色)。
FTP协议的数据传输存在两种模式:
主动模式(PORT Mode)和被动模式(Passive Mode)。这两种模式发起连接的方向截然相反,主动模式是从服务器端向 客户端发起;被动模式是客户端向服务器端发起连接。是否采取被动模式取决于客户程序,在ftp命令行中使用passive命令就可以关闭/打开被动模式。
主动模式(port/active mode)下,服务端端口固定,客户端端口随机
被动模式下,客户端发送‘PASV’请求到服务端,服务端端口随机,客户端端口固定
随机端口计算方式:ip,203.39代表端口,计算方法是203 * 256 + 39 = 52007
端口号大于1023小于65535
FTP数据端口为20,控制端口为21,与FTP server建立连接通过控制端口,即21端口号。
数据端口不一定为20,在主动模式下,数据端口为20,被动模式下则由服务器和客户端协商而定。
ftp 192.168.1.10 // 登录ftp服务器 ls // 展示目录文件 cd 目录名 // 切换目录名 lcd // 设置本地接收文件的目录 get filename // 下载ftp server上的文件 put filename // 将本地文件上传到ftp server上 quote PASV // windows下开启被动模式 passive // Linux下开启被动模式
主动和被动主要体现在拿放文件的时候,也就是客户端向服务端get/put文件。
1、主动模式原理图
主动模式主要是客户端打开某个随机端口,等待服务端主动连接。
在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送FTP用户名和密码,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令,告诉服务端客户端采用主动模式并开放了端口。FTP服务器接收到PORT命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。
2、被动模式原理图
被动模式主要是服务端打开某个随机端口,被动等待服务端来连接。
在被动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送用户名和密码进行登陆,同时会开启N+1端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P(端口P的范围是可以设置的,后面会说到这个是很重要的)进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。
3、wireshark抓包
这里使用leapFtp工具来连接ftp服务器,在编辑菜单的参数设置中,可以选择连接模式
服务器ip:192.168.145.128 客户端ip:192.168.145.1
登录部分都是一致的流程
(1)主动模式
1)在第66个报文中,由客户端发起port命令,并告诉服务器连接端口52007进行数据传输,port 192.168.145.1.203.39,其中前面四个表示ip,203.39代表端口,计算方法是203 * 256 + 39 = 52007
2)在第69个报文中,服务器主动连接客户端的52007端口
3)在第73个报文中,进行ftp数据传输,可以看到服务器用的是20端口,客户端用的是52007端口
(2)被动模式
1)在第37个报文由客户端发送pasv请求
1)在第38个报文中,服务端返回应答,192.168.145.128.73.79,其中73.79代表端口,计算方法是73 * 256 + 79 = 18767,并等待客户端连接
2)在第40个报文中,客户端主动连接服务器的18767端口
- 3)在第44个报文中,进行ftp数据传输,可以看到服务器用的是18767端口
使用TCP传输较大数据时,都会将数据分片,然后按照顺序依次传输。当Wireshark抓包时候,数据包标记为TCP Out-Of-Order,意思是该数据包的发送顺序不对。这意味着网络状况不好。当然,Wireshark有时会重传的包识别为乱序包。