搭建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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM