zoukankan      html  css  js  c++  java
  • socket 基于udp实现远程执行命令

    server.py

    # socket 基于udp实现远程执行命令
    
    from socket import *
    import subprocess
    
    ip_port = ('127.0.0.1', 8080)
    buffer_size = 1024
    
    udp_server = socket(AF_INET, SOCK_DGRAM)
    udp_server.bind(ip_port)
    
    while True:
    
        cmd, addr = udp_server.recvfrom(buffer_size)
    
        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')
        udp_server.sendto(cmd_res, addr)  # 向客户端发送执行的结果
    
    
    udp_server.close()

    client.py

    from socket import *
    
    ip_port = ('127.0.0.1', 8080)
    buffer_size = 1024
    
    udp_client = socket(AF_INET, SOCK_DGRAM)
    
    while True:
        cmd = input('请输入命令').strip()
        if not cmd: continue
        if cmd == 'quit': break
        cmd = cmd.encode('utf-8')
        udp_client.sendto(cmd, ip_port)
        cmd_res, addr = udp_client.recvfrom(buffer_size)  # 这里的值过小会接收不全服务端发来的信息
        print('命令执行的结果是', cmd_res.decode('gbk'))  # windows系统默认编码为gbk
    
    udp_client.close()
  • 相关阅读:
    iptables操作指令
    最怕问初衷,大梦成空
    kettle官网wiki
    Pentaho Spoon (Kettle) 出现 Timestamp :Unable to get timestamp from resultset at index 30 错误的解决
    win10安装vs2013失败解决方法
    2020 最新 kail 安装教程
    01_docker学习笔记(一)
    数据结构的基础概念
    BOS3
    配置文件添加druid控制台
  • 原文地址:https://www.cnblogs.com/dangrui0725/p/9483556.html
Copyright © 2011-2022 走看看