zoukankan      html  css  js  c++  java
  • 验证客户端的一致性

    基础知识点

    os模块
    例如
    os.urandom(32)#随机一个32位的字节
    import os
    random_str = os.urandom(32)
    print(random_str)#结果会出现32位随机字节
    
    
    hmac模块
    hmac.new(盐,字符串)#同hashlib只不过更加简单
    例如:
    import hmac
    cecret_kehy="1111"
    new_str = "this is random str"
    new = hmac.new(cecret_kehy,new_str)
    new = new.digest()
    print(new)#其结果为摘要算法结果
    OS模块和hmac模块

    先完成client端这样是因为面向的用户需求服务端才能架设服务,以服务功能为导向

    #如果你想在分布式系统中实现一个简单的客户端链接认证功能,
    #又不像SSL那么复杂,那么利用hmac+加盐的方式来实现
    万能通用版
    import socketserver
    class MyServer(socketserver.BaseRequestHandler)
         def handle(self):
              self.request.send(b"hello")
              msg = self.request.recv(1024).decode("utf-8")
              print(msg)
    
    server = socketserver.ThreadingTCPServer(("127.0.0.1",8800),MyServer)
    
    server.serve_forever()
    
    
    
    简单版
    import os
    import socket
    import hmac
    
    ip_path = ("127.0.0.1",8800)
    def server_start(ip_path):
         sk = socket.socket()
         sk.bind(ip_path)
         sk.listen()
         return sk
    
    
    def check_client():
         secret_key = b"this is key"
         send_str = os.urandom(32)
         hmac_obj = hmac.new(secret_key,send_str)
         secret_ret =  hmac_obj.digest()
         if conn.recv(1024) == secret_ret:
              print("合法的客户端")
              return True
         else:
              print("非法的客户端")
              return Fealse
         
    
    coon,addr = sk.accept()
         
    服务端
    import os
    import socket
    import hmac
    
    
    sk = socket.socket()
    sk.connect(("127.0.0.1",8800))
    
    recv = sk.recv(1024)
    secret_key = b"this is key"
    hmac_obj = hmac.new(secret_key,recv)
    ret = hmac_obj.digest()
     sk.send(ret)
     msg = sk.recv(1024)
     if msg:
          print(msg.decode("utf-8"))
          while 1:
               inp = input(">>>")
               sk.send(inp.encode("utf-8"))
               msg = sk.recv(1024)
               print(msg.decode("utf-8"))
    sk.close()
    
    
    
    
    
         
         
    客户端
    #客户端
    ADDR = ("127.0.0.1",9000)
    def get_socket():
         sk = socket.socket()
         sk.connect(ADDR)
         return sk
    
    
    
    import socket,json
    #输入账号密码
    username = input("username>>>>")
    passwd = input("passwd>>>>")
    if username.strip() and passwd.strip():
         sk = get_socket()
         dic = {"username":username,"passwd":passwd}
         str_dic = json.dumps(dic)
         sk.send(str_dic.encode("utf-8"))
    #建立连接socket
    登陆认证客户端
    1.通读一遍所有的博客
    2.背诵socket_server和socket_client
    
    3大作业,这周交一部分,下周交一部分
    
    
    ftp
    和网盘差不多
    将文件上传到服务端,然后再从服务端下载
    
    
    
    
    1.多用户同时登陆
    2.用户登录,加密认证
    3.上传/下载文件,保证文件一致性   提供一个校验码,下载后进行比对
    基础
    
    
    
    4.不同用户家目录不同,且只能访问自己家的目录
    5.对用户进行磁盘配额,不同用户配额不同
    6.用户登录server后,可在自家目录权限下切换子目录
    7.删除文件和空文件夹
    8.查看当前目录下文件,新建文件夹
    
    A作业
    9.充分使用面向对象知识
    10传输过程中现实进度条 print()
    11断点续传  文件一致性校验
    超神
    作业

     

  • 相关阅读:
    python开发mysql:索引
    学习笔记之English
    本周学习小结(25/03
    本周学习小结(18/03
    本周学习小结(11/03
    学习笔记之Machine Learning Crash Course | Google Developers
    本周学习小结
    学习笔记之Fluent Python
    Leetcode 4. Median of Two Sorted Arrays
    学习笔记之Python爬虫
  • 原文地址:https://www.cnblogs.com/cangshuchirou/p/8624480.html
Copyright © 2011-2022 走看看