python初學——網絡編程之FTP服務器

MYFTP是我寫的模擬FTP服務端和客戶端交互的程序。經過使用socket去模擬ftp的文件下載與上次兩個核心功能。並非使用真實FTP協議去實現。python

基本需求

  1. 用戶加密認證 # hashlib模塊對用戶名密碼進行加密。
  2. 容許同時多用戶登陸
  3. 每一個用戶有本身的家目錄,且只能訪問本身的家目錄 # 使用用戶名在配置文件的固定目錄中添加用戶名的目錄。並能夠實現ls,dir功能
  4. 對用戶進行磁盤配額,每一個用戶的可用空間不一樣 # 使用os模塊檢查用戶目錄的空間+上文件大小,若是大於quota就不讓傳輸。
  5. 容許用戶在ftp server上隨意切換目錄 cd功能 記錄用戶輸入的目錄,進行目錄的拼接。
  6. 容許用戶查看當前目錄下文件 ls功能
  7. 容許上傳和下載文件,保證文件一致性(md5)
  8. 文件傳輸過程當中顯示進度條
  9. 附加功能:支持文件的斷點續傳。比較客戶端文件與服務端文件的bytes,若是不一致。客戶端、服務端就使用文件seek方法移動光標。續傳。

需求模型

用例名

MYFTPlinux

場景

  • when:任意時間
  • where:任何地點
  • who:FTP用戶

用例描述

  • ftp使用用戶名密碼登陸。密碼須要加密認證、容許支持多用戶登陸。
  • 每一個用戶有本身的家目錄,全部的訪問必須限制在用戶的家目錄。但在家目錄中建立的目錄能夠進行目錄切換。
  • 用戶的目錄有磁盤配額。不容許超過磁盤配額。
  • 用戶能夠查看當前目錄下的文件列表。
  • 用戶能夠上傳和下載文件,而且保證文件的一致性。
  • 文件的傳輸過程當中顯示精度條。
  • 支持斷點續傳。

用戶價值

實現一套本身的FTP服務端與客戶端。git

約束

暫無github

建模設計

UML圖

順序圖

  1. 登陸順序圖
    圖片描述
  2. 上傳順序圖

程序講解

程序主體

請從github下載後使用
MYFTP
README數據庫

目錄結構

+---bin                     # 執行程序目錄
|       create_user.py      # 建立用戶程序
|       myftpc.py           # ftp_server啓動程序
|       myftps.py           # ftp_client啓動程序
|       __init__.py
|
+---conf
|   |   settings.py         # 配置文件
|   |   __init__.py
|   |
|   \---__pycache__
|
+---core
|   |   logger.py           # 日誌生成文件
|   |   main.py             # 主程序文件
|   |   __init__.py 
|   |
|   \---__pycache__
|
+---db                      # 數據庫目錄
|   \---accounts            # 帳號表目錄
|---id_user_rs.json         # 帳號ID與用戶名對應關係
+---file_upload             # ftp文件服務器目錄
+---lib                     # 類文件
|   |   account.py          # 帳號類
|   |   db.py               # 數據庫類
|   |   myftp_client.py     # ftp客戶端類
|   |   myftp_server.py     # ftp服務端類
|   |   process.py          # 進度條展現類(暫時未使用)
|   |   __init__.py
|   |
|   \---__pycache__
\---log
        __init__.py

環境

本系統基於python 3.6版本開發。可運行在安裝了python 3.6版本的linux或windows系統中。json

用法

建立FTP用戶

進入bin目錄:windows

> cd bin

執行create_user.py:服務器

> python ./create_user.py
Account:test2       # 用戶名
Password:test2      # 密碼
Home directory(test2):    # 帳號的根目錄。默認爲帳號名稱
Quota(bytes):10           # 帳號的quota。默認爲1G

===================ACCOUNT INFO===================
             Account:      test2
             Home Dir:     test2
             Quota:        10
==================================================

啓動ftp服務端

進入bin目錄:socket

> cd bin

執行create_user.py:加密

> python ./myftps.py

啓動ftp客戶端

進入bin目錄:

> cd bin

執行create_user.py:

> python ./myftpc.py

FTP用於登陸:

Name:test2
Password:test2
Account [test2] login successful
ftp>:

客戶端命令

  1. ls: 查看用戶當前目錄的文件和目錄列表

    ftp>: ls
      驅動器 D 中的卷是 新加捲
      卷的序列號是 020D-6062
     
      D:\deployment\MYFTP\file_upload\test2 的目錄
     
     2018/04/16  12:17    <DIR>          .
     2018/04/16  12:17    <DIR>          ..
                    0 個文件              0 字節
                    2 個目錄 45,605,543,936 可用字節
     Directory [test2] list successful.
     ftp>:
  2. pwd: 查看當前所在目錄

    ftp>: pwd
    Directory [\] show successful.
  3. mdir: 建立目錄

    ftp>: mdir temp_dir
     Directory [temp_dir] create successful.
  4. cd:切換目錄

    ftp>: cd temp_dir
    Directory [temp_dir] change successful.
  5. put: 上傳文件-支持斷點續傳

    ftp>: get temp_file.md
    Start download -----> temp_file.md
    trandata: %s b'test123'
    [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]100% recvsize:7, filesize:7
    File [temp_file.md] download successful.
  6. get: 下載文件-支持斷點續傳

    ftp>: put temp_file.md
    [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]100%
    File [temp_file.md] upload successful.
相關文章
相關標籤/搜索