1. 程式人生 > >FTP主動模式和被動模式學習筆記

FTP主動模式和被動模式學習筆記

關於FTP,有被動模式和主動模式兩種,有人說是驗證模式,我不太認同,但懶得查資料,不想咬文嚼字,糾結這種事情。下面簡單從自己理解的角度來記錄一下兩種模式的學習筆記。

1、被動模式

程式碼流程:
客戶端:發PASV\r\n命令到21埠
伺服器:通過21埠向客戶端發資料通道埠(資料通道埠由伺服器生產)
客戶端:使用資料通道埠重新連線伺服器,connect會建立新的socket,之後資料通道使用該socket

PASV客戶端例項:

[email protected]:~$ ftp 192.168.18.88
Connected to 192.168.18.88.
220 Serv-U FTP Server v6.0 for WinSock ready...
Name (192.168.18.88:latelee): latelee
331 User name okay, need password.
Password:
230 User logged in, proceed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> passive // pasv模式
Passive mode on.
ftp> ls
227 Entering Passive Mode (192,168,18,88,25,172)
150 Opening ASCII mode data connection for /bin/ls.
drw-rw-rw-   1 user     group           0 May  4 18:04 .
drw-rw-rw-   1 user     group           0 May  4 18:04 ..
drw-rw-rw-   1 user     group           0 May  4 18:22 test
226 Transfer complete.
ftp> LIST // 無此命令
?Invalid command
ftp> list // 無此命令
?Invalid command

伺服器對應命令:

Connected to 192.168.18.111 (Local address 192.168.18.88)
220 Serv-U FTP Server v6.0 for WinSock ready...
USER latelee
331 User name okay, need password.
PASS xxxxx
User LATELEE logged in
230 User logged in, proceed.
SYST
215 UNIX Type: L8
PASV
227 Entering Passive Mode (192,168,18,88,44,213)
LIST
150 Opening ASCII mode data connection for /bin/ls.
226 Transfer complete.
QUIT
221 Goodbye!
Closing connection for user LATELEE (00:00:15 connected)

二、主動模式

程式碼流程:
客戶端:生成隨機的大於1024的埠NUM,發PORT A,B,C,D,n,m\r\n命令到21埠(其中A,B,C,D為本機IP,n=NUM/256,m=NUM%256)
伺服器:通過21埠向客戶端傳送是否成功的資訊(成功:200 PORT Command successful.)
客戶端:監聽上面生成的NUM埠,如有連線,則Accept得到新的socket,資料通道即使用該socket。
注:資料2的文章說在監聽NUM+1的埠,但我實際測試使用NUM也可以。另外,“PORT A,B,C,D,n,m\r\n”最後的回車換行和之前的字元是不能有空格的!因為寫程式碼時是用sprintf組裝欄位的,習慣性多帶個空格。正確的是示例如下:

sprintf(buffer, "PORT %d,%d,%d,%d,%d,%d\r\n", ip1, ip2, ip3, ip4, port>>8, port&0xFF);

這個問題搞了差不多半個鐘頭才意識到。

實然想起上個月搞網路問題列印PHY暫存器,就是因為沒有使能網路裝置直接訪問暫存器掛掉,當時是晚上7點,大多數人都回家吃飯了,心又急,腦子一時短路,來回驗證超過半小時後才發現是這樣原因。程式設計師對細節不能不注意。我相信有很多工程會因為將“==”誤寫為“=”或者因為某些括號等等問題導致debug花費大量時間。

主動模式客戶端例項

[email protected]:~$ ftp 192.168.18.88
Connected to 192.168.18.88.
220 Serv-U FTP Server v6.0 for WinSock ready...
Name (192.168.18.88:latelee): latelee
331 User name okay, need password.
Password:
230 User logged in, proceed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT Command successful.
150 Opening ASCII mode data connection for /bin/ls.
drw-rw-rw-   1 user     group           0 May  4 18:04 .
drw-rw-rw-   1 user     group           0 May  4 18:04 ..
drw-rw-rw-   1 user     group           0 May  6 11:24 test
226 Transfer complete.
ftp> LIST
?Invalid command
ftp> list
?Invalid command
ftp> 

伺服器對應命令:

Connected to 192.168.18.111 (Local address 192.168.18.88)
220 Serv-U FTP Server v6.0 for WinSock ready...
USER latelee
331 User name okay, need password.
PASS xxxxx
User LATELEE logged in
230 User logged in, proceed.
SYST
215 UNIX Type: L8
PORT 192,168,18,111,175,229
200 PORT Command successful.
LIST
150 Opening ASCII mode data connection for /bin/ls.
226 Transfer complete.
QUIT
221 Goodbye!

三、命令一覽

下面命令是從網上一個開源工程標頭檔案找到的,我覺得很簡潔,記錄於此。其中<CRLF>對應程式碼“\r\n”,<SP>表示有空格,其它沒有出現<SP>說明是沒有空格的。一般FTP命令由實際命令字元和回車換行組成,這兩部分是沒有空格的。但以前搞的時候,發現PASV命令與“\r\n”有無空格都能正常執行,不過為了不出意外,最好不帶空格。

