zoukankan      html  css  js  c++  java
  • Socket模拟SSH

    Socket模拟SSH

    主要思路

    客户端发送相关命令到服务端,服务端执行命令(通过subprocess模块实现)然后将结果返回给客户端

    小知识

    Linux中可以发送空数据,服务端能接受到空数据

    windows发送空数据,服务端是接收不到的

    服务端

    from socket import *
    import subprocess
    
    server=socket(AF_INET,SOCK_STREAM)
    
    server.bind(('127.0.0.1',9000))
    server.listen(5)
    
    print("服务器启动成功")
    
    while True:
        print("服务器等待连接...")
        conn,addr=server.accept()
        print(f"{addr}连接成功")
        while True:
            cmd=conn.recv(1024)
            print("收到指令",cmd)
            # 把cmd解码成字符串
            zx=cmd.decode('utf8')
    
            if zx=="q":
                break
    
            #shell启动,运行命令
            #把正确信息放入管道
            #把错误信息放入管道
            result=subprocess.Popen(zx,shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE)
            #取出管道中的正确和错误运行结果
            t_result=result.stdout.read()
            f_result=result.stderr.read()
    
            conn.send(t_result)
            conn.send(f_result)
    
            print("返回结果成功")
        conn.close()
    

    客户端

    from socket import *
    
    client=socket()
    
    client.connect(('127.0.0.1',9000))
    while True:
        cmd=input("请输入要执行的命令:")
    
        client.send(cmd.encode("utf8"))
    
        data=client.recv(1024)
    
        #打印执行结果
        print(data.decode('GBK'))
    
  • 相关阅读:
    quick cocos naja
    quick cocos sprite 3 zhongfangshi
    quick cocos moveto
    quick cocos animate2
    quick cocos animate
    quick cocos schedule
    quick cocos scheduler update
    【leetcode】括号的最大嵌套深度
    【leetcode】删除某些元素后的数组均值
    【leetcode】二叉树的最小深度
  • 原文地址:https://www.cnblogs.com/zx125/p/11480627.html
Copyright © 2011-2022 走看看