网络编程进阶---->>> 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 ...
随机推荐
- MySQL 连接注意事项
外连接 A LEFT JOIN B join_condition 数据表B的结果集依赖数据表A 数据表A的结果集根据左连接条件依赖所有数据表 B表除外). 左外连接条件决定如何检索数据表B(在没有指定 ...
- javascript的JSON对象
JSON包含用于解析JSON(javascript object notation)的方法,将值转换成JSON.JSON不可以被调用或者用作构造函数. JSON对象保存在大括号内,JSON数组保存在中 ...
- JS DATE对象详解
1.建立时间对象:可获取年,月,日,星期,时,分,秒 var d = new Date(); console.log(d.getFullYear()+'年'+d.getMonth()+'月'+d.ge ...
- python-cgi-demo
简单的Python CGI 在linux平台实现注意:路径是以当前路径为根目录 ,Python文件一般放在/cgi-bin/目录下在linux命令行运行:python -m CGIHTTPServ ...
- Hive初始
一.Hive概念 二.为什么要是用Hive 三.Hive优缺点 四.hive架构 一.Hive概念 Hive最初是应Facebook每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的 ...
- spring 线程异步执行
多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了.spring封装了Java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性,具体来说 ...
- leetcode简单题目两道(2)
Problem Given an integer, write a function to determine if it is a power of three. Follow up: Could ...
- handler与anr机制
1. handler 参考资料:http://blog.csdn.net/ly502541243/article/details/52062179/ 首先说明Android的两个特性: 1. 只能在主 ...
- 仿58同城UITableViewCell动画
之前看58同城APP有一个页面中Cell依次从右向左移动,今天试着做了下. 在做的过程中也遇到了几个小的问题,也算是注意点吧. 1.Cell出现时每个Cell的动画时间一样,导致没有依次移动的效果. ...
- 工作中,ES6 可能掌握这些就足够了
刚开始用vue或者react,很多时候我们都会把ES6这个大兄弟加入我们的技术栈中.但是ES6那么多那么多特性,我们需要全部都掌握吗?秉着二八原则,掌握好常用的,有用的这个可以让我们快速起飞. 接下来 ...