Cliente
|
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 |
import socket # Dirección IP y puerto del servidor dest_ip = "192.168.1.103" dest_port = 1234 # Crear socket TCP sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: # Conectar al servidor sock.connect((dest_ip, dest_port)) print(f"Conectado a {dest_ip}:{dest_port}") print("Escribe comandos. Usa 'exit' para salir.\n") while True: # Leer comando comando = input("shell> ") if not comando: continue # Enviar comando sock.sendall(comando.encode()) # Salir if comando.lower() == "exit": break # Recibir respuesta respuesta = sock.recv(65535).decode(errors="replace") print("\n--- Resultado ---") print(respuesta) print("-----------------\n") finally: sock.close() print("Conexión cerrada.") |
Servidor
|
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 |
import socket import subprocess sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serv_ip = "192.168.1.103" serv_port = 1234 sock.bind((serv_ip, serv_port)) sock.listen(1) print(f"Servidor escuchando en {serv_ip}:{serv_port}") while True: conn, addr = sock.accept() print(f"\nConexión recibida desde {addr[0]}:{addr[1]}") try: while True: # Recibir comando datos = conn.recv(4096) if not datos: break comando = datos.decode().strip() if comando.lower() == "exit": break print(f"Comando recibido: {comando}") # Ejecutar el comando en la shell resultado = subprocess.run( comando, shell=True, capture_output=True, text=True ) # Combinar salida estándar y errores respuesta = resultado.stdout + resultado.stderr if not respuesta: respuesta = f"Comando ejecutado. Código: {resultado.returncode}" conn.sendall(respuesta.encode()) except Exception as e: print("Error:", e) finally: conn.close() print("Conexión cerrada") |