一,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. linux高级监控atop的使用

    一.centos安装 sudo yum -y install epel-release.noarch sudo yum -y install atop sudo systemctl enable at ...

  2. webpack编译后的代码如何在浏览器执行

    浏览器是无法直接使用模块之间的commonjs或es6,webpack在打包时做了什么处理,才能让浏览器能够执行呢,往下看吧. 使用commonjs语法 先看下写的代码, app.js minus.j ...

  3. 手撕LRU缓存

    面试官:来了,老弟,LRU缓存实现一下? 我:直接LinkedHashMap就好了. 面试官:不要用现有的实现,自己实现一个. 我:..... 面试官:回去等消息吧.... 大家好,我是程序员学长,今 ...

  4. 关于Cloudfront能否接入NLB的讨论

    之前讨论过四层应用 是无法通过七层负载负载均衡器转发流量的,因为ALB监听的是Http/s协议,TCP/UDP的请求到了ALB无法识别,ALB在第七层做判断,数据包只有四层,会无法判断转发的目标.相反 ...

  5. Python 高级特性(1)- 切片

    前言 面 tx 被问到 python 的高级特性相关,这里做个补充学习吧 正向范围取值 关键点 首位下标是 0 第一个数字是起始下标,第二个数字是结束下标(但最终结果不包含它) 代码块一 # 正向范围 ...

  6. JS008. 跳转缓存滚动条高度并返回时过渡动画(window.pageYOffset & window.scrollTo & SessionStorage)

    业务场景 从列表跳转详情页,通过操作返回列表页时,滚动条仍然处于跳转前的高度,并加上 ease-out 的过渡动画. 由于sessionStorage是随页面即关即消的,所以比起VUEX.localS ...

  7. 搭建GIT仓库

  8. 【C++基础教程】第二课

    一,上次的课后练习答案 1,输出1+2=3 2,输出2 2.25 2.25 2.25 3,第一空iostream或bits/stdc++.h 第二空main(),main(void)或main(int ...

  9. 为什么不推荐Python初学者直接看项目源码

    无论是有没有其他语言的经验,入门Python都很简单.Python拥有简单直观的语法,方便的语法糖,以及丰富的第三方库.只要一个基础的Python教程,大家基本上都能无障碍的入门.在入门之后,很多人对 ...

  10. php超时报错: Maximum execution time of 300 seconds exceeded

    php.ini里max_execution_time = 30,原因是这个脚本执行时间太小了,增加一些,或者改成0不限制 可以增加代码: set_time_limit(0);