Los sockets en Python permiten la comunicación entre procesos en una red utilizando el protocolo TCP/IP o UDP. Con los sockets, se pueden crear programas que envían y reciben datos en tiempo real a través de una red. ===== SERVIDOR - El que Recibe y Ataca ===== Lado del servidor donde permanecerá esperando la conexión y el mensaje del cliente. Pondremos la IP del equipo que va a recibir el archivo o el mensaje, tanto en el cliente como en el servidor: import socket server_socket = socket.socket() server_socket.bind(('192.168.0.17', 5000)) server_socket.listen(1) client_socket, client_address = server_socket.accept() data = client_socket.recv(1024) print(f"Received: {data.decode()}") client_socket.close() server_socket.close() Ahora ejecutamos este código en el servidor y permanecerá en la escucha: {{pasted_image_20230307130821.png|}} ===== CLIENTE - El que Envía ===== Lado del cliente: import socket client_socket = socket.socket() client_socket.connect(('192.168.0.17', 5000)) message = "Hola Servidor! Mensaje enviado desde el cliente" client_socket.send(message.encode()) client_socket.close() Ejecutamos este código: {{pasted_image_20230307130839.png|}} Y el mensaje se habrá enviado al servidor: {{pasted_image_20230307130904.png|}} ====== ENVIAR ARCHIVOS CON SOCKETS DE PYTHON ====== Vamos a enviar un archivo por ejemplo con extensión .php, desde el cliente al servidor que estará en la máquina Kali Linux: ===== CLIENTE ===== import socket HOST = '192.168.0.17' # dirección IP del servidor PORT = 5000 # número de puerto del servidor FILE = 'pwned.php' # archivo que se desea enviar with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) with open(FILE, 'rb') as f: while True: data = f.read(1024) if not data: break s.sendall(data) print('Archivo enviado') Vamos a explicar ciertos puntos del código: * **socket.AF_INET:** indica que se va a utilizar el protocolo de red IPv4. * **socket.SOCK_STREAM:** indica que se va a utilizar el protocolo de transporte TCP. * **with open(FILE, 'rb') as f:** Esto abre un archivo en modo lectura binaria y lo asocia con un objeto de archivo en Python llamado "f". * **f.read(1024):** Se utiliza para leer los datos del archivo asociado al objeto de archivo "f" en bloques de 1024 bytes. ===== SERVIDOR ===== Y este será el código del servidor desde Kali Linux que estará esperando el archivo: import socket HOST = '192.168.0.17' # dirección IP del servidor PORT = 5000 # número de puerto del servidor with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen() conn, addr = s.accept() with conn: print('Conectado por', addr) with open('pwned.php', 'wb') as f: while True: data = conn.recv(1024) if not data: break f.write(data) print('Archivo recibido') Y si ejecutamos este código, recibimos el archivo: {{pasted_image_20230307132326.png|}} {{pasted_image_20230307132356.png|}}