FTP commands - Overview

simple commands
  CDUP <CRLF>
  QUIT <CRLF>
  REIN <CRLF>
  PASV <CRLF>
  STOU <CRLF>
  ABOR <CRLF>
  PWD  <CRLF>
  SYST <CRLF>
  NOOP <CRLF>
  PORT <SP> <host-port> <CRLF>
  TYPE <SP> <type-code> <CRLF>
  CWD  <SP> <pathname> <CRLF>
  MKD  <SP> <pathname> <CRLF>
  SITE <SP> <string> <CRLF>
  HELP [<SP> <string>] <CRLF>
  DELE <SP> <pathname> <CRLF>
  RMD  <SP> <pathname> <CRLF>
  STRU <SP> <structure-code> <CRLF>
  MODE <SP> <mode-code> <CRLF>
  STAT [<SP> <pathname>] <CRLF>
  ALLO <SP> <decimal-integer>
      [<SP> R <SP> <decimal-integer>] <CRLF>
  SMNT <SP> <pathname> <CRLF>

commands for logon sequence
  USER <SP> <username> <CRLF>
  PASS <SP> <> password <CRLF>
  ACCT <SP> <account-information> <CRLF>

commands for renaming
  RNFR <SP> <pathname> <CRLF>
  RNTO <SP> <pathname> <CRLF>

  RETR <SP> <pathname> <CRLF>
  STOR <SP> <pathname> <CRLF>
  APPE <SP> <pathname> <CRLF>
  REST <SP> <marker> <CRLF>
  LIST [<SP> <pathname>] <CRLF>
  NLST [<SP> <pathname>] <CRLF>

non RFC-Commands
  SIZE <SP> <pathname> <CRLF>
  MDTM <SP> <pathname> <CRLF>


參考資料:

相關推薦

FTP主動模式被動模式學習筆記

關於FTP,有被動模式和主動模式兩種,有人說是驗證模式,我不太認同,但懶得查資料,不想咬文嚼字,糾結這種事情。下面簡單從自己理解的角度來記錄一下兩種模式的學習筆記。 1、被動模式 程式碼流程: 客戶端:發PASV\r\n命令到21埠 伺服器:通過21埠向客戶端發資料通道埠(

【轉】FTP主動模式被動模式的比較

edit 兩個 int cti 了解 選擇 監聽端口 通訊 mod 總是記不住FTP主動和被動模式的區別。放在這裏,以備日後查閱。 FTP是僅基於TCP的服務,不支持UDP。與眾不同的是FTP使用2個端口,一個數據端口和一個命令端口(也可叫做控制端口)。通常來說這兩個端

FTP主動模式被動模式,你應該用那種?

FTP 原理 主動模式 被動模式 FTP文件傳輸分為兩種模式,主動(PORT)模式和被動(Passive)模式,用戶應該用哪種? - 簡單粗暴,直接上答案 1)如果不是必須需要,不要使用FTP服務,主動/被動模式,命令/數據端口,初學者很容易一下子就被搞蒙。 2)如果一定要使用FTP服務,

ftp主動模式被動模式的配置區別

ive line ip 地址 也會 邊界 操作模式 技術分享 上進 text   原文鏈接: https://blog.csdn.net/zhangyuan12805/article/details/71425385    ftp模式分為主動模式(active mode)和

FTP主動模式被動模式的相關知識

nag ado 圖片 主動模式和被動模式 客戶端和服務器 ftp 明顯 port 運行 FTP的主動模式和被動模式的相關知識。 在使用FTP時,如果客戶端機器和FTP服務器雙方之間的所有端口都是開放的,那連接不存在問題。如果客戶端與服務器之間有防火墻,如果沒配置好防火策略和

FTP主動模式被動模式在VRP上實現(實驗、報文理論解析)

理解 客戶 warning 簡述 查看 inf 要求 sep mac 嗯~點關註不迷路 1.簡述主動模式的FTP建立連接的主要步驟 圖1-19 FTP主動模式示意圖基本原理FTP(文件傳輸協議)的特殊性: 大多數的TCP服務是使用單個的連接,一般是客戶向服務器的一個周知端口

FTP主動模式被動模式工作原理

 1.FTP的PORT(主動模式)和PASV(被動模式)  (1) PORT(主動模式)        在主動模式下,FTP客戶端隨機開啟一個大於1024的埠N向伺服器的21號埠發起連線,傳送FTP使用者名稱和密碼,然後開放N+1號埠進行監聽,並向伺服器發出PORT N+

FTP主動模式被動模式以及java的連線FTP模式設定

FTP主動模式和被動模式以及java的連線FTP模式設定 (1)PORT(主動模式) PORT中文稱為主動模式,工作原理:FTP客戶端連線到FTP伺服器的21埠,傳送使用者名稱和密碼登入,登入成功後要列表列表或者讀取資料時,客戶端隨機開放一個埠(1024以上) ,傳送PORT命令到FTP伺服

