hmac和socketserver
一,hmac
验证客户端的合法性
hmac,检测客户端是否合法,不依赖登录认证
server
import os,socket,hmac
sk=socket.socket()
sk.bind(('127.0.0.1',8090))
sk.listen()
aa=b'hello'
def bb(conn):
msg=os.urandom(32)
conn.send(msg)
h=hmac.new(aa,msg)
digest=h.digest()
client_digest=conn.recv(1024)
return hmac.compare_digest(digest,client_digest)
conn,addr=sk.accept()
res=bb(conn)
if res:
print('合法')
conn.close()
else:
print('不合法')
conn.close()
sk.close()
client
import hmac,socket sk=socket.socket()
aa=b'wohao'
sk.connect(('127.0.0.1',8090))
msg=sk.recv(1024)
h=hmac.new(aa,msg)
digest=h.digest()
sk.send(digest)
sk.close()
结果:
C:\Users\hc\AppData\Local\Programs\Python\Python36\python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.47396/server.py
不合法 Process finished with exit code 0
server
import os,socket,hmac
sk=socket.socket()
sk.bind(('127.0.0.1',8090))
sk.listen()
aa=b'hello'
def bb(conn):
msg=os.urandom(32)
conn.send(msg)
h=hmac.new(aa,msg)
digest=h.digest()
client_digest=conn.recv(1024)
return hmac.compare_digest(digest,client_digest)
conn,addr=sk.accept()
res=bb(conn)
if res:
print('合法')
conn.close()
else:
print('不合法')
conn.close()
sk.close()
client
import hmac,socket sk=socket.socket()
aa=b'hello'
sk.connect(('127.0.0.1',8090))
msg=sk.recv(1024)
h=hmac.new(aa,msg)
digest=h.digest()
sk.send(digest)
sk.close()
结果:
C:\Users\hc\AppData\Local\Programs\Python\Python36\python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.47396/server.py
合法 Process finished with exit code 0
二 socketserver
server
import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
while 1:
print(self.client_address)
msg=self.request.recv(1024).decode('utf-8')
if msg=='q':break
print(msg)
info=input('%s>>'%msg[:2])
self.request.send(info.encode('utf-8'))
if __name__=='__main__':
server=socketserver.ThreadingTCPServer(('127.0.0.1',8090),MyServer)
server.allow_reuse_address=True
server.serve_forever()
client
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8090))
while True:
msg = input('>>>')
if msg == 'q':
sk.send(b'q')
break
sk.send(('美团 :'+msg).encode('utf-8'))
ret = sk.recv(1024).decode('utf-8')
print(ret)
sk.close()
client2
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8090))
while True:
msg = input('>>>')
if msg == 'q':
sk.send(b'q')
break
sk.send(('大众点评 :'+msg).encode('utf-8'))
ret = sk.recv(1024).decode('utf-8')
print(ret)
sk.close()
结果:
server
C:\Users\hc\AppData\Local\Programs\Python\Python36\python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.27733/server.py
('127.0.0.1', 64769)
('127.0.0.1', 64795)
美团 :l
美团>>i
('127.0.0.1', 64769)
大众点评 :l
大众>>9
('127.0.0.1', 64795)
client
>>l
i
>>>
client2
C:\Users\hc\AppData\Local\Programs\Python\Python36\python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.27936/client2.py
>>>l
9
hmac和socketserver的更多相关文章
- SocketServer模块,hmac模块验证client合法性
hmac模块: 1.模块初识: import hmac # h = hmac.new() #括号里要给它连个bytes类型,一个是自定义的secret_key,一个是你想进行加密的bytes # 密文 ...
- python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)
先来回顾一下昨天的内容 黏包现象粘包现象的成因 : tcp协议的特点 面向流的 为了保证可靠传输 所以有很多优化的机制 无边界 所有在连接建立的基础上传递的数据之间没有界限 收发消息很有可能不完全相 ...
- 认证客户端的链接与socketserver实现并发
from socket import * import hmac,os secret_key=b'linhaifeng bang bang bang' def conn_auth(conn): ''' ...
- Python之socketserver模块和验证客户端链接的合法性
验证客户端链接的合法性 分布式系统中实现一个简单的客户端链接认证功能 #_*_coding:utf-8_*_ from socket import * import hmac,os secret_ke ...
- socketserver和socket的补充(验证客户端合法性)
一.socket的补充 1.参数 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 参数说明: family 地址系 ...
- 网络编程之socketserver以及socket更多方法
关于socketserver 关于socket的更多方法 服务端套接字函数: s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始tcp监听 s.accept () 被动接受tc ...
- Python学习笔记【第十四篇】:Python网络编程二黏包问题、socketserver、验证合法性
TCP/IP网络通讯粘包问题 案例:模拟执行shell命令,服务器返回相应的类容.发送指令的客户端容错率暂无考虑,按照正确的指令发送即可. 服务端代码 # -*- coding: utf- -*- # ...
- socketv 验证客户端链接的合法性,socketserver
补充: send()与sendall() 在python socket编程中,有两个发送TCP的函数,send()与sendall(),区别如下: socket.send(string[, flags ...
- python基础(15)-socket网络编程&socketserver
socket 参数及方法说明 初始化参数 sk = socket.socket(参数1,参数2,参数3) 参数1:地址簇 socket.AF_INET IPv4(默认) socket.AF_INET6 ...
随机推荐
- Git修改历史commit的author信息
前言 "嘀嗒嘀嗒",抬头看向墙上的钟表,此时已是凌晨1点.小明终于把Go语言圣经第二章的笔记写完,保存commit,提交,然后睡觉. 额,等等,不对,小明发现他用的是公司的git账 ...
- Java基础和常用框架的面试题
前言 最近学校也催着找工作了,于是刷了一些面试题,学习了几篇大佬优秀的博客,总结了一些自认为重要的知识点:听不少职场前辈说,对于应届毕业生,面试时只要能说到核心重要的点,围绕这个点说一些自己的看法,面 ...
- Golang slice作为函数参数
slice底层其实是一个结构体,len.cap.array分别表示长度.容量.底层数组的地址,当slice作为函数的参数传递的时候,跟普通结构体的传递是没有区别的:如果直接传slice,实参slice ...
- promise错误处理的三种方法
promise碰到then,也就是resolve或者reject的时候是异步的,所以try...catch对它是没有用的 1.then(resolve,reject); then方法中第二个回调,是 ...
- PHP小数点后保留位数并四舍五入
ceil() 函数向上舍入为最接近的整数,进一(k>0).ceil(0.60) --> 1ceil(0.40) --> 1ceil(5) --> 5ceil(5.1) --&g ...
- NOIP模拟50
过分的神圣,往往比恶魔更加恶质. 前言 最大的一个收获就是不要动不动就码线段树,一定要审清楚题目之后再码!! T1 一开始理解错题了,以为答案是就是 \(\dfrac{\operatorname{le ...
- Linux - centos7.X 安裝 Python 3.7
说明 全部操作都在 root 用户下执行 安装编译相关工具 yum -y groupinstall "Development tools" yum -y install zlib- ...
- 运输层协议:TCP和UDP
运输层简介 运输层的通信实体不再是主机,而是主机中的进程.运输层的通信是一台主机的进程和另一台主机的进程进行数据交换. 运输层作用 运输层向上层的应用层提供通信服务 运输层为进程提供端到端的通信 运输 ...
- SpringMVC基于注解开发
一. 1.配置 适配器的作用就是规定怎么调控制器: 2.使用 controller代码 三.
- excel中if函数的用法
IF函数有三个参数,语法如下: =IF(条件判断, 结果为真返回值, 结果为假返回值) 第一参数是条件判断,比如说"A1="百度""或"21>3 ...