验证客户端链接的合法性

import os
import hmac
import socket
secret_key = b'egg'
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
def check_conn(conn):msg = os.urandom(32)conn.send(msg)h = hmac.new(secret_key,msg)digest = h.digest()client_digest = conn.recv(1024)return hmac.compare_digest(digest,client_digest)
conn,addr = sk.accept()
res = check_conn(conn)
if res:print('合法的客户端')conn.close()
else:print('不合法的客户端')conn.close()
sk.close()

server端

import hmac
import socket
secret_key = b'egg'
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
msg = sk.recv(1024)
h = hmac.new(secret_key,msg)
digest = h.digest()
sk.send(digest)
sk.close()

client端

利用hmac+加盐的方式在分布式系统中实现一个简单的客户端链接认证功能

#_*_coding:utf-8_*_
from socket import *
import hmac,ossecret_key=b'linhaifeng bang bang bang'
def conn_auth(conn):'''认证客户端链接:param conn::return:'''print('开始验证新链接的合法性')msg=os.urandom(32)conn.sendall(msg)h=hmac.new(secret_key,msg)digest=h.digest()respone=conn.recv(len(digest))return hmac.compare_digest(respone,digest)def data_handler(conn,bufsize=1024):if not conn_auth(conn):print('该链接不合法,关闭')conn.close()returnprint('链接合法,开始通信')while True:data=conn.recv(bufsize)if not data:breakconn.sendall(data.upper())def server_handler(ip_port,bufsize,backlog=5):'''只处理链接:param ip_port::return:'''tcp_socket_server=socket(AF_INET,SOCK_STREAM)tcp_socket_server.bind(ip_port)tcp_socket_server.listen(backlog)while True:conn,addr=tcp_socket_server.accept()print('新连接[%s:%s]' %(addr[0],addr[1]))data_handler(conn,bufsize)if __name__ == '__main__':ip_port=('127.0.0.1',9999)bufsize=1024server_handler(ip_port,bufsize)

server端

#_*_coding:utf-8_*_
__author__ = 'Linhaifeng'
from socket import *
import hmac,ossecret_key=b'linhaifeng bang bang bang'
def conn_auth(conn):'''验证客户端到服务器的链接:param conn::return:'''msg=conn.recv(32)h=hmac.new(secret_key,msg)digest=h.digest()conn.sendall(digest)def client_handler(ip_port,bufsize=1024):tcp_socket_client=socket(AF_INET,SOCK_STREAM)tcp_socket_client.connect(ip_port)conn_auth(tcp_socket_client)while True:data=input('>>: ').strip()if not data:continueif data == 'quit':breaktcp_socket_client.sendall(data.encode('utf-8'))respone=tcp_socket_client.recv(bufsize)print(respone.decode('utf-8'))tcp_socket_client.close()if __name__ == '__main__':ip_port=('127.0.0.1',9999)bufsize=1024client_handler(ip_port,bufsize)

客户端(合法)

#_*_coding:utf-8_*_
__author__ = 'Linhaifeng'
from socket import *def client_handler(ip_port,bufsize=1024):tcp_socket_client=socket(AF_INET,SOCK_STREAM)tcp_socket_client.connect(ip_port)while True:data=input('>>: ').strip()if not data:continueif data == 'quit':breaktcp_socket_client.sendall(data.encode('utf-8'))respone=tcp_socket_client.recv(bufsize)print(respone.decode('utf-8'))tcp_socket_client.close()if __name__ == '__main__':ip_port=('127.0.0.1',9999)bufsize=1024client_handler(ip_port,bufsize)

客户端(非法:不知道加密方式)

#_*_coding:utf-8_*_
__author__ = 'Linhaifeng'
from socket import *
import hmac,ossecret_key=b'linhaifeng bang bang bang1111'
def conn_auth(conn):'''验证客户端到服务器的链接:param conn::return:'''msg=conn.recv(32)h=hmac.new(secret_key,msg)digest=h.digest()conn.sendall(digest)def client_handler(ip_port,bufsize=1024):tcp_socket_client=socket(AF_INET,SOCK_STREAM)tcp_socket_client.connect(ip_port)conn_auth(tcp_socket_client)while True:data=input('>>: ').strip()if not data:continueif data == 'quit':breaktcp_socket_client.sendall(data.encode('utf-8'))respone=tcp_socket_client.recv(bufsize)print(respone.decode('utf-8'))tcp_socket_client.close()if __name__ == '__main__':ip_port=('127.0.0.1',9999)bufsize=1024client_handler(ip_port,bufsize)

