我们在工作中经常遇到,你公司内的某一台电脑要去访问你的服务器或者一个服务端电脑,那么你是让每一台都进行连接吗?  那不可能的  你肯定要进行限定的

验证客户端链接的合法性:

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模块验证合法性 两者进行通信连接的更多相关文章

  1. Python网络编程(3)——SocketServer模块与简单并发服务器

    主要类型 该模块有四个比较主要的类,其中常用的是 TCPServer 和 UDPServer. 1. TCPServer 2. UDPServer 3. UnixStreamServer,类似于TCP ...

  2. Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信

    Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...

  3. 第四模块:网络编程进阶&数据库开发 第1章·网络编程进阶

    01-进程与程序的概念 02-操作系统介绍 03-操作系统发展历史-第一代计算机 04-操作系统发展历史-批处理系统 05-操作系统发展历史-多道技术 06-操作系统发展历史-分时操作系统 07-总结 ...

  4. 第四模块:网络编程进阶&数据库开发 练习

    练习题 基于queue模块实现线程池 import threading from multiprocessing import Queue class A(threading.Thread): def ...

  5. Python编程-网络编程进阶(IO复用、Socketserver)

    一.认证客户端的链接合法性 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加盐的方式来实现. 服务端 from socket import * imp ...

  6. Python学习笔记【第十四篇】:Python网络编程二黏包问题、socketserver、验证合法性

    TCP/IP网络通讯粘包问题 案例:模拟执行shell命令,服务器返回相应的类容.发送指令的客户端容错率暂无考虑,按照正确的指令发送即可. 服务端代码 # -*- coding: utf- -*- # ...

  7. 网络编程4 网络编程之FTP上传简单示例&socketserver介绍&验证合法性连接

    今日大纲: 1.FTP上传简单示例(详细代码) 2.socketserver简单示例&源码介绍 3.验证合法性连接//[秘钥加密(urandom,sendall)(注意:中文的!不能用)] 内 ...

  8. Python的网络编程[0] -> socket[1] -> socket 模块

    socket 1. 常量 / Constants AF_* 和 SOCK_* 分别属于 AddressFamily 和 SocketType 1.1 AF_*类常量 socket.AF_UNIX:  ...

  9. 第十三章:Python の 网络编程进阶(二)

    本課主題 SQLAlchemy - Core SQLAlchemy - ORM Paramiko 介紹和操作 上下文操作应用 初探堡垒机 SQLAlchemy - Core 连接 URL 通过 cre ...

随机推荐

  1. DIV盒子介绍

    1.盒子模型=网页布局的基石,由四部分组成: 边框(border).外边距(margin).内边距(padding).盒子中的内容(content) 2.设置顺序是顺时针:上.右.下.左. 三个值(上 ...

  2. Determining IP information for eth0...failed

    事故现场 eth0 Link encap:Ethernet HWaddr :0C::B6:D2:5A inet6 addr: fe80::20c:29ff:feb6:d25a/ Scope:Link ...

  3. 《Think Python》第7章学习笔记

    目录 7.1 重新赋值(Reassignment) 7.2 更新变量(Updating variables) 7.3 while 语句(The while statement) 7.4 break 语 ...

  4. laravel5.4学习--laravel基本路由

    最基本的 Laravel 路由只接收一个 URI 和一个闭包,并以此提供一个非常简单且优雅的定义路由方法: Route::get('foo', function () {return 'Hello W ...

  5. 微信小程序——动画操作时,rpx 和 px 的转换计算。

    嫌长版本: var rpx = 10000; var systemInfo = wx.getSystemInfoSync(); var px = rpx / 750 * systemInfo.wind ...

  6. nodejs设置服务端允许跨域

    //设置跨域访问 app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", ...

  7. android RecyclerView简单的使用

    转自:https://blog.csdn.net/lmj623565791/article/details/45059587 概述 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了, ...

  8. JS获取当前屏幕宽高

    Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...

  9. (JSP)关于手机端(尤其是苹果手机)pdf文件无法打开的解决方案

    流的方式下载附件 <!-- @author :daisy @date : 2011-12-04 @note : 从数据库中读取BLOB图片显示 --> <%@page import= ...

  10. gRPC的简单Go例子

    gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发 ...