Contenidos
main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
from flask import Flask, request, jsonify, render_template import subprocess app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/procesos', methods=['GET']) def gestionar_procesos(): action = request.args.get('action') if action == 'listar': return listar_procesos() elif action == 'iniciar': comando = request.args.get('comando') return iniciar_proceso(comando) elif action == 'matar': pid = request.args.get('pid') return matar_proceso(pid) elif action == 'ruta': pid = request.args.get('pid') return obtener_ruta_proceso(pid) elif action == 'buscar': nombre = request.args.get('nombre') return buscar_proceso(nombre) elif action == 'padre': pid = request.args.get('pid') return obtener_proceso_padre(pid) elif action == 'info': pid = request.args.get('pid') return obtener_info_proceso(pid) elif action == 'analizar': return analizar_procesos() def listar_procesos(): try: result = subprocess.run(['ps', '-aux'], stdout=subprocess.PIPE, text=True) return jsonify({'output': result.stdout}) except Exception as e: return jsonify({'error': str(e)}) def iniciar_proceso(comando): try: result = subprocess.Popen(comando.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE) return jsonify({'output': f'Proceso iniciado con PID: {result.pid}'}) except Exception as e: return jsonify({'error': str(e)}) def matar_proceso(pid): try: result = subprocess.run(['kill', str(pid)], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) return jsonify({'output': result.stdout if result.stdout else result.stderr}) except Exception as e: return jsonify({'error': str(e)}) def obtener_ruta_proceso(pid): try: result = subprocess.run(['pwdx', str(pid)], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) return jsonify({'output': result.stdout if result.stdout else result.stderr}) except Exception as e: return jsonify({'error': str(e)}) def buscar_proceso(nombre): try: result = subprocess.run(['pgrep', '-fl', nombre], stdout=subprocess.PIPE, text=True) return jsonify({'output': result.stdout}) except Exception as e: return jsonify({'error': str(e)}) def obtener_proceso_padre(pid): try: result = subprocess.run(['ps', '-o', 'ppid=', '-p', str(pid)], stdout=subprocess.PIPE, text=True) ppid = result.stdout.strip() return jsonify({'output': f'PID Padre: {ppid}'}) except Exception as e: return jsonify({'error': str(e)}) def obtener_info_proceso(pid): try: result = subprocess.run(['ps', '-o', 'pid,ppid,cmd', '-p', str(pid)], stdout=subprocess.PIPE, text=True) return jsonify({'output': result.stdout}) except Exception as e: return jsonify({'error': str(e)}) def analizar_procesos(): try: result = subprocess.run(['ps', '-eo', 'pid,comm'], stdout=subprocess.PIPE, text=True) procesos = result.stdout.split('\n') analisis = [] for proceso in procesos[1:]: if proceso: pid, comando = proceso.split(None, 1) try: pkgs = subprocess.run(['dpkg', '-S', comando], stdout=subprocess.PIPE, text=True) analisis.append(f'Proceso: {comando}, Paquetes: {pkgs.stdout.strip()}') except: analisis.append(f'Proceso: {comando}, Paquetes: No encontrado') return jsonify({'output': '\n'.join(analisis)}) except Exception as e: return jsonify({'error': str(e)}) if __name__ == '__main__': app.run(debug=True) |
index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Gestión de procesos</title> <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet"> <style> body { padding-top: 20px; } .output-container { margin-top: 20px; } pre { background-color: #f8f8f8; padding: 10px; border: 1px solid #ddd; white-space: pre-wrap; word-wrap: break-word; } </style> </head> <body> <div class="container"> <h1 class="text-center">Gestión de procesos</h1> <div class="text-center mt-4"> <button class="btn btn-primary" onclick="listarProcesos()">Listar Procesos</button> <button class="btn btn-success" onclick="iniciarProceso()">Iniciar Proceso</button> <button class="btn btn-danger" onclick="matarProceso()">Matar Proceso</button> <button class="btn btn-info" onclick="rutaProceso()">Ruta Proceso</button> <button class="btn btn-warning" onclick="buscarProceso()">Buscar Proceso</button> <button class="btn btn-secondary" onclick="padreProceso()">Padre Proceso</button> <button class="btn btn-dark" onclick="infoProceso()">Info Proceso</button> <button class="btn btn-light" onclick="analizarProcesos()">Analizar Procesos</button> </div> <div class="output-container"> <h2>Salida:</h2> <pre id="output"></pre> </div> </div> <script> function listarProcesos() { fetch('/procesos?action=listar') .then(response => response.json()) .then(data => { document.getElementById('output').innerText = data.output || data.error; }); } function iniciarProceso() { const comando = prompt("Ingrese el comando a iniciar:"); if (comando) { fetch(`/procesos?action=iniciar&comando=${encodeURIComponent(comando)}`) .then(response => response.json()) .then(data => { document.getElementById('output').innerText = data.output || data.error; }); } } function matarProceso() { const pid = prompt("Ingrese el PID del proceso a matar:"); if (pid) { fetch(`/procesos?action=matar&pid=${pid}`) .then(response => response.json()) .then(data => { document.getElementById('output').innerText = data.output || data.error; }); } } function rutaProceso() { const pid = prompt("Ingrese el PID del proceso para obtener la ruta:"); if (pid) { fetch(`/procesos?action=ruta&pid=${pid}`) .then(response => response.json()) .then(data => { document.getElementById('output').innerText = data.output || data.error; }); } } function buscarProceso() { const nombre = prompt("Ingrese el nombre del proceso a buscar:"); if (nombre) { fetch(`/procesos?action=buscar&nombre=${encodeURIComponent(nombre)}`) .then(response => response.json()) .then(data => { document.getElementById('output').innerText = data.output || data.error; }); } } function padreProceso() { const pid = prompt("Ingrese el PID del proceso para obtener su padre:"); if (pid) { fetch(`/procesos?action=padre&pid=${pid}`) .then(response => response.json()) .then(data => { document.getElementById('output').innerText = data.output || data.error; }); } } function infoProceso() { const pid = prompt("Ingrese el PID del proceso para obtener información:"); if (pid) { fetch(`/procesos?action=info&pid=${pid}`) .then(response => response.json()) .then(data => { document.getElementById('output').innerText = data.output || data.error; }); } } function analizarProcesos() { fetch('/procesos?action=analizar') .then(response => response.json()) .then(data => { document.getElementById('output').innerText = data.output || data.error; }); } </script> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> </body> </html> |