• 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
  • 相关阅读:
    zbb20180929 dubbo+zookeeper
    zbb20180929 Linux高可用之Keepalived
    zbb20180929 zk Zookeeper的功能以及工作原理
    zbb20180927 Union与Union All的区别
    zbb20180927 MySQL MyISAM InnoDB区别
    zbb20180921 spring事物的七种事物传播属性行为及五种隔离级别
    zbb20180921 java,md5,MD5加密+加盐
    zbb20180921 java,js,javascript 前端加密后端解密Base64通用加密处理
    zbb20180921 springboot 全局异常处理 404 500
    zbb20180919 db,mysql MySQL慢查询
  • 原文地址:https://www.cnblogs.com/xuguangzong/p/8385293.html
Copyright © 2020-2023  润新知