python全栈开发 * 35 知识点汇总 * 180720
35 socket 一些常用方法 验证客户端信息 添加随机字符串 socketserver模块
一.socket模块中一些常用方法
1.send和sendall的区别
2.conn.getpeername conn/ sk.getsockname
3.setsockopt() 3.getsockopt()
4.sk.setblocking()
5.settimeout() gettimeout() 二.客户端验证相关事宜
第一版 验证客户端
服务器:
import socket
import hashlib
sk=socket.socket()
sk.bind(("127.0.0.1",8809))
sk.listen()
conn,addr=sk.accept()
key="天王盖地虎"
ch="你好"
conn.send(ch.encode("utf-8"))
md5_obj=hashlib.md5(key.encode("utf-8"))
md5_obj.update(ch.encode("utf-8"))
re=md5_obj.hexdigest()
client_re=conn.recv(1024).decode("utf-8")
if re==client_re:
print("你好,老铁")
else:
print("你是假冒用户")
conn.close()
sk.close()
客户端:
import socket
import hashlib
sk=socket.socket()
sk.connect(("127.0.0.1",8809))
key="天王盖地虎" #宝塔镇河妖
ch=sk.recv(1024)
md5_obj=hashlib.md5(key.encode("utf-8"))
md5_obj.update(ch)
re=md5_obj.hexdigest()
sk.send(re.encode("utf-8")) sk.close()
第二版 添加随机字符串
服务器 (import os os.urandom(num))
import socket
import hashlib
import os
sk=socket.socket()
sk.bind(("127.0.0.1",8809))
sk.listen()
conn,addr=sk.accept()
key="天王盖地虎"
ch=os.urandom(10) #===>字节
conn.send(ch)
md5_obj=hashlib.md5(key.encode("utf-8"))
md5_obj.update(ch)
re=md5_obj.hexdigest() #===>字符串
client_re=conn.recv(1024).decode("utf-8")
if re==client_re:
print("你好,老铁")
else:
print("你是假冒用户")
conn.close()
sk.close()
客户端
import socket
import hashlib
sk=socket.socket()
sk.connect(("127.0.0.1",8809))
key="天王盖地虎" #宝塔镇河妖
ch=sk.recv(1024)
print(ch)
md5_obj=hashlib.md5(key.encode("utf-8")) #(括号里应该是字节)
md5_obj.update(ch) #(括号里应该是字节)
re=md5_obj.hexdigest() #====>字节
sk.send(re.encode("utf-8")) sk.close()
第三版 用hmac加密方法
服务器
import socket
import hmac #hmac 模块 (内置模块)
import os
sk=socket.socket()
sk.bind(("127.0.0.1",8809))
sk.listen()
conn,addr=sk.accept()
key="天王盖地虎" # 加盐
ch=os.urandom(10) # os中的urandom方法(获取随机字符串) ===>字节
conn.send(ch) #字节可以直接发送,无需编码
obj=hmac.new(key.encode("utf-8"),ch) #模块hmac中的new方法给随机字符串 ch 加密赋值给obj
re=obj.digest() #=====>直接返回Bytes类型
# md5_obj=hashlib.md5(key.encode("utf-8"))
# md5_obj.update(ch)
# re=md5_obj.hexdigest() #===>字符串
client_re=conn.recv(1024)
if re==client_re:
print("你好,老铁")
else:
print("你是假冒用户")
conn.close()
sk.close() 客户端
import socket
import hmac # 内置模块hmac
sk=socket.socket()
sk.connect(("127.0.0.1",8809))
key="天王盖地虎" # 加盐
ch=sk.recv(1024) #接收到服务器发来的随机字符串 字节形式
obj=hmac.new(key.encode("utf-8"),ch) #用模块hmac中的new方法给随机字符串加密,括号里必须都是字节形式
re=obj.digest() #返回字节形式
# md5_obj=hashlib.md5(key.encode("utf-8")) #(括号里应该是字节)
# md5_obj.update(ch) #(括号里应该是字节)
# re=md5_obj.hexdigest() #====>字符串
sk.send(re) # 直接发送给服务器 三.socketserver模块tcp中一个服务器同时连接多个客户端
服务器
客户登陆验证
import socketserver
import json
import hashlib
class Myserver(socketserver.BaseRequestHandler):
def handle(self):
dic_str=self.request.recv(1024).decode("utf-8")
dic=json.loads(dic_str)
with open("user_info",encoding="utf-8")as f:
for i in f:
username,password=i.split("|")
if username==dic["username"]:
md5_obj=hashlib.md5(dic["username"].encode('utf-8'))
md5_obj.update(dic["password"].encode("utf-8"))
re=md5_obj.hexdigest()
if re == password.strip():
self.request.send(b'success')
else:
self.request.send(b'failed')
break
else:
self.request.send("用户名不存在".encode("utf-8")) server=socketserver.TCPServer(("127.0.0.1",8810),Myserver)
server.serve_forever()
客户端
import socket
import json
import time sk=socket.socket()
sk.connect(("127.0.0.1",8810)) dic={"username":None,"password":None}
while 1:
username=input("姓名:")
password=input("密码:")
dic["username"]=username
dic["password"]=password
dic_str=json.dumps(dic)
sk.send(dic_str.encode("utf-8"))
print(sk.recv(1024))
python全栈开发 * 35 知识点汇总 * 180720的更多相关文章
- python全栈开发 * 10知识点汇总 * 180612
10 函数进阶 知识点汇总 一.动态参数 形参的第三种1.动态接收位置传参 表达:*args (在参数位置编写 * 表⽰接收任意内容) (1)动态位置参数def eat(*args): print(a ...
- python全栈开发 * 32知识点汇总 * 180717
32 网络编程 (一)一.架构 定义:程序员开发的一种模式. 分类: C/S 架构 C/S即:Client与Server , 客户端/ 服务器模式 . 缺点 : 冗余 B/S 架构 Browser与S ...
- python全栈开发 * 01知识点汇总 * 180530
一 python简介. 1.创始人: 吉多 .范罗苏姆 \ (Guido van Rossum). 2.时间 : 1989年. 3.主要应用领域 : 云计算 \ WEB开发 \ ...
- python全栈开发 * 26知识点汇总 * 180709
26 logging collections random 模块 一.logging低配:日志不能写入文件与显示同时进行 import logging logging.basicConfig(leve ...
- python全栈开发 * 12 知识点汇总 * 180530
12 知识点总结 装饰器进阶 ⼀. 通⽤装饰器的回顾1.开闭原则: 对增加功能开放. 对修改代码封闭2.装饰器的作⽤: 在不改变原有代码的基础上给⼀个函数增加功能3.通⽤装饰器的写法:def wrap ...
- python全栈开发 * 36知识点汇总 * 180721
36 操作系统的发展史 进程一.手工操作--穿孔卡片 1.内容: 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制 台开关启动程序针对 ...
- python全栈开发 * 33 知识点汇总 * 180718
33 udp协议编码 显示客户端名字,输出带颜色的内容 udp协议的时间同步机制 #一.udp 协议编码 一个服务器,多个客户端#服务器:# import socket# sk=socket.sock ...
- python全栈开发 * 31知识点汇总 * 180716
31 模块和包一.模块(一)模块的种类:内置模块,自定义模块,扩展模块第三方模块(二)自定义模块 1.模块的创建 : 新建一个py文件. 2.模块名 : 模块名需要符合变量的命名规范. 3.模块的导入 ...
- python全栈开发 * 24 知识点汇总 * 180705
24 模块-------序列化一.什么是模块 模块:py文件就是一个模块.二.模块的分类:(1)内置模块 (登录模块,时间模块,sys模块,os模块)(2)扩展模块 (itchat 微信有关,爬虫,b ...
随机推荐
- 转【微信小程序 四】二维码生成/扫描二维码
原文:https://blog.csdn.net/xbw12138/article/details/75213274 前端 二维码生成 二维码要求:每分钟刷新一次,模拟了个鸡肋,添加了个按分钟显示的时 ...
- iOS开发之Found a swap file by the name ".podfile.swp" owned by: Netban dated:...file name: ~N...
Found a swap file by the name ".podfile.swp" owned by: Netban dated: Fri Mar 24 13:57:27 2 ...
- Fedora 25-64位操作系统中安装配置Hyperledger Fabric过程
安装过程参照Hyperledger Fabric的官方文档,文档地址:http://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html 0 ...
- vue的js文件中获取vue实例
1.main.js导出vue实例: var vue = new Vue({ el: '#app', router, components: { App }, template: '<App/&g ...
- .NET Core 2.1 IIS 部署 出现500.19 错误
HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 最后发现是由于项目从 .NET Core 1.0 升级到 .NET Co ...
- C语言 · FBI树
算法训练 FBI树 时间限制:1.0s 内存限制:256.0MB 锦囊1 二叉树. 问题描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I ...
- 会使用基本的Render函数后,就会想,这怎么用 v-for/v-if/v-model;我写个vue Render函数进阶
https://blog.csdn.net/wngzhem/article/details/54291024
- Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数)
[转]Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的数据至关重要,关系着优化和分析出现的问题.我是在运维过程中要用到的.因此,今天给出Wind ...
- Ubuntu下安装antlr-4.7.1
简介:antlr工具将语法文件转换成可以识别该语法文件所描述的语言的程序. 例如:给定一个识别json的语法,antlr工具将会根据该语法生成一个程序,该程序可以通过antlr运行库来识别输入的jso ...
- VS2017 调试 Unity3D 脚本
1. 安装Unity3D最新版本. https://unity3d.com/cn/get-unity/download 2. 安装Visual Studio Community 2017. htt ...