SocketServer模块,hmac模块验证client合法性

 hmac模块:


1.模块初识:

import hmac
# h = hmac.new() #括号里要给它连个bytes类型,一个是自定义的secret_key,一个是你想进行加密的bytes
# 密文 = h.digest()
# hmac.compare_digest() #括号内传另外一个密文,看是否相等

h = hmac.new(b'secret',b'382835896')
digest = h.digest()
print(digest)
#>>>>  b'\xa4<\r\xf8\xec0\x7f\x8ao\xec\xa7(\xf7[t\xfb'

h = hmac.new(b'secret',b'382835896')
digest2 = h.digest()
print(hmac.compare_digest(digest,digest2)) #返回true
hmac模块初识

2.使用hmac模块,验证client端的合法性

import os
import hmac
import socket
secret_key = b'wwl'
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
def check_client(conn):msg = os.urandom(32)conn.send(msg)h = hmac.new(secret_key,msg)digest = h.digest()client_digest = conn.recv(1024)return hmac.compare_digest(digest,client_digest)conn,addr = sk.accept()
res = check_client(conn)
if res:print('合法的客户端')conn.close()
else:print('不合法的客户端')conn.close()
sk.close()
server端-hmac
import socket
import hmacsecret_key = b'wwl111'
sk = socket.socket()
sk.connect(('127.0.0.1',8080))msg = sk.recv(1024)
h = hmac.new(secret_key,msg)
client_digest = h.digest()
sk.send(client_digest)
sk.close()
client端-hamc

 

 

socketserver模块:


解读socketserver源码 —— http://www.cnblogs.com/Eva-J/p/5081851.html 

socketserver模块可以开启server端的多线程,让多个client端访问server端:

import socketserver
class MyServer(socketserver.BaseRequestHandler):def handle(self):#原来socket写的程序里所有和conn有关的操作,都挪到handle方法里#self.request#相当于conn  #一旦客户端断开连接了,handle方法也应该结束while True:msg = self.request.recv(1024).decode('utf-8')if msg == 'q':breakprint(msg)info = input('%s>>>> '%msg[:2])self.request.send(info.encode('utf-8'))if __name__ == '__main__':server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer)server.serve_forever()
server端-socketserver
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
while True:msg = input('>>>> ')if msg == 'q':breaksk.send(msg.encode('utf-8'))ret = sk.recv(1024).decode('utf-8')print(ret)
sk.close()
client端-socketserver

 

转载于:https://www.cnblogs.com/gkx0731/p/9727249.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以实例让你真正明白mapreduce---填空式、分布(分割)编程

问题导读&#xff1a;1.如何在讲mapreduce函数中的字符串等信息&#xff0c;输出到eclipse控制台&#xff1f;2.除了使用下文方法&#xff0c;还有其它方法输出到控制台&#xff1f;3.map中&#xff0c;系统默认接受的value值是什么&#xff1f;4.reduce输出不是自己想要的结果…

使用Spring编写和使用SOAP Web服务

在RESTful Web服务时代&#xff0c;我有机会使用SOAP Web Service。 为此&#xff0c;我选择了Spring &#xff0c;这是因为我们已经在项目中使用Spring作为后端框架&#xff0c;其次它提供了一种直观的方式来与具有明确定义的边界的服务进行交互&#xff0c;以通过WebServiceT…

前端---vscode 的基本使用

1. vscode 的基本介绍 全拼是 Visual Studio Code (简称 VS Code) 是由微软研发的一款免费、开源的跨平台代码编辑器&#xff0c;目前是前端(网页)开发使用最多的一款软件开发工具。 2. vscode 的安装 下载网址: Download Visual Studio Code - Mac, Linux, Windows选择对应…

建立Win32 Console Project时会出“error LNK1123” 错误

VS2010在经历一些更新后&#xff0c;建立Win32 Console Project时会出“error LNK1123” 错误&#xff0c;解决方案为将 项目|项目属性|配置属性|清单工具|输入和输出|嵌入清单 “是”改为“否”即可&#xff0c;但是没新建一个项目都要这样设置一次。在建立VS2010 Win32 Proje…

将同时共享的用户数量限制为20_共享充电宝市场需求及计划

18269363827 冯从2016-2018年这些时间中共享充电宝市场空间巨大&#xff0c;据权威数据显示共享充电宝市场整个用户数量实现了从0-5888万的巨大增幅&#xff0c;2019年共享充电市场用户规模将继续保持大幅增长至年底达1亿用户规模。在2019年充电宝租赁市场气势盛大&#xff0c;…

mysql中limit用法

使用查询语句的时候&#xff0c;经常要返回前几条或者中间某几行数据&#xff0c;这个时候怎么办呢&#xff1f;不用担心&#xff0c;mysql已 经为我们提供了这样一个功能。 SELECT*FROMtableLIMIT [offset,]rows |rows OFFSET offsetLIMIT 子句可以被用于强制 SELECT 语句返回…

Redis实现之整数集合

