导入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简单的合法性认证的更多相关文章

  1. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  2. python中socket编程

    一.网络协议 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器 C/S架构与socket的关系: ...

  3. Python中Socket编程(TCP、UDP)

    1. TCP协议下的如何解决粘包问题 TCP(transport control protocol 传输控制协议)  使用Nagle算法,将多次间隔较小且数据量小的数据,合并成大的数据块:接受端无法识 ...

  4. python之socket编程(一)

    socket之前我们先来熟悉回忆几个知识点. OSI七层模型 OSI(Open System Interconnection)参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标 ...

  5. 转:Python 的 Socket 编程教程

    这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs. ...

  6. 操作系统底层原理与Python中socket解读

    目录 操作系统底层原理 网络通信原理 网络基础架构 局域网与交换机/网络常见术语 OSI七层协议 TCP/IP五层模型讲解 Python中Socket模块解读 TCP协议和UDP协议 操作系统底层原理 ...

  7. Python 3 socket 编程

    Python 3 socket编程 一 客户端/服务器架构 互联网中处处是C/S架构 1.C/S结构,即Client/Server(客户端/服务器)结构 2.在互联网中处处可见c/s架构 比如说浏览器 ...

  8. python中Socket的使用

    说明 前一段时间学习python网络编程,完成简单的通过python实现网络通信的功能.现在,将python中Socket 通信的基本实现过程做一个记录备份. Socket通信 python 中的so ...

  9. 最基础的Python的socket编程入门教程

    最基础的Python的socket编程入门教程 本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在 ...

随机推荐

  1. .NET并发编程-任务函数并行

    本系列学习在.NET中的并发并行编程模式,实战技巧 请问普通: 被门夹过的核桃还能补脑吗 本小节开始学习基于任务的函数式并行.本系列保证最少代码呈现量,虽然talk is cheap, show me ...

  2. ApiTesting全链路接口自动化测试框架 - 实战应用

    场景一.添加公共配置 我们在做自动化开始的时候,一般有很多公共的环境配置,比如host.token.user等等,如果这些放在用例中,一旦修改,将非常的不便.麻烦(尤其切换环境). 所以这里我们提供了 ...

  3. 互联网开发工具之idea项目打jar包

    一.idea打jar包 步骤一:创建一个简单的java项目:如下图所示 `public class Main { public static void main(String[] args) { Sy ...

  4. [图论]剑鱼行动:kruskal

    剑鱼行动 目录 剑鱼行动 Description Input Output Sample Input Sample Output 解析 难点 代码 Description 给出N个点的坐标,对它们建立 ...

  5. JVMGC+Spring Boot生产部署和调参优化

    一.微服务开发完成,IDEA进行maven clean和package 出现BUILD SUCCESS说明打包成功 二.要求微服务启动时,配置JVM GC调优参数 p.p1 { margin: 0; ...

  6. spring-cloud-oauth2 认证授权

    什么是OAuth2? OAuth2是一个关于授权的开放标准,核心思路是通过各类认证手段(具体什么手段OAuth2不关心)认证用户身份,并颁发token(令牌),使得第三方应用可以使用该令牌在限定时间. ...

  7. pytorch从入门到放弃(目录)

    目录 前置基础 Pytorch从入门到放弃 推荐阅读 前置基础 Python从入门到放弃(目录) 人工智能(目录) Pytorch从入门到放弃 01_pytorch和tensorflow的区别 02_ ...

  8. RTSP 流相关工具介绍

    RTSP (Real Time Streaming Protocol),实时流协议,是一种应用层协议,专为流媒体使用.本文将介绍 GStreamer, VLC, FFmpeg 这几个工具,如何发送.接 ...

  9. Python:读写文件(I/O) | 组织文件

    1. I/O 概述  程序与用户交互涉及到程序的输入输出(I/O) 一种类型是字符串,通过input() 和 print() 函数以及数据类型转换类函数如(int()),实现数据的输入输出. 另一种类 ...

  10. JDBC_15_悲观锁和乐观锁

    悲观锁和乐观锁 并发控制 当程序中可能出现并发操作的情况时,就需要保证在并发操作的情况下数据的准确性,以此确保当前用户和其他用户一起操作时,所得到的结果和某个用户单独操作时的结果是一样的.这种手段就叫 ...