• 网络编程进阶---->>> hamc模块 socketserver模块验证合法性 两者进行通信连接


    我们在工作中经常遇到,你公司内的某一台电脑要去访问你的服务器或者一个服务端电脑,那么你是让每一台都进行连接吗?  那不可能的  你肯定要进行限定的 

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

    hamc模块

    hamc也是一个加密的模块

    但是只能对字节进行加密

    import hmac
    s = '老王'.encode('UTF-8') n = hmac.new(key = s) print(n.hexdigest()) # 6afd402b51938e21ee2ace13ddf0ead1

    它的加密的后面还可以选择加密的情况 但是只能对字节

    import hmac
    import os
    t = os.urandom(30)  # os.urandom 是随机获取字节数
    s = '老王'.encode('UTF-8')
    n = hmac.new(key = s,msg= t)  # 只对30个字节进行加密
    print(n.hexdigest())  # 909271871e55dc492febe63fea8776dd

    这个时候我们就用到了一个类似于之前的hashlib模块的加密了hamc模块,hmac模块是专门用来判断合法性的

    server端口
    
    import os
    import hmac
    import socket
    soctet_key = '老王在隔壁'.encode('UTF-8')
    sk = socket.socket()
    sk.bind(('127.0.0.3',9080))
    sk.listen()
    while True:
        while True:
            try:
    
                conn,addr = sk.accept()
                random_bytes = os.urandom(30)  # 随机获取一段字节  os模块的os.uurandom是专门随机获取字节的
                conn.send(random_bytes)  # 先把你的加密方式发送过去
                obj = hmac.new(key = socket_key,smg = random_bytes )  # 这是运用hmac对你的信息进行加密 前面的是内容后面是加密的方式
                ret = obj.hecdigest()
                msg = conn.recv(1024).decode('UTF-8')
                if msg == ret :print('是合法的')
                else:conn.close()
    
            finally:
               sk.close()
               break
    
    
    
    
    client端口:
    
    
    
    
    import socket
    import hmac
    socket_key = '老王在隔壁'.encode('UTF-8')
    sk = socket.socket()
    sk.connect(('127.0.0.3',9080))
    urandom = sk.recv(1024)  # 接收你的加密方式
    hamc_obj = hmac.new(key = socket_key,msg = urandom)
    sk.send(hamc_obj.hexdigest().encode()) # 把你的加密结果发送 让服务端进行对比
    sk.close()
    View Code

    我们一直以来学的TCP服务都是以一个端口一个端口进行的连接,如果你想要使用TCP协议进行多次客户端和服务端进行连接的时候, 我们可以用socketserve模块来进行多次连接

    socketserver模块:

    server 端
    
    import socketserver
    # 并发编程
    class MyServer(socketserver.BaseRequestHandler):
        def handle(self):
            self.request.send(b'hello')
            msg = self.recv(1024)
            print(msg)
    
    if __name__ == '__main__':
        socketserver.TCPServer.allow_reuse_address = True
        server = socketserver.ThreadingTCPServer(('127.0.0.1',9000),MyServer)
        server.serve_forever()
    
    
    
    client端
    
    
    import socket
    sk  = socket.socket()
    sk.connect(('127.0.0.1',9000))
    msg = sk.recv(1024)
    print(msg)
    sk.send(b'bye')
    sk.close()
    View Code

     socketserver是解决TCP的并发编程的

  • 相关阅读:
    [LeetCode] Kth Smallest Element in a BST
    Dojo入门篇
    不要小看了get 与set
    怎样安装Windows7操作系统
    MFC Wizard创建的空应用程序中各个文件内容的解析
    hadoop hdfs空间满后重新启动不了
    树形结构——基本原理
    R语言pdf输出中文乱码处理
    Javascript基本概念梳理
    Java动态代理
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/9012304.html
Copyright © 2020-2023  润新知