ftp主動連線、被動連線、連線埠的分配與使用、誤區總結
阿新 • • 發佈:2019-02-02
今天在一個網路工程師考試群中無意中看到的,好像今年有一道題叫什麼ftp客戶端可以使用哪個埠,有4個答案,20,21,80,4155,其中肯定是4155了,因為20、21都是ftp伺服器使用的,80是web伺服器使用的。再者從另一方面說,客戶端使用的埠都是動態向系統申請的,一般都大於1024。後來記得我說了句主動連線時伺服器使用的是20號埠與客戶端建立連線,有人就開始反駁了說是不管主動還是被動埠伺服器的資料連線埠都大於1024,很好笑。今天也就順便總結一下吧,google了一下,發現網上各種解釋都有,錯誤的也不乏少數。我就使用真實的連線過程響應資料跟大家分析一下吧:被動(PASV)模式:PASV(被動)方式的連線過程是:客戶端向伺服器的FTP埠(預設是21)傳送連線請求,伺服器接受連線,建立一條控制連線。當需要傳送資料時,伺服器在命令鏈路上用PASV命令告訴客戶端:“我打開了XXXX埠,你過來連線我”。於是客戶端向伺服器的XXXX埠傳送連線請求,建立一條資料鏈路來傳送資料。伺服器控制埠(21),伺服器端等待的資料傳輸埠(動態申請)ftp伺服器動態申請一個埠(一般大於1024)然後告訴客戶端,我在這個埠上等待你的連線,客戶端收到以後便向伺服器的這個埠發起連線,資料連線建立以後,資料傳輸就可以開始了埠計算方法:172,16,101,104,7,254,256*7+254=2046一次完整的被動連線及資料傳輸過程:狀態: 正在連線 172.16.101.104:21...
狀態: 連線建立,等待歡迎訊息...
響應: 220 Serv-U FTP Server v6.4 for WinSock ready...
命令: USER test
響應: 331 User name okay, need password.
命令: PASS ****
響應: 230 User logged in, proceed.
狀態: 已連線
狀態: 讀取目錄列表...
命令: PWD
響應: 257 "/" is current directory.
狀態: 列出目錄成功
狀態: 正在連線 172.16.101.104:21...
狀態: 連線建立,等待歡迎訊息...
響應: 220 Serv-U FTP Server v6.4 for WinSock ready...
命令: USER test
響應: 331 User name okay, need password.
命令: PASS ****
響應: 230 User logged in, proceed.
狀態: 已連線
狀態: 開始上傳 E:\Downloads\liuzhigong\liuzhigong\404.htm
命令: CWD /
響應: 250 Directory changed to /
命令: TYPE A
響應: 200 Type set to A.
命令: PASV
響應: 227 Entering Passive Mode (172,16,101,104,8,86)
命令: STOR 404.htm
響應: 150 Opening ASCII mode data connection for 404.htm.
響應: 226 Transfer complete.
狀態: 檔案傳輸成功,傳輸了 2,052 位元組 (用時1 秒)
狀態: 讀取目錄列表...
命令: TYPE I
響應: 200 Type set to I.
命令: PASV
響應: 227 Entering Passive Mode (172,16,101,104,8,88)
命令: MLSD
響應: 150 Opening BINARY mode data connection for MLSD.
響應: 226 Transfer complete.
狀態: 列出目錄成功主動(PORT)模式: PORT(主動)方式的連線過程是:客戶端向伺服器的FTP埠(預設是21)傳送連線請求,伺服器接受連線,建立一條控制連線。當需要傳送資料時,客戶端在命令鏈路上用PORT命令告訴伺服器:“我打開了XXXX埠,你過來連線我”。於是伺服器從20埠向客戶端的XXXX埠傳送連線請求,建立一條資料鏈路來傳送資料。一次完整的主動連線及資料傳輸過程:
狀態: 正在連線 172.16.101.104:21...
狀態: 連線建立,等待歡迎訊息...
響應: 220 Serv-U FTP Server v6.4 for WinSock ready...
命令: USER test
響應: 331 User name okay, need password.
命令: PASS ****
響應: 230 User logged in, proceed.
狀態: 已連線
狀態: 開始上傳 E:\Downloads\liuzhigong\liuzhigong\404.htm
命令: CWD /
響應: 250 Directory changed to /
命令: TYPE A
響應: 200 Type set to A.
命令: PORT 172,16,101,104,8,76
響應: 200 PORT Command successful.
命令: STOR 404.htm
響應: 150 Opening ASCII mode data connection for 404.htm.
響應: 226 Transfer complete.
狀態: 檔案傳輸成功,傳輸了 2,052 位元組 (用時1 秒)
狀態: 讀取目錄列表...
命令: TYPE I
響應: 200 Type set to I.
命令: PORT 172,16,101,104,8,77
響應: 200 PORT Command successful.
命令: MLSD
響應: 150 Opening BINARY mode data connection for MLSD.
響應: 226 Transfer complete.
狀態: 列出目錄成功埠的使用:任何一種模式中客戶端均是動態申請一個埠來使用,伺服器端控制連線埠(預設21)始終不變,當使用主動模式時,客戶端申請一個埠告訴伺服器,伺服器則使用20號埠向客戶端的這個埠主動建立一條資料連線;當使用被動模式時,伺服器則動態申請一個埠告訴客戶端以等待客戶端的連線網路上的誤區:網路上有的文章中提到說是客戶端向伺服器傳送一個pasv命令告訴伺服器在那個埠上等待,實際上是錯的。從上面的完整ftp連線流程中:命令: PASV
響應: 227 Entering Passive Mode (172,16,101,104,8,88)命令: PORT 172,16,101,104,8,77
響應: 200 PORT Command successful.中可以看出,在被動連線中由客戶端傳送PASV命令,伺服器動態申請一個埠告訴客戶端,然後等待客戶端的連線;在主動連線中,客戶端動態申請一個埠告訴伺服器,然後等待伺服器的連線。常見問題1:為什麼處於內網的FTP客戶端要使用被動連線?由以上可知,使用主動連線時,是伺服器主動向客戶端的埠發起連線,則當ftp伺服器的連線目標IP實際是你的公網IP(因為私有IP是不允許路由到網際網路上的),如果是通過NAT上網,則是NAT池中的IP,如果客戶端中網路路由器沒有和你的計算機做埠對映,則當資料到達路由器時,路由器會自動丟棄資料包,因為路由器不是你的ftp客戶端,無法處理這個資料包。而使用被動連線由客戶端主動發起連線,則將能順利通過路由器,木馬內網反彈連線也是這個原理,由內網中的機器主動向外網發起連線。
狀態: 連線建立,等待歡迎訊息...
響應: 220 Serv-U FTP Server v6.4 for WinSock ready...
命令: USER test
響應: 331 User name okay, need password.
命令: PASS ****
響應: 230 User logged in, proceed.
狀態: 已連線
狀態: 讀取目錄列表...
命令: PWD
響應: 257 "/" is current directory.
狀態: 列出目錄成功
狀態: 正在連線 172.16.101.104:21...
狀態: 連線建立,等待歡迎訊息...
響應: 220 Serv-U FTP Server v6.4 for WinSock ready...
命令: USER test
響應: 331 User name okay, need password.
命令: PASS ****
響應: 230 User logged in, proceed.
狀態: 已連線
狀態: 開始上傳 E:\Downloads\liuzhigong\liuzhigong\404.htm
命令: CWD /
響應: 250 Directory changed to /
命令: TYPE A
響應: 200 Type set to A.
命令: PASV
響應: 227 Entering Passive Mode (172,16,101,104,8,86)
命令: STOR 404.htm
響應: 150 Opening ASCII mode data connection for 404.htm.
響應: 226 Transfer complete.
狀態: 檔案傳輸成功,傳輸了 2,052 位元組 (用時1 秒)
狀態: 讀取目錄列表...
命令: TYPE I
響應: 200 Type set to I.
命令: PASV
響應: 227 Entering Passive Mode (172,16,101,104,8,88)
命令: MLSD
響應: 150 Opening BINARY mode data connection for MLSD.
響應: 226 Transfer complete.
狀態: 列出目錄成功主動(PORT)模式:
狀態: 正在連線 172.16.101.104:21...
狀態: 連線建立,等待歡迎訊息...
響應: 220 Serv-U FTP Server v6.4 for WinSock ready...
命令: USER test
響應: 331 User name okay, need password.
命令: PASS ****
響應: 230 User logged in, proceed.
狀態: 已連線
狀態: 開始上傳 E:\Downloads\liuzhigong\liuzhigong\404.htm
命令: CWD /
響應: 250 Directory changed to /
命令: TYPE A
響應: 200 Type set to A.
命令: PORT 172,16,101,104,8,76
響應: 200 PORT Command successful.
命令: STOR 404.htm
響應: 150 Opening ASCII mode data connection for 404.htm.
響應: 226 Transfer complete.
狀態: 檔案傳輸成功,傳輸了 2,052 位元組 (用時1 秒)
狀態: 讀取目錄列表...
命令: TYPE I
響應: 200 Type set to I.
命令: PORT 172,16,101,104,8,77
響應: 200 PORT Command successful.
命令: MLSD
響應: 150 Opening BINARY mode data connection for MLSD.
響應: 226 Transfer complete.
狀態: 列出目錄成功埠的使用:任何一種模式中客戶端均是動態申請一個埠來使用,伺服器端控制連線埠(預設21)始終不變,當使用主動模式時,客戶端申請一個埠告訴伺服器,伺服器則使用20號埠向客戶端的這個埠主動建立一條資料連線;當使用被動模式時,伺服器則動態申請一個埠告訴客戶端以等待客戶端的連線網路上的誤區:網路上有的文章中提到說是客戶端向伺服器傳送一個pasv命令告訴伺服器在那個埠上等待,實際上是錯的。從上面的完整ftp連線流程中:命令: PASV
響應: 227 Entering Passive Mode (172,16,101,104,8,88)命令: PORT 172,16,101,104,8,77
響應: 200 PORT Command successful.中可以看出,在被動連線中由客戶端傳送PASV命令,伺服器動態申請一個埠告訴客戶端,然後等待客戶端的連線;在主動連線中,客戶端動態申請一個埠告訴伺服器,然後等待伺服器的連線。常見問題1:為什麼處於內網的FTP客戶端要使用被動連線?由以上可知,使用主動連線時,是伺服器主動向客戶端的埠發起連線,則當ftp伺服器的連線目標IP實際是你的公網IP(因為私有IP是不允許路由到網際網路上的),如果是通過NAT上網,則是NAT池中的IP,如果客戶端中網路路由器沒有和你的計算機做埠對映,則當資料到達路由器時,路由器會自動丟棄資料包,因為路由器不是你的ftp客戶端,無法處理這個資料包。而使用被動連線由客戶端主動發起連線,則將能順利通過路由器,木馬內網反彈連線也是這個原理,由內網中的機器主動向外網發起連線。