重溫FTP主動模式被動模式

    最近做一個專案用到FTP和其它系統進行檔案傳輸,結果在FTP網路連線的問題上花了很多時間,由於太久沒搞多FTP,忘記了FTP不單單開放21埠,客戶端採用不同連線模式對網路有不同。在此重溫一下FTP的主動模式和被動模式的相關知識。     在使用FTP時,如果客戶端

如何選擇FTP主動模式被動模式

FTP檔案傳輸分為兩種模式,主動(PORT)模式和被動(Passive)模式,使用者應該用哪種?簡單粗暴,直接上答案1)如果不是必須需要,不要使用FTP服務,主動/被動模式,命令/資料埠,初學者很容易一下子就被搞蒙。2)如果一定要使用FTP服務,在今天的網際網路環境裡面,使用

FTP主動模式被動模式的區別

基礎知識:   FTP只通過TCP連線,沒有用於FTP的UDP元件.FTP不同於其他服務的是它使用了兩個埠, 一個數據埠和一個命令埠(或稱為控制埠)。通常21埠是命令埠,20埠是資料埠。當混入主動/被動模式的概念時,資料埠就有可能不是20了。 主動模式FTP:   主

FTP檔案傳輸協議兩種模式-主動模式被動模式

TCP/IP協議中,FTP標準命令TCP埠號為21,Port方式資料埠為20。FTP協議的任務是從一臺計算機將檔案傳送到另一臺計算機,它與這兩臺計算機所處的位置、聯接的方式、甚至是是否使用相同的作業系統無關。假設兩臺計算機通過ftp協議對話,並且能訪問Internet, 你可以用ftp命令來傳輸檔案。每種作

如何設定FTP主動模式被動模式

在使用ftp得時侯,經常遇到ftp連結後出現檔案列表錯誤得情況,只是因為ftp得模式不正確,如何設定ftp得工做模式,什麼是主動模式,什麼又是被動模式,主動模式和被動模式有什麼區別,今天蒐集了相關資料和常用ftp軟體工做模式得設定得方法: 一、什麼是PASV和PORT方式 (1)PORT其實是Standar

FTP協議的主動模式被動模式的區別

最近準備做一個《FtpCopy系列教程》,主要講解Ftp協議主動模式和被動模式的區別、以及FTP伺服器的安裝部署,然後通過幾個常用例項演示,詳細講解如何使用FtpCopy進行資料自動備份。 什麼是FTP協議? FTP的中文名稱是“檔案傳輸協議”,是File Transfer Pro

主動模式被動模式與zabbix的web管理界面使用

linux監控平臺 zabbix linux 操作系統 筆記內容:19.7 主動模式和被動模式19.8 添加監控主機19.9 添加自定義模板19.10 處理圖形中的亂碼19.11 自動發現筆記日期:19.7 主動模式和被動模式所謂主動就是客戶端主動上報數據,被動則是客戶端被動去提供數據。主動模

19.7-19.11 主動模式被動模式

19.7-19.11 主動模式和被動模式19.7 主動模式和被動模式19.8 添加監控主機19.9 添加自定義模板19.10 處理圖形中的亂碼19.11 自動發現擴展zabbix監控交換機(思科) http://tryrus.blog.51cto.com/10914693/1789847zabbix遠程執行命

zabbix的主動模式被動模式、添加監控主機、添加自定義模板、處理圖形中的亂碼、自動發現

roo 清理 瀏覽器 間隔 原型 fin 監測 9.png sim 主動模式和被動模式 主動或者被動是相對客戶端來講的 被動模式,服務端會主動連接客戶端獲取監控項目數據,客戶端被動地接受連接,並把監控信息傳遞給服務端 主動模式,客戶端會主動把監控數據匯報給服務端,服務

主動模式被動模式、添加監控主機、添加自定義模板、自動發現

自定義模板 上傳 點擊 中文 path face pla interface 文字 19.7 主動模式和被動模式 主動或被動是相對客戶端來講的 被動模式,服務端會主動連接客戶端獲取監控項目數據,客戶端被動地接收連接,並把監控信息傳遞給服務端 主動模式,客戶端會主動把監控數

19.7 主動模式被動模式;19.8 添加監控主機;19.9 添加自定義模板19.10處理圖形中的

處理圖形中的亂碼 添加監控主機 主動模式和被動模式 19.7 主動模式和被動模式1. 主動或者被動是相對客戶端來講的2. 被動模式,服務端會主動連接客戶端獲取監控項目數據,客戶端被動地接受連接,並把監控信息傳遞給服務端3. 主動模式,客戶端會主動把監控數據匯報給服務端,服務端只負責接收即可。4.

19.7 主動模式被動模式 19.8 添加監控主機 19.9 添加自定義模板 19.10 處理圖形

19.7 主動模式和被動模式 19.819.7 主動模式和被動模式 19.8 添加監控主機 19.9 添加自定義模板 19.10 處理圖形中的亂碼 19.11 自動發現 19.7 主動模式和被動模式 19.8 添加監控主機 19.9 添加自定義模板 19.10 處理圖形