最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python3實現(xiàn)ftp服務功能(服務端 For Linux)

 更新時間:2017年03月24日 16:56:16   投稿:lijiao  
這篇文章主要介紹了python3實現(xiàn)ftp服務功能,服務端 For Linux,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了python3實現(xiàn)ftp服務功能的具體代碼,供大家參考,具體內(nèi)容如下

功能介紹:

可執(zhí)行的命令:

ls
pwd
cd
put
rm
get
mkdir

1、用戶加密認證

2、允許多用戶同時登陸

3、每個用戶有自己的家目錄,且只可以訪問自己的家目錄

4、運行在自己家目錄下隨意切換目錄

5、允許上傳下載文件,且文件一致

6、傳輸過程中顯示進度條
server main 代碼:

# Author by Andy
# _*_ coding:utf-8 _*_
import os, sys, json, hashlib, socketserver, time

base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_dir)
from conf import userdb_set
class Ftp_server(socketserver.BaseRequestHandler):
 user_home_dir = ''
 def auth(self, *args):
  '''驗證用戶名及密碼'''
  cmd_dic = args[0]
  username = cmd_dic["username"]
  password = cmd_dic["password"]
  f = open(userdb_set.userdb_set(), 'r')
  user_info = json.load(f)
  if username in user_info.keys():
   if password == user_info[username]:
    self.request.send('0'.encode())
    os.chdir('/home/%s' % username)
    self.user_home_dir = os.popen('pwd').read().strip()
    data = "%s login successed" % username
    self.loging(data)
   else:
    self.request.send('1'.encode())
    data = "%s login failed" % username
    self.loging(data)
    f.close
  else:
   self.request.send('1'.encode())
   data = "%s login failed" % username
   self.loging(data)
   f.close
   ##########################################

 def get(self, *args):
  '''給客戶端傳輸文件'''
  request_code = {
   '0': 'file is ready to get',
   '1': 'file not found!'
  }
  cmd_dic = args[0]
  self.loging(json.dumps(cmd_dic))
  filename = cmd_dic["filename"]
  if os.path.isfile(filename):
   self.request.send('0'.encode('utf-8')) # 確認文件存在
   self.request.recv(1024)
   self.request.send(str(os.stat(filename).st_size).encode('utf-8'))
   self.request.recv(1024)
   m = hashlib.md5()
   f = open(filename, 'rb')
   for line in f:
    m.update(line)
    self.request.send(line)
   self.request.send(m.hexdigest().encode('utf-8'))
   print('From server:Md5 value has been sended!')
   f.close()
  else:
   self.request.send('1'.encode('utf-8'))
   ###########################################

 def cd(self, *args):
  '''執(zhí)行cd命令'''
  user_current_dir = os.popen('pwd').read().strip()
  cmd_dic = args[0]
  self.loging(json.dumps(cmd_dic))
  path = cmd_dic['path']
  if path.startswith('/'):
   if self.user_home_dir in path:
    os.chdir(path)
    new_dir = os.popen('pwd').read()
    user_current_dir = new_dir
    self.request.send('Change dir successfully!'.encode("utf-8"))
    data = 'Change dir successfully!'
    self.loging(data)
   elif os.path.exists(path):
    self.request.send('Permission Denied!'.encode("utf-8"))
    data = 'Permission Denied!'
    self.loging(data)
   else:
    self.request.send('Directory not found!'.encode("utf-8"))
    data = 'Directory not found!'
    self.loging(data)
  elif os.path.exists(path):
   os.chdir(path)
   new_dir = os.popen('pwd').read().strip()
   if self.user_home_dir in new_dir:
    self.request.send('Change dir successfully!'.encode("utf-8"))
    user_current_dir = new_dir
    data = 'Change dir successfully!'
    self.loging(data)
   else:
    os.chdir(user_current_dir)
    self.request.send('Permission Denied!'.encode("utf-8"))
    data = 'Permission Denied!'
    self.loging(data)
  else:
   self.request.send('Directory not found!'.encode("utf-8"))
   data = 'Directory not found!'
   self.loging(data)
   ###########################################

 def rm(self, *args):
  request_code = {
   '0': 'file exist,and Please confirm whether to rm',
   '1': 'file not found!'
  }
  cmd_dic = args[0]
  self.loging(json.dumps(cmd_dic))
  filename = cmd_dic['filename']
  if os.path.exists(filename):
   self.request.send('0'.encode("utf-8")) # 確認文件存在
   client_response = self.request.recv(1024).decode()
   if client_response == '0':
    os.popen('rm -rf %s' % filename)
    self.request.send(('File %s has been deleted!' % filename).encode("utf-8"))
    self.loging('File %s has been deleted!' % filename)
   else:
    self.request.send(('File %s not deleted!' % filename).encode("utf-8"))
    self.loging('File %s not deleted!' % filename)
  else:
   self.request.send('1'.encode("utf-8"))
   ########################################

 def pwd(self, *args):
  '''執(zhí)行pwd命令'''
  cmd_dic = args[0]
  self.loging(json.dumps(cmd_dic))
  server_response = os.popen('pwd').read().strip().encode("utf-8")
  self.request.send(server_response)

 #############################################
 def ls(self, *args):
  '''執(zhí)行l(wèi)s命名'''
  cmd_dic = args[0]
  self.loging(json.dumps(cmd_dic))
  path = cmd_dic['path']
  cmd = 'ls -l %s' % path
  server_response = os.popen(cmd).read().encode("utf-8")
  self.request.send(server_response)

 ############################################
 def put(self, *args):
  '''接收客戶端文件'''
  cmd_dic = args[0]
  self.loging(json.dumps(cmd_dic))
  filename = cmd_dic["filename"]
  filesize = cmd_dic["size"]
  if os.path.isfile(filename):
   f = open(filename + '.new', 'wb')
  else:
   f = open(filename, 'wb')
  request_code = {
   '200': 'Ready to recceive data!',
   '210': 'Not ready to received data!'
  }
  self.request.send('200'.encode())
  receive_size = 0
  while True:
   if receive_size < filesize:
    data = self.request.recv(1024)
    f.write(data)
    receive_size += len(data)
   else:
    data = "File %s has been uploaded successfully!" % filename
    self.loging(data)
    print(data)
    break

    ################################################

 def mkdir(self, *args):
  request_code = {
   '0': 'Directory has been made!',
   '1': 'Directory is aleady exist!'
  }
  cmd_dic = args[0]
  self.loging(json.dumps(cmd_dic))
  dir_name = cmd_dic['dir_name']
  if os.path.exists(dir_name):
   self.request.send('1'.encode("utf-8"))
  else:
   os.popen('mkdir %s' % dir_name)
   self.request.send('0'.encode("utf-8"))

   #############################################

  def loging(self, data):
  '''日志記錄'''
  localtime = time.asctime(time.localtime(time.time()))
  log_file = '/root/ftp/ftpserver/log/server.log'
  with open(log_file, 'a', encoding='utf-8') as f:
   f.write('%s-->' % localtime + data + '\n')
   ##############################################

 def handle(self):
  # print("您本次訪問使用的IP為:%s" %self.client_address[0])
  # localtime = time.asctime( time.localtime(time.time()))
  # print(localtime)

  while True:
   try:
    self.data = self.request.recv(1024).decode() #
    # print(self.data)
    cmd_dic = json.loads(self.data)
    action = cmd_dic["action"]
    # print("用戶請求%s"%action)
    if hasattr(self, action):
     func = getattr(self, action)
     func(cmd_dic)
   except Exception as e:
    self.loging(str(e))
    break

