diff --git a/1a/ej1a3.py b/1a/ej1a3.py index 116f257..bb40ba2 100644 --- a/1a/ej1a3.py +++ b/1a/ej1a3.py @@ -29,7 +29,7 @@ class MyHTTPRequestHandler(BaseHTTPRequestHandler): def do_GET(self): """ Método que se ejecuta cuando se recibe una petición GET. - + Rutas implementadas: - `/ip`: Devuelve la IP del cliente en formato JSON @@ -41,9 +41,24 @@ def do_GET(self): # 3. Si la ruta es cualquier otra, envía una respuesta 404 # PISTA: Para obtener la IP del cliente puedes usar el método auxiliar _get_client_ip() - pass - - + if self.path == "/ip": + # Get client IP + client_ip = self._get_client_ip() + + #Prepare JSON response + response_data = {"ip": client_ip} + response_json = json.dumpls(response_data) + + # Send response + self.send_rsponse(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + self.wfile.write(response_json.encode('utf-8')) + else: + #Handle 404 for any other path + self.response(404) + self.end_headers() + def _get_client_ip(self): """ Método auxiliar para obtener la IP del cliente desde los encabezados. @@ -57,9 +72,20 @@ def _get_client_ip(self): # 1. Verifica si existe el encabezado 'X-Forwarded-For' (común en servidores con proxy) # 2. Si no existe, verifica otros encabezados comunes como 'X-Real-IP' # 3. Como último recurso, utiliza self.client_address[0] - pass - + #Check X-Forwarded-For header first + forwarded_for = self.headers.get('X-Forwarded-For') + if forwarded-for: + #Return the first IP in the list + return forwarded_for.split(',')[0].strip() + #Check X-Real-IP header + real_ip = self.headers.get('X-Real-IP') + if real_ip: + return real_ip + + # Fall back to direct client address + return self.client_address[0] + def create_server(host="localhost", port=8000): """ Crea y configura el servidor HTTP