客户端(非法:不知道secret_key)

转载于:https://www.cnblogs.com/TheLand/p/8386872.html

python之路----验证客户端合法性相关推荐

  1. socketserver和socket的补充(验证客户端合法性)

    一.socket的补充 1.参数 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 参数说明: family 地址系 ...

  2. Python之socketserver模块和验证客户端链接的合法性

    验证客户端链接的合法性 分布式系统中实现一个简单的客户端链接认证功能 #_*_coding:utf-8_*_ from socket import * import hmac,ossecret_key ...

  3. python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)...

     先来回顾一下昨天的内容 黏包现象 粘包现象的成因 : tcp协议的特点 面向流的 为了保证可靠传输 所以有很多优化的机制 无边界 所有在连接建立的基础上传递的数据之间没有界限 收发消息很有可能不完全 ...

  4. python之路——网络编程

    一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运行,你就会发现,这两个python的文件分别运行的很好.但是如果这两个程序之间想要传递一个数据, ...

  5. 网络工程师的python之路pdf_网络工程师的Python之路---Ansible篇

    版权声明:我已加入"维权骑士"(http://rightknights.com)的版权保护计划,所有知乎专栏"网路行者"下的文章均为我本人(知乎ID:弈心)原创 ...

  6. python之路——模块和包

    一.模块 1.什么是模块? 常见的场景:一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1.使用Python编 ...

  7. Python之路【第一篇】:Python简介和入门

    Python之路[第一篇]:Python简介和入门 Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗 ...

  8. Python之路【第八篇】:堡垒机实例以及数据库操作

    Python之路[第八篇]:堡垒机实例以及数据库操作 堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于 ...

  9. python之路day5_Python语言之python之路笔记day19

    本文主要向大家介绍了Python语言之python之路笔记day19,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 一.Django请求生命周期 对于所有的web框架来说本质就是 ...

最新文章

  1. Cannot find class for bean with name解决
  2. Selenium - CSS Selector
  3. matlab同步发电机外特性仿真,基于Matlab-Simulink的虚拟同步发电机控制方法的仿真研究...
  4. dell装双系统linux系统,记录DELL灵越7590/7591安装Ubuntu+Win10双系统
  5. Listary 6双击Ctrl失效
  6. 什么是游戏引擎,什么是虚幻引擎(Unreal Engin 4)?
  7. bin和cue怎么合并,BIN和CUE文件如何打开?
  8. [Jzoj]3457. 沙耶的玩偶
  9. 【DNS区域传输测试/子域暴力破解/横幅版本检测/生成映射】
  10. oracle vm virtualbox安装后会一直重启,并且installation destination显示磁盘不够,让重建分区
  11. 如何预防计算机病毒英语作文,电脑病毒的英文作文
  12. 使用晨曦记账本,分析某个时间段每个账户收支结余
  13. android布局 哪个控件在最上层_Android 在最上层添加悬浮View(兼容Android 8.0)
  14. (转)一共81个,开源大数据处理工具汇总
  15. 如何使用TI的DSP芯片cmd文件
  16. Linux搭建迅搜( Xunsearch )
  17. Helen Of Troy 海伦特洛伊(新木马屠城记)
  18. U盘插入Mac电脑无反应什么原因?用NTFS for Mac解决简直人生开了挂!
  19. hackyou2014 CTF web关卡通关攻略
  20. 如何在九酷·轻音乐上下载MP3格式的音乐素材?

热门文章

  1. PCL:描述三维离散点的ROPS特征(Code)
  2. python做一个记事本_python如何自制一个简易记事本?
  3. Linux gcc编译c/c++基本过程
  4. [CF]Round514
  5. linux下python脚本判断目录和文件是否存在
  6. 回归分析中的正则化问题
  7. 虚拟机 搭建LVS + DR + keepalived 高可用负载均衡
  8. linux下的精确wait
  9. iOS 处理键盘遮挡TextField、TextView问题
  10. 我身上的银屑病(尝试自我治疗中)