https://blog.csdn.net/zhangyuan12805/article/details/71425385/
ftp模式分為主動模式(active mode)和被動模式(passive mode),ftp是tcp連接,所以要進行三次握手
1. active和passive模式的配置:
在命令行輸入vim /etc/vsftpd/vsftpd.conf:
1> active mode:
pasv_enable=NO (passive模式關閉)
pasv_min_port=3000
pasv_max_port=4000
port_enable=YES (active模式開啟)
connect_from_port_20=YES (即默認情況下,FTP PORT主動模式進行數據傳輸時使用20端口(ftp-data)。YES使用,NO不使用。)
2>passive mode:
pasv_enable=YES
pasv_min_port=3000
pasv_max_port=4000
設定在PASV模式下,建立數據傳輸所可以使用port范圍的下界和上界,0 表示任意(1024 – 65535端口)。默認值為0。把端口范圍設在比較高的一段范圍內,比如3000-4000。
在linux上,如果不配置pasv_enable=NO,默認是passive模式。
2. service vsftpd restart 重啟ftp服務;
3. 通過命令行連接ftp server:
1> active mode: ftp -A 3.3.3.3
active模式連接ftp server時一定要加-A
2> passive mode: 可以直接使用 ftp 3.3.3.3 也可以使用 ftp -p 3.3.3.3
4. ftp client: 192.168.168.169 ftp server: 3.3.3.3
1> active 模式:
在active模式下,如下圖抓的包中,在命令連接部分(ftp類型的包),client端使用的端口是36439,這個端口是大於1024的任意端口,ftp server端用的端口是21:
如下圖,在active模式下,要傳輸數據時,ftp client通過第23個包通過21號端口告訴server數據傳輸聯系端口43187(大於1024的任意端口),並進行listen,server端用端口20主動和client端43187建立數據傳輸通道,並傳輸數據(第30,32,34個包)。這里是server知道了client端的數據通道監聽端口后,主動建立了數據傳輸通道,所以是主動模式。
在active模式下,數據傳輸部分(FTP-DATA類型的包),ftp-server端用的端口是20,默認情況下,FTP PORT主動模式進行數據傳輸時使用20端口,ftp-client端用的是43187端口,是上一步client發給server的數據傳輸監聽端口。
總結:active 模式
2> passive 模式:
在passive 模式下,如下圖所抓的包中,在命令部分(ftp類型的包),client端使用的端口是36434,這個端口是大於1024的任意端口,ftp server用的端口是21.
在passive模式下,如下圖的第28個包,是由client端發起PASV(passive mode)的數據傳輸通道連接請求,所以為被動模式。
而在passive模式的數據傳輸部分(FTP-DATA類型的包),ftp-server端用的端口是3542,這個端口是在/etc/vsftpd/vsftpd.conf文件中passive模式下設置的端口范圍(3000-4000,可以自己設置)中任意選的一個端口,ftp-client端用的是53001端口,是大於1024的任意一個端口。
總結:
passive模式