练习记录
2018-03-12 06:41
106 查看
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:\Python\PythonLeaning\FTP\Server\database\UserID ','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('验证成功,正在登陆\n当前用户是%s\n密码显示是%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()
相关文章推荐
- ASP.NET数据库添加记录练习
- php生成随机密码的练习记录
- 黑马程序员-学习日志-练习用于记录程序运行次数
- 在freecodecamp练习的算法题心得记录
- java基础学习记录之数组冒泡排序的学习与练习三
- 记录——《C Primer Plus (第五版)》第七章编程练习第三题
- 记录——《C Primer Plus (第五版)》第七章编程练习第八题
- 记录——《C Primer Plus (第五版)》第八章编程练习第五题
- 【学习记录】5.二维数组以及数组练习挑战
- 【嵌入式系统学习记录】练习:判断一个字符串是不是另一个字符串的子串;(比如"ab"是"aabcd"的子串)
- Cookie练习之查看历史记录
- linux日记(练习记录):gzip,bzip2&tar
- 记录——《C Primer Plus (第五版)》第十章编程练习第二题
- CCF计算机软件能力认证试题练习-数列分段(Java参考答案学习记录)
- puppet练习记录一
- 练习记录
- 缓冲区溢出练习记录
- java基础学习记录之数组折半查找的学习与练习四
- 记录——《C Primer Plus (第五版)》第八章编程练习第六题
- 蓝桥java练习记录