1. 程式人生 > >搭建FTP伺服器與客戶端(1) - Python實現

搭建FTP伺服器與客戶端(1) - Python實現

  • FTP背景介紹
    FTP(File Transfer Protocol)協議,顧名思義為檔案傳輸協議。由已故的Jon Postel與Joyce Reynolds開發,並於1985年10月釋出。其底層基於TCP/IP協議。FTP目前主要用於匿名下載公共檔案,也可以在兩臺跨系統的計算機之間傳輸檔案。
    為了實現FTP協議,很顯然需要同時構建FTP伺服器與客戶端。而伺服器與客戶端均通過兩個套接字(分別繫結在“命令埠”與“資料埠”)進行雙向通訊。對於資料埠,從伺服器的角度來看有兩種繫結模式,分別為“主動模式”與“被動模式”。主動模式下,伺服器的資料埠主動連線客戶端的資料埠;被動模式下,伺服器告知客戶端資料埠號,再由客戶端主動發起連線。
    本篇內容將對FTP伺服器與客戶端進行簡單的構建,僅供參考!注意,搭建伺服器需要用到第三方庫pyftpdlib
    (沒有的話,則在終端輸入"pip install pyftpdlib"進行安裝),搭建客戶端需要用到標準庫ftplib
  • 搭建FTP伺服器
     1 # 搭建FTP伺服器
     2 
     3 from pyftpdlib.authorizers import DummyAuthorizer
     4 from pyftpdlib.handlers import FTPHandler
     5 from pyftpdlib.servers import FTPServer
     6 
     7 import socket                        #
    主要用於獲取當前主機IP地址 8 9 # 1. 新增授權使用者 10 authorizer = DummyAuthorizer() 11 # 新增非匿名使用者, 各項分別代表: 使用者名稱, 密碼, 使用者根目錄, 使用者許可權 12 authorizer.add_user('xxx', '12345', './', 'elradfmwM') 13 authorizer.add_user('yyy', '12345', '../', 'elradfmwM') 14 # 新增匿名使用者, 各項分別代表: 匿名使用者根目錄 15 authorizer.add_anonymous('./') 16 17
    # 2. 更改FTP處理器的授權使用者屬性(歸屬於"類屬性") 18 handler = FTPHandler 19 handler.authorizer = authorizer 20 21 # 3. 通過主機名與埠號例項化FTP伺服器, 並啟動 22 server = FTPServer((socket.gethostbyname(socket.gethostname()), 9999), handler) 23 server.serve_forever()
    View Code

     此時,最好記錄下主機的IP地址埠號,方便後面搭建客戶端。

  • 搭建FTP客戶端
     1 # 搭建FTP客戶端
     2 
     3 from ftplib import FTP
     4 
     5 import socket                # 主要用於獲取當前主機IP地址
     6 
     7 # 1. 例項化FTP物件, 並連線
     8 ftp = FTP()
     9 ftp.connect(socket.gethostbyname(socket.gethostname()), 9999)   # 應該輸入伺服器IP地址. 由於此處客戶端與伺服器建立在同一臺主機上, 因此採用socket方法替代
    10 
    11 # 2. 登入
    12 ftp.login("xxx", "12345")
    13 # 匿名登入方法, 注意: 匿名使用者的許可權較低
    14 # ftp.login("anonymous")
    15 
    16 # 3. 互動
    17 # 檢視當前工作目錄, 及指定目錄下的內容
    18 # print(ftp.pwd(), ftp.dir('./'))
    19 # 下載檔案
    20 ftp.retrbinary("RETR aaa.jpg", open("aaa.jpg", 'wb').write)
    21 # 上傳檔案
    22 ftp.storbinary("STOR scheme.txt", open("scheme.txt", 'rb'))
    23 
    24 # 4. 退出
    25 ftp.quit()
    View Code

    也可以在瀏覽器位址列輸入url來訪問伺服器,如下:
    ftp://ip:port/
    其中,ip代表伺服器IP地址,port為相應的埠號(如上面的9999)。

  • 參考
    https://www.cnblogs.com/huangxm/p/6274645.html