Python中Socket编程server与client简单的合法性认证
导入python自带的hmac模块对随机生成的位数32字节和自定义token进行加密处理
import os
msg = os.urandom(32) #随机生成
msg
Out[4]: b"F5\xfaD\x19\xfc]\x0f '>V/\xf8\x08}\x1f\x1a\xefR\xdc\x08\xd6Q\x1e3\rT\xe4J\x08\xcf"
Server端处理:
a. 服务端产生一个新的连接,对客户端发送一个32位字符串
b. hmac对token加密处理后接受客户端返回值进行比较
from socket import *
import hmac,os my_token = b'louis_swift' """
validate the connection
""" def conn_auth(conn):
print('validating connection...')
msg = os.urandom(32)
conn.sendall(msg)
h = hmac.new(my_token, msg)
digest = h.digest()
response = conn.recv(len(digest))
return hmac.compare_digest(response, digest) def data_handler(conn, bufsize=1024):
if not conn_auth(conn):
print('Invalid connection')
conn.close()
return
while True:
data = conn.recv(bufsize)
if not data:
break
conn.sendall(data.upper()) def server_handler(ip_port, bufsize, back_log=5):
socket_tcp_server = socket(AF_INET, SOCK_STREAM)
socket_tcp_server.bind(ip_port)
socket_tcp_server.listen(back_log) while True:
conn, addr = socket_tcp_server.accept()
data_handler(conn, bufsize) if __name__ == '__main__':
ip_port = ('127.0.0.1', 8080)
bufsize = 1024
server_handler(ip_port, bufsize)
Client端处理:
接收服务端的返回值进行hmac加密处理后再发送给服务端进行校验
from socket import *
import hmac,os my_token = b'louis_swift' def conn_auth(conn):
msg = conn.recv(32)
h = hmac.new(my_token, msg)
digest = h.digest()
conn.send(digest) def client_handler(ip_port, bufsize=1024):
socket_tcp_client = socket(AF_INET, SOCK_STREAM)
socket_tcp_client.connect(ip_port)
conn_auth(socket_tcp_client) while True:
data = input('>>: ').strip()
if not data:
continue
if data == 'quit':
break
socket_tcp_client.sendall(data.encode('utf-8'))
response = socket_tcp_client.recv(bufsize)
print('response data from server:', response)
socket_tcp_client.close() if __name__ == '__main__':
ip_port = ('127.0.0.1', 8080)
bufsize = 1024
client_handler(ip_port, bufsize)
Python中Socket编程server与client简单的合法性认证的更多相关文章
- Linux下的C Socket编程 -- server端的简单示例
Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...
- python中socket编程
一.网络协议 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器 C/S架构与socket的关系: ...
- Python中Socket编程(TCP、UDP)
1. TCP协议下的如何解决粘包问题 TCP(transport control protocol 传输控制协议) 使用Nagle算法,将多次间隔较小且数据量小的数据,合并成大的数据块:接受端无法识 ...
- python之socket编程(一)
socket之前我们先来熟悉回忆几个知识点. OSI七层模型 OSI(Open System Interconnection)参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标 ...
- 转:Python 的 Socket 编程教程
这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs. ...
- 操作系统底层原理与Python中socket解读
目录 操作系统底层原理 网络通信原理 网络基础架构 局域网与交换机/网络常见术语 OSI七层协议 TCP/IP五层模型讲解 Python中Socket模块解读 TCP协议和UDP协议 操作系统底层原理 ...
- Python 3 socket 编程
Python 3 socket编程 一 客户端/服务器架构 互联网中处处是C/S架构 1.C/S结构,即Client/Server(客户端/服务器)结构 2.在互联网中处处可见c/s架构 比如说浏览器 ...
- python中Socket的使用
说明 前一段时间学习python网络编程,完成简单的通过python实现网络通信的功能.现在,将python中Socket 通信的基本实现过程做一个记录备份. Socket通信 python 中的so ...
- 最基础的Python的socket编程入门教程
最基础的Python的socket编程入门教程 本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在 ...
随机推荐
- Everything about WSL 1 you want to know
关于 WSL 1 入门,你应该知道这些 如有错误,欢迎指出 参考: WSL 文档 VMware Workstation Pro 文档 概述 通过 WSL 2 来认识 WSL 1 什么是 WSL 2? ...
- Visual Studio添加引用的方式
- 【LiteOS】LiteOS消息队列-实战
目录 前言 链接 参考 笔录草稿 创建测试任务 部分源码 前言 链接 LiteOS源码链接 常见问题 华为开发者社区 华为LiteOS官方教程 我的gitee-LiteOS-mcu 参考 上面链接 笔 ...
- abp加DDD开发:低耦合、可复用、可扩展的【工单】业务模块-简介和集成
前言 很多场景[单体+模块化]比微服务更合适,开发难度低.代码可复用性强.可扩展性强.模块化开发有些难点,模块启动与卸载.模块之间的依赖和通讯.asp.net core abp为我们提供了模块化开发能 ...
- MySQL提升笔记(1):MySQL逻辑架构
深入学习MySQL,从概览MySQL逻辑架构开始. 首先来看一下MySQL的逻辑架构图: MySQL逻辑架构大概可以分为三层: 客户端:最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服 ...
- 一般实现分布式锁都有哪些方式?使用redis如何设计分布式锁?使用zk来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高?
#(1)redis分布式锁 官方叫做RedLock算法,是redis官方支持的分布式锁算法. 这个分布式锁有3个重要的考量点,互斥(只能有一个客户端获取锁),不能死锁,容错(大部分redis节点创建了 ...
- day-9 xctf-int_overflow
xctf-int_overflow 题目传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&am ...
- 使用 EPPlus 封装的 excel 表格导入功能 (二) delegate 委托 --永远滴神
使用 EPPlus 封装的 excel 表格导入功能 (二) delegate 委托 --永远滴神 前言 接上一篇 使用 EPPlus 封装的 excel 表格导入功能 (一) 前一篇的是大概能用但是 ...
- Chrome/Chromium的实验性功能+扩展推荐,让你的Chrome/Chromium起飞!
1 实验性功能 Chrome/Chromium内置了一些很酷的实验性功能,打开 chrome://flags 即可访问.打开这些实验性功能后,浏览器的使用体验会更好,这里Chrome的版本为80.0. ...
- Jmeter接口测试-MD5加密-请求验签(完整流程)
第一部分:先准备好Jmeter 1.在开始编写脚本之前,先要确保你的Jmeter能够正常运行.若你还没有安装Jmeter,可参考以下方法: A.Jmeter需要java运行环境,所以需要下载JDK,J ...