zoukankan      html  css  js  c++  java
  • 练习记录

    import socketserver
    import hmac,os,hashlib
    class MyServer(socketserver.BaseRequestHandler):
    #—————————————以下为主函数执行体———————————————————#
    def handle(self): #继承BaseRequestHandler后就要重写handle方法
    print(self.request) #相当于coon
    print(self.client_address) #相当于addr
    self.check()
    self.log_in()
    #—————————————以上为主函数执行体———————————————————#
    ####################################################################################
    #—————————————以下内容为验证连接合法性————————————————#
    '''验证用户合法性,创建密钥,验证用户加密功能'''
    def check(self):
    serect_key = b'pandaboy'
    print('开始用户端验证合法性....')
    random_num = os.urandom(32)
    self.request.sendall(random_num)
    h = hmac.new(serect_key, random_num)
    digest = h.digest()
    respone = self.request.recv(len(digest))
    judge = hmac.compare_digest(respone,digest)
    if judge ==True:
    print('验证已通过,可以传输')
    else:
    print('验证未通过,正在终止传输')
    self.request.close()
    #—————————————以上内容为验证连接合法性————————————————#
    ####################################################################################
    #—————————————以下内容为用户加密验证————————————————#
    def log_in(self):
    while True:
    try:
    #发送登录初始化信息
    self.request.sendall(bytes('请输入用户名:',encoding='utf-8'))
    username = self.request.recv(1024)
    print('用户名是:',username.decode('utf-8'))
    self.request.sendall(bytes('请输入密码:', encoding='utf-8'))
    password = self.request.recv(1024)
    print('密码是:', password.decode('utf-8'))
    with open(r'F:PythonPythonLeaningFTPServerdatabaseUserID ','r+',encoding='utf-8')
    as f:
    for line in f:
    l = {'username':line.split()[0],'password':line.split()[1]}
    if username.decode('utf-8') in l.get('username') and password.decode('utf-8') in l.get('password'):
    username1 = username.decode('utf-8')
    password2 = hashlib.md5(password)
    print('验证成功,正在登陆 当前用户是%s 密码显示是%s'%(username1,password2))
    self.request.sendall(bytes('您的用户名是:', encoding='utf-8'))
    break
    else :
    print('未找到该用户,正在退出')

    except Exception as e:
    print('检测到异常的形式是',e)
    break
    #—————————————以上内容为用户加密验证————————————————#



    if __name__ == '__main__':
    # 多线程服务端,可以实现并发,可以同时开启多个任务等待链接,ThreadingTCPServer(tuple格式的(ip+prot),类名)
    s = socketserver.ThreadingTCPServer(('192.168.55.1',8000),MyServer)
    #永久服务,链接循环
    s.serve_forever()
    Win a contest, win a challenge
  • 相关阅读:
    Vue DatePicker和不可用
    API图片路径和超链接语义化转换
    jQuery常用插件大全
    前端面试必备技巧整理
    堆与堆排序/Heap&Heap sort
    第k大的数
    POJ 2083 Fractal 分形题目
    最大子数组问题/Maximum Subarray
    一个简单的随机数生成算法
    成绩排序
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/8547317.html
Copyright © 2011-2022 走看看