zoukankan      html  css  js  c++  java
  • socket模块综合

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

      恶意的登录:扫描端口(0-65535)

       tcp没有做登录客户端时:

       使用hmac生成对随机字符串的摘要

    import os
    import hmac
    import socket
    
    def auth(conn):
        msg = os.urandom(32) #生成一个随机字符串
        conn.send(msg) #发送到客户端
        result = hmac.new(secret_key,msg) #处理这个字符串,得到一个结果
        # print(result)
        client_digest = conn.recv(1024)  # 接收客户端返回的处理结果
        if result.hexdigest() == client_digest.decode('utf-8'):
            print('合法的链接') #对比成功可以继续通信
            return True
        else:
            print('非法链接')
            return False
    secret_key = b'123'
    sk = socket.socket()
    sk.bind(('192.168.16.33',8088))
    sk.listen()
    conn,addr = sk.accept()
    # print(conn)
    if auth(conn):
        print(conn.recv(1024))
        conn.close()
    else:
        conn.close()
    sk.close()
    

      

    import hmac
    import socket
    sk = socket.socket()
    sk.connect(('192.168.16.33',8088))
    
    def auth(sk):
        # print(sk)
        msg = sk.recv(1024)
        result = hmac.new(key,msg)
        # print(result)
        res = result.hexdigest()
        sk.send(res.encode('utf-8'))
    
    key = b'123'
    auth(sk)
    sk.send(b'upload')
    sk.close() 

     2:socketserver模块;

      tcp协议,一个服务端同时与对个客户端同时通信

      

    import socketserver
    class Myserver(socketserver.BaseRequestHandler):
        def handle(self):
            conn = self.request
            while True:
                conn.send(b'abc')
                print(conn.recv(1024))
    server = socketserver.ThreadingTCPServer(('192.168.16.33',8088),Myserver)
    server.serve_forever()
    

      

    import socket
    
    sk = socket.socket()
    sk.connect(('192.168.16.33',8088))
    while True:
        ret = sk.recv(1024)
        print(ret)
        sk.send(b'byebye')
    sk.close()
    

      

  • 相关阅读:
    114.完全背包【恰好装满完全背包
    整数划分类型题目
    三目运算符
    关于 xk 的位数。
    多重背包二进制原理拆分问题
    2016.4.2 讲课笔记(动态规划)
    二叉树(2)二叉树创建的3种方法,二叉树的递归遍历,二叉树的销毁
    二叉树(1)已知某2种排序方式,创建这个二叉树并按第3种方式排序
    C++知识点总结(二)
    5款优秀的开源克隆软件
  • 原文地址:https://www.cnblogs.com/lijinming110/p/9663325.html
Copyright © 2011-2022 走看看