• socket 基于tcp实现远程执行命令


    server.py

    # socket 基于tcp实现远程执行命令
    
    from socket import *
    import subprocess
    
    ip_port = ('127.0.0.1', 8080)
    back_log = 5
    buffer_size = 1024
    
    tcp_server = socket(AF_INET, SOCK_STREAM)
    tcp_server.bind(ip_port)
    tcp_server.listen(back_log)
    
    while True:
        conn, addr = tcp_server.accept()
        while True:
            try:
                cmd = conn.recv(buffer_size)
                if not cmd: break
                cmd = cmd.decode('utf-8')
                print('收到客户端命令', cmd)
                res = subprocess.Popen(cmd, shell=True,  # 第一个参数:命令字符串,第二个参数指定由shell处理
                                       stderr=subprocess.PIPE,  # 将基本的输入、输出及错误都放入管道
                                       stdin=subprocess.PIPE,  # 这些在管道里的信息都是字节形式,编码为utf-8
                                       stdout=subprocess.PIPE
                                       )
                err = res.stderr.read()  # 定义一个err变量接收基本的错误信息
                if err:  # 如果错误信息不为空
                    cmd_res = err  # 输出的结果为基本的错误信息
                else:
                    cmd_res = res.stdout.read()  # 输出的结果为基本的输出信息
    
                if not cmd_res:  # 有些命令无返回结果,需要进行判断
                    cmd_res = '该命令没有返回结果'.encode('gbk')
                conn.send(cmd_res)  # 向客户端发送执行的结果
            except Exception:
                break
    
        conn.close()
    
    tcp_server.close()

    client.py

    from socket import *
    
    ip_port = ('127.0.0.1', 8080)
    
    tcp_client = socket(AF_INET, SOCK_STREAM)
    tcp_client.connect(ip_port)
    
    while True:
        cmd = input('请输入命令').strip()
        if not cmd: continue
        if cmd == 'quit': break
        cmd = cmd.encode('utf-8')
        tcp_client.send(cmd)
        cmd_res = tcp_client.recv(1024) # 这里会有粘包现象产生
        print('命令执行的结果是', cmd_res.decode('gbk'))    # windows系统默认编码为gbk
  • 相关阅读:
    js中的投掷筛子的小游戏
    js俩习题
    python中socket理论
    python实现计时器(装饰器)
    python之正则表达式(re模块)用法总结
    python练习题之随机生成验证码
    python中模块介绍
    python中的装饰器基本理论
    python类与对象练习题扑克牌
    Java抓取网页数据
  • 原文地址:https://www.cnblogs.com/dangrui0725/p/9479097.html
Copyright © 2020-2023  润新知