zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Java学习10.22(Javaweb对输入信息进行验证——常用的方法)
    mysql with python
    Linux
    Python 基础的一些习题
    Python 推导式、迭代器、生成器、模块和包
    Python 文件操作、异常
    Python 部分内置函数、作用域、闭包、递归
    Python 基础函数、解包
    Python 条件与循环
    Python 集合、字典、运算符
  • 原文地址:https://www.cnblogs.com/xuguangzong/p/8385293.html
Copyright © 2011-2022 走看看