一,hmac

验证客户端的合法性

hmac,检测客户端是否合法,不依赖登录认证

server

import os,socket,hmac
sk=socket.socket()
sk.bind(('127.0.0.1',8090))
sk.listen()
aa=b'hello'
def bb(conn):
msg=os.urandom(32)
conn.send(msg)
h=hmac.new(aa,msg)
digest=h.digest()
client_digest=conn.recv(1024)
return hmac.compare_digest(digest,client_digest)
conn,addr=sk.accept()
res=bb(conn)
if res:
print('合法')
conn.close()
else:
print('不合法')
conn.close()
sk.close()

client

import  hmac,socket

sk=socket.socket()
aa=b'wohao'
sk.connect(('127.0.0.1',8090))
msg=sk.recv(1024)
h=hmac.new(aa,msg)
digest=h.digest()
sk.send(digest)
sk.close()

结果:

C:\Users\hc\AppData\Local\Programs\Python\Python36\python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.47396/server.py
不合法 Process finished with exit code 0

server

import os,socket,hmac
sk=socket.socket()
sk.bind(('127.0.0.1',8090))
sk.listen()
aa=b'hello'
def bb(conn):
msg=os.urandom(32)
conn.send(msg)
h=hmac.new(aa,msg)
digest=h.digest()
client_digest=conn.recv(1024)
return hmac.compare_digest(digest,client_digest)
conn,addr=sk.accept()
res=bb(conn)
if res:
print('合法')
conn.close()
else:
print('不合法')
conn.close()
sk.close()

client

import  hmac,socket

sk=socket.socket()
aa=b'hello'
sk.connect(('127.0.0.1',8090))
msg=sk.recv(1024)
h=hmac.new(aa,msg)
digest=h.digest()
sk.send(digest)
sk.close()

结果:

C:\Users\hc\AppData\Local\Programs\Python\Python36\python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.47396/server.py
合法 Process finished with exit code 0

二   socketserver

server

import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
while 1:
print(self.client_address)
msg=self.request.recv(1024).decode('utf-8')
if msg=='q':break
print(msg)
info=input('%s>>'%msg[:2])
self.request.send(info.encode('utf-8'))
if __name__=='__main__':
server=socketserver.ThreadingTCPServer(('127.0.0.1',8090),MyServer)
server.allow_reuse_address=True
server.serve_forever()

client

import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8090))
while True:
msg = input('>>>')
if msg == 'q':
sk.send(b'q')
break
sk.send(('美团 :'+msg).encode('utf-8'))
ret = sk.recv(1024).decode('utf-8')
print(ret)
sk.close()

client2

import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8090))
while True:
msg = input('>>>')
if msg == 'q':
sk.send(b'q')
break
sk.send(('大众点评 :'+msg).encode('utf-8'))
ret = sk.recv(1024).decode('utf-8')
print(ret)
sk.close()

结果:

server

C:\Users\hc\AppData\Local\Programs\Python\Python36\python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.27733/server.py
('127.0.0.1', 64769)
('127.0.0.1', 64795)
美团 :l
美团>>i
('127.0.0.1', 64769)
大众点评 :l
大众>>9
('127.0.0.1', 64795)

client

>>l
i
>>>

client2

C:\Users\hc\AppData\Local\Programs\Python\Python36\python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.27936/client2.py
>>>l
9

hmac和socketserver的更多相关文章

  1. SocketServer模块,hmac模块验证client合法性

    hmac模块: 1.模块初识: import hmac # h = hmac.new() #括号里要给它连个bytes类型,一个是自定义的secret_key,一个是你想进行加密的bytes # 密文 ...

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

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

  3. 认证客户端的链接与socketserver实现并发

    from socket import * import hmac,os secret_key=b'linhaifeng bang bang bang' def conn_auth(conn): ''' ...

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

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

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

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

  6. 网络编程之socketserver以及socket更多方法

    关于socketserver 关于socket的更多方法 服务端套接字函数: s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始tcp监听 s.accept () 被动接受tc ...

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

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

  8. socketv 验证客户端链接的合法性,socketserver

    补充: send()与sendall() 在python socket编程中,有两个发送TCP的函数,send()与sendall(),区别如下: socket.send(string[, flags ...

  9. python基础(15)-socket网络编程&socketserver

    socket 参数及方法说明 初始化参数 sk = socket.socket(参数1,参数2,参数3) 参数1:地址簇 socket.AF_INET IPv4(默认) socket.AF_INET6 ...

随机推荐

  1. Vue.JS快速上手(组件生命周期)

    一.什么是组件 组成网页独立功能基本单元(片段), 复用.维护.性能, Vue.js中的组件就是一个Vue的实例,Vue中的组件包含data/methods/computed. 一个Vue.js的应用 ...

  2. 战胜了所有对手,却输给了时代。MVVM--jQuery永远的痛。

    前言 第二次浏览器战争中,随着以 Firefox 和 Opera 为首的 W3C 阵营与 IE 对抗程度的加剧,浏览器碎片化问题越来越严重,不同的浏览器执行不同的标准,对于开发人员来说这是一个恶梦.为 ...

  3. twemproxy《一》

    twemproxy 做redis客户端中间代理的时候,如果redis有密码时,需要在nutcracker.yml中添加密码:

  4. OpenCV 生成矩形mask

    生成mask的一种操作 cv::Mat mask = cv::Mat::zeros(300, 300, CV_8UC1); mask(cv::Rect(100,150,100, 50)) = 255; ...

  5. Seq2Seq sequence-to-sequence模型 简介

    Sequence-to-sequence (seq2seq) 模型. 突破了传统的固定大小输入问题框架 开创了将DNN运用于翻译.聊天(问答)这类序列型任务的先河 并且在各主流语言之间的相互翻译,和语 ...

  6. VS2017 创建并测试 C++ dll

    生成DLL 创建工程: Create new project -> 选择Visual C++ -> Windows Desktop -> Dynamic-Link Library ( ...

  7. 全网唯一正常能用的centos7 安装mysql5.7.35 22 33 25

    CentOS7.4用yum安装并配置MySQL5.7   1.配置YUM源 下载MySQL源安装包 wget http://dev.mysql.com/get/mysql57-community-re ...

  8. 硕盟SM-A44|USB3.0转RJ45千兆网口转换器(TYPE A USB3.0 TO RJ45)

    硕盟SM-A44是一款USB3.0转RJ45千兆网口转换器.,转换USB端口到以太网端口.它让你投入低成本就可以轻松拥有千兆以太网.可将网络连接到台式机,笔记本电脑等等设备.硕盟 USB千兆网卡采用嵌 ...

  9. ysoserial exploit/JRMPClient

    ysoserial exploit/JRMPClient 上一篇文章讲到,当服务器反序列化payloads/JRMPListener,即会开启端口监听.再使用exploit/JRMPClient模块发 ...

  10. Elasticsearch-head插件的安装与配置

    第一种: 通过浏览器添加插件 通过chrome安装插件的方式提供一个可操作es的图形化界面. 在chrome 浏览器中,通过"扩展程序" 添加 elasticsearch head ...