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的基本语法知识,本文中的代码如果没有说明则都是运行在 ...
随机推荐
- MySQL入门(6)——流程控制
MySQL入门(6)--流程控制 IF语句 条件判断语句,逻辑与大多数编程语言相同,表示形式如下: IF condition THEN ... [ELSE condition THEN] ... [E ...
- python之模块与类库
什么是模块 模块是一组类,函数,方法所组成的.这些类都储存在文本文件中..py是python程序代码中的扩展名,模块可能是c或者python写的.模块的扩展名可以是.py或者是.pyc(经过编译的.p ...
- 剪切DOM节点中断transition执行【问题】
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 翻译:《实用的Python编程》06_03_Producers_consumers
目录 | 上一节 (6.2 自定义迭代) | 下一节 (6.4 生成器表达式) 6.3 生产者,消费者和管道 生成器在设置各种生产者/消费者问题(producer/consumer problems) ...
- 3、Spring教程之IOC创建对象方式
1.通过无参构造方法来创建 1.User.java public class User { private String name; public User() { System.out.printl ...
- OpenGL 绘制你的 github skyline 模型
前言 好久没更新博客了,上一篇文章还是在去年6月份,乍一看居然快要过去一年了,不时还能看到粉丝数和排名在涨,可是却一直没有内容更新,怪不好意思的- -(主要是一直没想好要写些什么,中间也有过一些想法, ...
- FFMPEG编译问题记录
一.ffmpeg下载与配置 下载地址 FFmpeg/FFmpeg (https://github.com/FFmpeg/FFmpeg) ~$ git clone https://github.com/ ...
- DAOS 分布式异步对象存储|相关组件
DAOS 的安装涉及多个组件,这些组件可以是集中式的,也可以是分布式的. DAOS 软件定义存储 (software-defined storage, SDS) 框架依赖于两种不同的通信通道: 用于带 ...
- SQLserver数据库安装教程
大家好,这期给大家带来一期SQL server的安装教程 下载SQL Server 2019 Developer 官方网址: https://www.microsoft.com/zh-cn/sql-s ...
- 201871030127-王明强 实验二 个人项目—《D{0-1}背包问题 》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)详细阅读<构建之法>学习并掌握PSP的具体流程(2)掌握背包问题,通过查阅相关资料,设计一个采用 ...