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

 

posted @   许光宗  阅读(120)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示