• 网络编程(二)


    验证客户端链接的合法性:

      如果你想在分布式系统中实现一个简单的客户端链接认证功能,就可以利用 hmac+加盐的方式实现。

    import os
    import hmac
    import socket
    
    secret_key = '顾清秋'.encode('utf-8')
    
    sk = socket.socket()
    
    sk.bind(('127.0.0.1',9000))
    sk.listen()
    conn,addr = sk.accept()
    while True:
        while True:
            try:
                random_num = os.urandom(32)   # 随机出32位字节
                conn.send(random_num)
                obj = hmac.new(secret_key,random_num)
                ret = obj.hexdigest()
                msg = conn.recv(1024).decode('utf-8')
                if ret == msg:
                    print('链接合法')
                else:
                    print('链接不合法,将断开连接')
                    conn.close()
            finally:
                break
    sk.close()
    服务端
    import hmac
    import socket
    
    secret_key = '顾清秋'.encode('utf-8')
    
    sk = socket.socket()
    sk.connect(('127.0.0.1',9000))
    
    random_num = sk.recv(1024)
    obj = hmac.new(secret_key,random_num)
    ret = obj.hexdigest().encode('utf-8')
    sk.send(ret)
    sk.close()
    客户端

    socketserver:

    import socketserver
    
    class MyServer(socketserver.BaseRequestHandler):
        def handle(self):
            self.data = self.request.recv(1024).strip()  # self.request 相当于conn
            print('{} wrote:'.format(self.client_address[0]))
            print(self.data)
            self.request.sendall(self.data.upper())
    
    if __name__ == '__main__':
        socketserver.TCPServer.allow_reuse_address = True
        server = socketserver.ThreadingTCPServer(('127.0.0.1',9000),MyServer)
        server.serve_forever()
    服务端
    import socket
    sk = socket.socket()
    
    sk.connect(('127.0.0.1',9000))
    
    
    sk.send(b'hello')
    
    sk.close()
    客户端
  • 相关阅读:
    makefile中的wildcard和patsubst
    makefile中=,:=,?=,+=区别
    hash函数查找和ASL计算
    ubuntu apt-get提示no dependencys怎么办
    增广贤文是不多的古典珍宝之一
    如何打印查看c++stack<..>中的内容(不使用pop,top)
    c/c++标准IO重定向
    c/c++使用#define,#ifdef,#endif将debug代码分离
    未完待续
    c++重载覆盖重定义多态其他别名区别
  • 原文地址:https://www.cnblogs.com/stfei/p/9009207.html
Copyright © 2020-2023  润新知