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()

原文地址:https://www.cnblogs.com/dangrui0725/p/9483556.html

时间: 2024-08-04 23:35:12

socket 基于udp实现远程执行命令的相关文章

粘包产生的原因 socket 基于tcp实现远程执行命令(解决粘包)low

# 粘包产生的原因 # 粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的. # 基于tcp协议的套接字会有粘包现象,而基于udp协议的套接字不会产生粘包现象 # tcp是基于数据流的,于是收发的消息不能为空,这就需要在客户端和服务端都添加空消息的处理机制,防止程序卡住:而udp是基于数据报的,即使你输入的是空内容,那也不是空消息,udp协议会帮你封装上消息头(ip+端口的方式),这样就有了消息办界 # 两种情况下会发生粘包 # 1.发送端需要等缓冲区满才发送

socket模拟实现ssh远程执行命令(Python)

一.subprocess.Popen() subprocess模块定义了一个类: Popen 类原型: class subprocess.Popen( args, bufsize = 0, executable = None, stdin = None, stdout = None, stderr = None, preexec_fn = None, close_fds = False, shell = False, cwd = None, env = None, universal_newli

socket远程执行命令

两个脚本模拟远程执行命令 cmd_server.py import socket import subprocess sk = socket.socket() addess = ('127.0.0.1', 8000) sk.bind(addess) sk.listen(3) conn, addr = sk.accept() print('有客户端连接:', addr) data = conn.recv(1024) obj = subprocess.Popen(str(data, 'utf8'),

python 网络编程(远程执行命令与粘包)

远程执行命令 先来学习一个新模块 , 一会用到的.. 新模块: subprocess 执行系统命令 r = subprocess.Popen('ls',shell=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE) subprocess.Popen(a,b,c,d) a: 要执行的系统命令(str) b: shell = True 表示确定我当前执行的命令为系统命令 c: 表示正确信息的输出管道 d: 表示错误信息的输出管道 下边直接上代码,

day8-套接字sock 实现SSH远程执行命令功能

复习 #面向对象编程#类:#对象#实例化 :从一个类到产生一个对象的过程    #对象 = 类名()   #__init__初始化方法,是为了给一个具体的对象放一些初识的属性#在类中:    # 静态属性 直接定义在类中的属性,使用静态属性:类名.对象名都可以调用    # 动态属性 就是方法 就是定义在类中的函数 默认传一个self# class Person:#     money = 100# sister = Person()# father = Person()# Person.mon

Zabbix远程执行命令

原文发表于cu:2016-06-14 Zabbix触发器(trigger)达到阀值后会有动作(action)执行:发送告警信息或执行远程命令. 本文主要配置验证zabbix执行远程命令. 一.环境 Server:基于CentOS-7-x86_64-1511: Zabbix:zabbix-3.0.1server/agent. 二.注意事项 一些能想到的比较重要的注意事项: 远程执行命令是server端向agent端执行,不支持主动模式的agent: 不支持代理模式: zabbix用户必须对命令具有

windows服务器远程执行命令(PowerShell+WinRM)

Windows 远程管理 (WinRM) 是 WS-Management 协议的 Microsoft 实现.该协议是基于简单对象访问协议 (SOAP) 的.防火墙友好的标准协议,使来自不同供应商的硬件和操作系统能够互操作.WS-Management 协议由硬件和软件制造商群体开发,作为一种公共标准,可用于与实现该协议的任何计算机设备远程交换管理数据. 使用PowerShell对服务器远程管理,要在远程服务器上启用WinRM. 一.知识储备: 1.WinRM相关操作 开启WinRM服务: Enab

expect脚本远程登录、远程执行命令和脚本传参简单用法

expect介绍: 最近想写一个自动化安装脚本,涉及到远程登录.分发文件包.远程执行命令等,其中少不了来回输入登录密码,交互式输入命令等,这样就大大降低了效率,那么有什么方法能解决呢?不妨试试expect: expect是一款自动化的脚本解释型的工具. expect基于tcl脚本,expect脚本的运行需要tcl的支持. expect对一些需要交互输入的命令很有帮助,比如ssh ftp scp telnet. expect就可以根据设定的规则,自动帮我们输入密码,大大节省了时间. 远程登录lin

102 模拟ssh远程执行命令

目录 一.subprocess模块 1.1 使用方法 二.模拟实现SSH远程执行命令 服务器 客户端 一.subprocess模块 subprocess 模块允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入.标准输出.标准错误以及返回码等.更多查看官网:https://docs.python.org/2/library/subprocess.html?highlight=subprocess#frequently-used-arguments 可以通过subproces