def run():
 HOST, PORT = '0.0.0.0', 6969
 print("The server is started,and listenning at port 6969")
 server = socketserver.ThreadingTCPServer((HOST, PORT), Ftp_server)
 server.serve_forever()
if __name__ == '__main__':
 run()


設置用戶口令代碼:

#Author by Andy
#_*_ coding:utf-8 _*_
import os,json,hashlib,sys

base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
userdb_file = base_dir+"\data\\userdb"
# print(userdb_file)
def userdb_set():
 if os.path.isfile(userdb_file):
  # print(userdb_file)
  return userdb_file
 else:
  print('請先為您的服務器創(chuàng)建用戶!')
  user_data = {}
  dict={}
  Exit_flags = True
  while Exit_flags:
   username = input("Please input username:")
   if username != 'exit':
    password = input("Please input passwod:")
    if password != 'exit':
      user_data.update({username:password})
      m = hashlib.md5()
      # m.update('hello')
      # print(m.hexdigest())
      for i in user_data:
       # print(i,user_data[i])
       m.update(user_data[i].encode())
       dict.update({i:m.hexdigest()})
    else:
     break
   else:
    break
  f = open(userdb_file,'w')
  json.dump(dict,f)
  f.close()
 return userdb_file

目錄結(jié)構(gòu):

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python3 解釋器的實現(xiàn)

    Python3 解釋器的實現(xiàn)

    在本篇內(nèi)容中小編給大家總結(jié)了關于Python3解釋器的用法以及相關知識點,需要的朋友們學習下。
    2021-06-06
  • Python動態(tài)可視化模塊Pynimate初體驗

    Python動態(tài)可視化模塊Pynimate初體驗

    Pynimate是python第三方用于動態(tài)可視化的數(shù)據(jù)模塊,是一位專攻?Python?語言的程序員開發(fā)的安裝包。本文將通過幾個簡單的示例,講解一下Pynimate的使用方法,需要的可以參考一下
    2023-02-02
  • python自動化腳本安裝指定版本python環(huán)境詳解

    python自動化腳本安裝指定版本python環(huán)境詳解

    這篇文章主要為大家詳細介紹了python自動化腳本安裝指定版本python環(huán)境的相關方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • python pandas中對Series數(shù)據(jù)進行軸向連接的實例

    python pandas中對Series數(shù)據(jù)進行軸向連接的實例

    今天小編就為大家分享一篇python pandas中對Series數(shù)據(jù)進行軸向連接的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 利用Python實現(xiàn)某OA系統(tǒng)的自動定位功能

    利用Python實現(xiàn)某OA系統(tǒng)的自動定位功能

    這篇文章主要介紹了利用Python實現(xiàn)某OA系統(tǒng)的自動定位功能,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 使用gunicorn部署django項目的問題

    使用gunicorn部署django項目的問題

    這篇文章主要介紹了使用gunicorn部署django項目,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • python自動發(fā)送郵件腳本

    python自動發(fā)送郵件腳本

    這篇文章主要為大家詳細介紹了python自動發(fā)送郵件的腳本源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • python代碼制作configure文件示例

    python代碼制作configure文件示例

    這篇文章主要介紹了python代碼如何制作configure文件,需要的朋友可以參考下
    2014-07-07
  • Python with用法:自動關閉文件進程

    Python with用法:自動關閉文件進程

    這篇文章主要介紹了Python with用法:自動關閉文件進程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • python實現(xiàn)簡單溫度轉(zhuǎn)換的方法

    python實現(xiàn)簡單溫度轉(zhuǎn)換的方法

    這篇文章主要介紹了python實現(xiàn)簡單溫度轉(zhuǎn)換的方法,涉及Python操作字符串的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03

最新評論

秦皇岛市| 武清区| 博罗县| 涞源县| 大方县| 高碑店市| 临桂县| 九台市| 德庆县| 蒙山县| 临西县| 喀喇沁旗| 社旗县| 宜章县| 丘北县| 布拖县| 东山县| 南京市| 五指山市| 乡城县| 定结县| 永丰县| 深圳市| 上虞市| 金寨县| 彰化县| 贵德县| 甘洛县| 宁陵县| 运城市| 衢州市| 原阳县| 文登市| 巴楚县| 金川县| 清丰县| 玉林市| 八宿县| 黎川县| 东海县| 宁蒗|