搭建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地址端口號,方便後面搭建客戶端。html

  • 搭建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
相關文章
相關標籤/搜索