基础知识点
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)#其结果为摘要算法结果
先完成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断点续传 文件一致性校验 超神