hmac和socketserver
一,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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库