zoukankan      html  css  js  c++  java
  • 模拟ssh远程执行命令

    模拟ssh远程执行命令

    一、服务器

    import socket
    import subprocess
    
    soc = socket.socket()
    soc.bind(('127.0.0.1', 8001))
    soc.listen(5)
    
    while True:
        conn, addr = soc.accept()
        while True:
            try:
                data = conn.recv(1024)
    
                if len(data) == 0:
                    break
                print("收到客户端信息", data)
                obj = subprocess.Popen(
                    data.decode('utf-8'),
                    shell=True,
                    stdout=subprocess.PIPE,  # 把正确输出放入管道,以便打印
                    stderr=subprocess.PIPE  # 把错误输出放入管道,以便打印
                )
                # 执行正确的结果,b格式, gbk编码(windows平台)
                # stdout是二进制
                msg = obj.stdout.read()
                # 把执行结果通过网络传给c端
                conn.send(msg)
            except Exception as e:
                print(e)
                break
        conn.close()
    
    soc.close()
    
    

    二、客户端

    import socket
    
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    client.connect(('127.0.0.1', 8000))
    
    while True:
        data = input('请输入要执行的命令')
        client.send(data.encode('utf8'))
        data = client.recv(1024)
    
        print(data.decode('gbk'))
    
    client.close()
    

    输入dir命令,由于服务端发送字节少于1024字节,客户端可以接受。

    输入tasklist命令,由于服务端发送字节多于1024字节,客户端只接受部分数据,并且当你再次输入dir命令的时候,客户端会接收dir命令的结果,但是会打印上一次的剩余未发送完的数据,这就是粘包问题。

    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    JVM 常用参数设置(针对 G1GC)
    Java 字符串常量池 及 intern 方法的使用
    JDK 1.8 Metaspace 详解
    JDK 1.8 MetaSpace(元空间)介绍及调优
    Git 统计代码行数
    王永庆传-读书笔记2
    王永庆传-读书笔记1
    董明珠:女人真想干点事,谁也拦不住
    esxi5.5安装nvme驱动
    nvme ssd的一些相关知识点
  • 原文地址:https://www.cnblogs.com/randysun/p/11516912.html
Copyright © 2011-2022 走看看