整数集合 整数集合&#xff08;insert&#xff09;是集合键的底层实现之一&#xff0c;当一个集合只包含整数值元素&#xff0c;并且这个集合的元素数量不多时&#xff0c;Redis就会使用整数集合作为集合键的底层实现。举个栗子&#xff0c;如果我们创建一个只包含五个元素的集…

启动rocketmq 报错_RocketMQ为什么要保证订阅关系的一致性?

前段时间有个朋友向我提了一个问题&#xff0c;他说在搭建 RocketMQ 集群过程中遇到了关于消费订阅的问题&#xff0c;具体问题如下&#xff1a;然后他发了报错的日志给我看&#xff1a;the consumers subscription not exist我第一时间在源码里找到了报错的位置&#xff1a;or…

scala rest_使用路标的Scala和Java的Twitter REST API

scala rest如果您已经阅读了此博客上的其他文章&#xff0c;您可能会知道我喜欢创建各种数据集的可视化。 我刚刚开始一个小项目&#xff0c;在这里我想可视化来自Twitter的一些数据。 为此&#xff0c;我想直接从Twitter检索有关关注者的信息和个人资料信息。 我实际上开始寻找…

MySql中关于某列中相同数值连续出现次数的统计

MySql中关于某列中相同数值连续出现次数的统计 原表如下&#xff1a; www.2cto.com 100 101 102 100 100 103 104 102 102 105 106 101 101 输出如下&#xff1a; www.2cto.com 100 1 101 2 102 3 100 4 100 4 103 5 104 6 10…

设计模式之- 外观模式(Facade Pattern)

外观模式 外观模式(Facade Pattern)&#xff1a;外部与一个子系统的通信必须通过一个统一的外观对象进行&#xff0c;为子系统中的一组接口提供一个一致的界面&#xff0c;外观模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。外观模式又称为门面模式&…

python的while和for循环

while语句&#xff0c;提供了编写通用循环的一种方法&#xff0c;而for语句是用来遍历序列对象内的元素&#xff0c;并对每个元素运行一个代码块。break,continue用在循环内&#xff0c;跳出整个循环或者跳出一次循环。 一、while循环 1、一般格式 格式&#xff1a;首行以及测试…

go build 无文件_GO笔记之详解GO的编译执行流程

上篇文章介绍了Golang在不同系统下的安装&#xff0c;并完成了经典的Hello World案例。在这个过程中&#xff0c;我们用到了go run命令&#xff0c;它完成源码从编译到执行的整个过程。今天来详细介绍下这个过程。简单理解&#xff0c;go run 可等价于 go build 执行。 build命…

使用Spring Security和jdbc的Spring Boot第2部分

在上一篇文章中&#xff0c;我们基于Spring Security发出请求的默认表架构实现了安全性。 考虑到用户和角色&#xff0c;应用程序开发人员使用适合其需求的架构。 Spring使我们能够指定所需的查询&#xff0c;以便检索用户名&#xff0c;密码和角色等信息。 我们的自定义表将…

MySQL的一些简单语句

mysql 统计 表的数量&#xff1a;SELECT COUNT(1) FROM information_schema.TABLES WHERE TABLE_SCHEMA 你的数据库; MySQL的一些基础语句&#xff1a; 行是记录 列是字段 创建库 CREATE DATABASE [IF NOT EXISTS] 数据库名 [参数[ 参数] [ 参数]...]; 参数: CHARACTER …

【题解】Atcoder ARC#90 F-Number of Digits

Atcoder刷不动的每日一题... 首先注意到一个事实&#xff1a;随着 \(l, r\) 的增大&#xff0c;\(f(r) - f(l)\) 会越来越小。考虑暴力处理出小数据的情况&#xff0c;我们可以发现对于左端点 \(f(l) < 7\) 的情况下&#xff0c;右端点的最大限度为 \(\frac{10^8}{8} 10^7…

java分页查询_面试官:数据量很大,分页查询很慢,有什么优化方案?

准备工作一般分页查询使用子查询优化使用 id 限定优化使用临时表优化关于数据表的id说明《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与…

Python逐行读取文件内容

f open("foo.txt") # 返回一个文件对象 line f.readline() # 调用文件的 readline()方法 while line:print line, # 后面跟 , 将忽略换行符# print(line, end )   # 在 Python 3中使用line f.readline()f.close() 也…

原型模式精讲

原型模式是一种创建型模式,也是属于创建对象的一种方式,像西游记里面的孙悟空吹猴毛也属于原型模式,克隆出来了一群的猴子猴孙,还有细胞的分裂,spring中的Bean的生命周期好像有一个单例还有个原型&#xff0c;那个原型就是每次请求都复制一个对象出来,官方的定义是:用原型实例指…

Python中map()函数浅析

MapReduce的设计灵感来自于函数式编程&#xff0c;这里不打算提MapReduce&#xff0c;就拿python中的map()函数来学习一下。 文档中的介绍在这里&#xff1a; map(function, iterable, ...) Apply function to every item of iterable and return a list of the results. If ad…