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:UsershcAppDataLocalProgramsPythonPython36python3.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:UsershcAppDataLocalProgramsPythonPython36python3.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:UsershcAppDataLocalProgramsPythonPython36python3.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:UsershcAppDataLocalProgramsPythonPython36python3.exe C:/Users/hc/AppData/Local/Temp/Rar$DIa12328.27936/client2.py
>>>l
9
原文地址:https://www.cnblogs.com/xuguangzong/p/8385293.html