python简单实现远程执行命令
2022/1/16 17:34:49
本文主要是介绍python简单实现远程执行命令,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
简单版 ssh
# Server import json import socket # 建立socket,监听 import struct import subprocess ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ss.bind(('127.0.0.1', 8080)) ss.listen(5) print("server listen.....") # 接受信息 while True: conn, client_addr = ss.accept() print(client_addr) while True: #通信开始 try: cmd = conn.recv(1024) if not cmd: break # 执行命令 obj = subprocess.Popen(cmd.decode('utf-8'), shell=True, stdout=subprocess.PIPE, stderr= subprocess.PIPE) stdout = obj.stdout.read() stderr = obj.stderr.read() # 执行命令,并发送执行结果 # 第一步:制作固定长度的报头 header_dic = { 'filename': 'a.txt', 'md5': '654444444654545535354', 'total_size': len(stderr) + len(stdout) } header_json = json.dumps(header_dic) header_bytes = header_json.encode('utf-8') # 第二步:先发送报头长度 conn.send(struct.pack('i', len(header_bytes))) # 第三步:发送报头 conn.send(header_bytes) # 第四步:发送真实的数据 conn.send(stdout) conn.send(stderr) except ConnectionResetError: break conn.close() ss.close()
# client import json import socket # 创建socket import struct ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ss.connect(('127.0.0.1', 8080)) # 发送信息 while True: cmd = input('input your cmd: ').strip() if not cmd: continue ss.send(cmd.encode('utf-8')) # 接受信息 # 第一步:接受报头长度 obj = ss.recv(4) header_size = struct.unpack('i', obj)[0] # 第二步:再接受报头 header_bytes = ss.recv(header_size) # 第三步:从报头中解析出对真实数据的描述信息 header_json = header_bytes.decode('utf-8') header_dic = json.loads(header_json) print(header_dic) total_size = header_dic['total_size'] # 第四步:接受真实的数据 recv_size = 0 recv_data = b'' while recv_size < total_size: res = ss.recv(1024) recv_data += res recv_size += len(res) print(recv_data.decode('gbk')) ss.close()
这篇关于python简单实现远程执行命令的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门