验证客户端的一致性

基础知识点

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断点续传  文件一致性校验
超神
作业

 

原文地址:https://www.cnblogs.com/cangshuchirou/p/8624480.html