• 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'))
    
  • 相关阅读:
    二叉排序树
    C# 大端与小端
    【转】C#socket通信
    【转】Github 搜索技巧,快速找到好资源
    web api 跨域请求,ajax跨域调用webapi
    【转】Linux简介及最常用命令
    【转】带你吃透RTMP
    09-vuex基本应用之计数demo
    08-配置vue路由的步骤
    02-原型与原型链
  • 原文地址:https://www.cnblogs.com/zx125/p/11480627.html
Copyright © 2020-2023  润新知