原創 也談PORT與PASV模式

2021-03-31 11:46:44 字數 1547 閱讀 3064

port模式與pasv模式的區別就是ftp傳輸通路鏈結中資料傳輸建立時的模式.

port模式是伺服器端初始化連線,而pasv模式是客戶端初始化連線

伺服器端一旦啟動例項化兩個有固定埠號的socket,控制scontrolsocket埠為21,資料sdatasocket埠比如指定為1650

主線程:控制埠scontrolsocket.accept()一直監聽是不是有客戶端試圖建立連線。。。。。。

對應的csocket = scontrolsocket.accept()

這樣伺服器端的csocket就建立了乙個與客戶端的連線

開始了通訊

對應這個csocket和客戶端的通訊是新開的乙個子執行緒

通訊具體(客戶端的clientsocket)

1。clientsocket.connect(ep);//ep為scontrolsocket----c

2。csocket [i]= scontrolsocket.accept()----s

3。clientsocket.send(...user ~~~-----c

4。while(true)

判斷str.startwith("")->user

如果資料庫存在這樣的user傳送220 test ----s

5。clientsocket.receive(..如果前三個字串是以220為開始

clientsocket.send(.. pass ~~~-----c

6。第4步中,判斷str.startwith("")->pass

如果資料庫中對應第4步的user,這個pass也相同,傳送220    test ----s

7。clientsocket.receive(..如果前三個字串是以220為開始

clientsocket.send(.. pasv ~~~-----c

8。第4步中,判斷str.startwith("")->pasv

pasv是一種被動模式,就是伺服器端接收到客戶端的pasv命令後先csocket[i]傳送比如:150。(。。7,18),這樣客戶端就知道伺服器開啟了7*256+18的資料埠,同時sdatasocket.accept ()等待,如果客戶端去連線(客戶端已經知道了去連20埠,就例項化乙個新的socket),就有csocket[j] = sdatasocket.accept(),這樣對於乙個客戶端就有兩個socket通訊了,這時csocket[j].send(結果,然後伺服器的csocket[j]迴圈判斷,如果sdatasocket的連線斷開就csocket[i].send(220。。。,客戶端收到需要的結果就關閉資料連線。 至此pasv模式結束

初始化100個連線客戶端的控制csocket,100個連線客戶端的資料傳輸cdatasocket

只要乙個ssocket 繫結乙個本地伺服器終結點,開始監聽||

|建立乙個主線程中做處理:||

|迴圈執行下面的程式:||

|以下的**塊為乙個臨界區||

|ssocket一直在監聽,得到乙個可用的csocket,用csocket把監聽到的請求連線上

建立乙個子執行緒用於處理乙個客戶端的具體ftp請求||

|

ftp的port和pasv模式

一 ftp的port和pasv模式的工作方式 ftp使用2個tcp埠,首先是建立乙個命令埠 控制埠 然後再產生乙個資料埠。國內很多教科書都講ftp使用21命令埠和20資料埠,這個應該是教書更新太慢的原因吧。實際上ftp分為主動模式和被動模式兩種,ftp工作在主動模式使用tcp 21和20兩個埠,而工...

Serv U FTP之PASV和PORT模式

ftp的連線一般是有兩個連線的,乙個是客戶程和伺服器傳輸命令的,另乙個是資料傳送的連線。ftp服務程式一般會支援兩種不同的模式,一種是port模式,一種是passive模式 pasv mode 我先說說這兩種不同模式連線方式的分別。先假設客戶端為c,服務端為s.port模式 當客戶端c向服務端s連線...

Serv U FTP之PASV和PORT模式

注 我們在使用 url 此ip為虛擬內網ftp伺服器對映公網ip 提示如下錯誤 ftp伺服器上的資料夾時發生錯誤,請檢查是否有許可權訪問該資料夾。在解決此問題前,請先看下文 ftp的連線一般是有兩個連線的,乙個是客戶程和伺服器傳輸命令的,另乙個是資料傳送的連線。ftp服務程式一般會支援兩種不同的模式...