网络编程进阶---->>> hamc模块 socketserver模块验证合法性 两者进行通信连接
我们在工作中经常遇到,你公司内的某一台电脑要去访问你的服务器或者一个服务端电脑,那么你是让每一台都进行连接吗? 那不可能的 你肯定要进行限定的
验证客户端链接的合法性:
hamc模块
hamc也是一个加密的模块
但是只能对字节进行加密
import hmac
s = '老王'.encode('UTF-8')
n = hmac.new(key = s)
print(n.hexdigest()) # 6afd402b51938e21ee2ace13ddf0ead1
它的加密的后面还可以选择加密的情况 但是只能对字节
import hmac
import os
t = os.urandom(30) # os.urandom 是随机获取字节数
s = '老王'.encode('UTF-8')
n = hmac.new(key = s,msg= t) # 只对30个字节进行加密
print(n.hexdigest()) # 909271871e55dc492febe63fea8776dd
这个时候我们就用到了一个类似于之前的hashlib模块的加密了hamc模块,hmac模块是专门用来判断合法性的
server端口 import os
import hmac
import socket
soctet_key = '老王在隔壁'.encode('UTF-8')
sk = socket.socket()
sk.bind(('127.0.0.3',9080))
sk.listen()
while True:
while True:
try: conn,addr = sk.accept()
random_bytes = os.urandom(30) # 随机获取一段字节 os模块的os.uurandom是专门随机获取字节的
conn.send(random_bytes) # 先把你的加密方式发送过去
obj = hmac.new(key = socket_key,smg = random_bytes ) # 这是运用hmac对你的信息进行加密 前面的是内容后面是加密的方式
ret = obj.hecdigest()
msg = conn.recv(1024).decode('UTF-8')
if msg == ret :print('是合法的')
else:conn.close() finally:
sk.close()
break client端口: import socket
import hmac
socket_key = '老王在隔壁'.encode('UTF-8')
sk = socket.socket()
sk.connect(('127.0.0.3',9080))
urandom = sk.recv(1024) # 接收你的加密方式
hamc_obj = hmac.new(key = socket_key,msg = urandom)
sk.send(hamc_obj.hexdigest().encode()) # 把你的加密结果发送 让服务端进行对比
sk.close()
我们一直以来学的TCP服务都是以一个端口一个端口进行的连接,如果你想要使用TCP协议进行多次客户端和服务端进行连接的时候, 我们可以用socketserve模块来进行多次连接
socketserver模块:
server 端 import socketserver
# 并发编程
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
self.request.send(b'hello')
msg = self.recv(1024)
print(msg) if __name__ == '__main__':
socketserver.TCPServer.allow_reuse_address = True
server = socketserver.ThreadingTCPServer(('127.0.0.1',9000),MyServer)
server.serve_forever() client端 import socket
sk = socket.socket()
sk.connect(('127.0.0.1',9000))
msg = sk.recv(1024)
print(msg)
sk.send(b'bye')
sk.close()
socketserver是解决TCP的并发编程的
网络编程进阶---->>> hamc模块 socketserver模块验证合法性 两者进行通信连接的更多相关文章
- Python网络编程(3)——SocketServer模块与简单并发服务器
主要类型 该模块有四个比较主要的类,其中常用的是 TCPServer 和 UDPServer. 1. TCPServer 2. UDPServer 3. UnixStreamServer,类似于TCP ...
- Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信
Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...
- 第四模块:网络编程进阶&数据库开发 第1章·网络编程进阶
01-进程与程序的概念 02-操作系统介绍 03-操作系统发展历史-第一代计算机 04-操作系统发展历史-批处理系统 05-操作系统发展历史-多道技术 06-操作系统发展历史-分时操作系统 07-总结 ...
- 第四模块:网络编程进阶&数据库开发 练习
练习题 基于queue模块实现线程池 import threading from multiprocessing import Queue class A(threading.Thread): def ...
- Python编程-网络编程进阶(IO复用、Socketserver)
一.认证客户端的链接合法性 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加盐的方式来实现. 服务端 from socket import * imp ...
- Python学习笔记【第十四篇】:Python网络编程二黏包问题、socketserver、验证合法性
TCP/IP网络通讯粘包问题 案例:模拟执行shell命令,服务器返回相应的类容.发送指令的客户端容错率暂无考虑,按照正确的指令发送即可. 服务端代码 # -*- coding: utf- -*- # ...
- 网络编程4 网络编程之FTP上传简单示例&socketserver介绍&验证合法性连接
今日大纲: 1.FTP上传简单示例(详细代码) 2.socketserver简单示例&源码介绍 3.验证合法性连接//[秘钥加密(urandom,sendall)(注意:中文的!不能用)] 内 ...
- Python的网络编程[0] -> socket[1] -> socket 模块
socket 1. 常量 / Constants AF_* 和 SOCK_* 分别属于 AddressFamily 和 SocketType 1.1 AF_*类常量 socket.AF_UNIX: ...
- 第十三章:Python の 网络编程进阶(二)
本課主題 SQLAlchemy - Core SQLAlchemy - ORM Paramiko 介紹和操作 上下文操作应用 初探堡垒机 SQLAlchemy - Core 连接 URL 通过 cre ...
随机推荐
- web服务器/应用服务器
1.概念 Web服务器的基本功能就是提供Web信息浏览服务.它只需支持HTTP协议.HTML文档格式及URL.与客户端的网络浏览器配合.因为Web服务器主要支持的协议就是HTTP,所以通常情况下HTT ...
- js读取cookie信息
1. 第一种方式读取cookie信息:用document.cookie.split(“; “)的方式把字符串分割成几个段,然后遍历整个数组 //javascript方法 function getCoo ...
- chrome bookmarks location
.config/google-chrome/Default file: Bookmarks
- rails 中 create, new, build, save 的用法以及误区汇总 (转)
自己很初级,初级的不能再初级,所以初次接触rails的时候,对于里面的create,new,build等方法不是很了解,用的很混乱,导致经常出现不必要的bug,很苦恼,决定,总结一下,结合网上已有资源 ...
- PHP高级工程师面试 - 笔试题
Part1:HTTP协议 1.状态码的含义 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 100 (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求 ...
- C++ 语法积累20161015
1.break 作用:用于终止当前循环(跳出循环体). 遇到最多的应该是在双层循环体中的使用: (1)在内循环体中,遇到break,则直接跳出内循环体,再次执行外循环体. (2) 在外循环体中,bre ...
- Springboot @ResponseBody返回中文乱码
最近我在把Spring 项目改造Springboot,遇到一个问题@ResponseBody返回中文乱码,因为response返回的content-type一直是application/json;ch ...
- groovy实现循环、交换变量、多赋值、?.运算符
/** * Created by Jxy on 2019/1/3 10:01 * 1.实现循环的方式 * 2.安全导航操作符---?. * 3.一次性赋值给多个变量 */ 0.upto(2){ pri ...
- apache-kylin 权威指南—读书笔记
1. 概述 kylin 是 OLAP 引擎,采用多维立方体预计算技术,可将大数据的 SQL 查询速度提升到亚秒级别. 需求: 虽然像 spark,hive 等使用 MPP 大规模并行处理和列式存储的方 ...
- HTML基本结构及标签样式
<!DOCTYPE html>————声明 <html> <head>————头部设置信息 <title>文件标题</title> < ...