Obtener mi IP pública en Javascript [SOLUCIONADO]

Descubriendo la Dirección IP con JavaScript

En el mundo del desarrollo web, es común la necesidad de conocer cuál es la dirección IP desde la que el usuario está accediendo a nuestra aplicación o página web. Esta demanda puede surgir por motivos de seguridad, para la implementación de restricciones geográficas, para la personalización de contenido, entre otras razones. JavaScript, siendo uno de los lenguajes de programación más utilizados en el desarrollo de aplicaciones web, ofrece diferentes métodos para la consecución de la dirección IP del cliente. A continuación, exploraremos cómo lograr esta tarea aprovechando las capacidades que JavaScript nos ofrece.

Uso de APIs Externas para la Obtención de la Dirección IP

Uno de los enfoques más sencillos y directos para identificar la dirección IP es el uso de APIs externas desarrolladas para proporcionar precisamente este dato. Vamos a revisar cómo podemos hacer una solicitud a una de estas APIs y obtener la dirección IP del usuario mediante una petición AJAX utilizando JavaScript.


xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.ipify.org?format=json', true);
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var response = JSON.parse(xhr.responseText);
        alert('Tu dirección IP es: ' + response.ip);
    }
};
xhr.send();

El fragmento de código anterior realiza una solicitud a la API de ipify.org, un servicio gratuito que devuelve la dirección IP del cliente en formato JSON. Cuando la solicitud se completa, el resultado se procesa y se muestra al usuario.

Considerando la Asincronía con Promesas o Async/Await

JavaScript moderno nos provee de herramientas más elegantes para manejar operaciones asíncronas, como las promesas y la sintaxis async/await. Estas herramientas nos permiten escribir un código más limpio y fácil de seguir, particularmente cuando trabajamos con peticiones a APIs externas o cualquier tipo de operación que requiera esperar una respuesta.


fetch('https://api.ipify.org?format=json')
    .then(response => response.json())
    .then(data => {
        alert('Tu dirección IP es: ' + data.ip);
    })
    .catch(error => {
        console.error('No se pudo obtener la IP', error);
    });

La función fetch devuelve una promesa, lo que nos permite encadenar .then() para procesar la respuesta y .catch() para manejar posibles errores. Este enfoque hace que el manejo de la petición HTTP sea mucho más legible y mantenible.

Implementación con Async/Await para Mejor Legibilidad

La sintaxis async/await simplifica aún más el trabajo con promesas, permitiéndonos escribir código asincrónico que luce como código sincrónico tradicional. Veamos un ejemplo:


async function obtenerIP() {
    try {
        const respuesta = await fetch('https://api.ipify.org?format=json');
        const data = await respuesta.json();
        alert('Tu dirección IP es: ' + data.ip);
    } catch (error) {
        console.error('No se pudo obtener la IP', error);
    }
}

obtenerIP();

En este fragmento, la función obtenerIP se marca con async, lo que indica que va a manejar promesas de una manera más intuitiva. Dentro de la función, se utiliza await antes de las operaciones que devuelven promesas para esperar su resolución antes de continuar con la ejecución del código siguiente.

Consideraciones sobre Privacidad y Seguridad

Es esencial tener en cuenta los aspectos de privacidad y seguridad cuando trabajamos con la información de IP de los usuarios. Se debe siempre informar a los usuarios acerca de la recopilación de datos y su propósito, y se debe manejar dicha información respetando las leyes y regulaciones aplicables, como el GDPR en Europa o la CCPA en California.

Accediendo a Datos de Geolocalización Adicionales

Algunas APIs que proporcionan la dirección IP también ofrecen datos de geolocalización y otra información relacionada. Este tipo de datos puede ser invaluable para personalizar la experiencia del usuario basada en su ubicación o para realizar análisis estadísticos.


fetch('https://ipapi.co/json/')
    .then(response => response.json())
    .then(data => {
        console.log('Tu dirección IP es: ' + data.ip);
        console.log('País: ' + data.country_name);
        console.log('Ciudad: ' + data.city);
        console.log('Proveedor de servicio de Internet: ' + data.org);
    })
    .catch(error => {
        console.error('No se pudo obtener la información', error);
    });

El código anterior hace uso de una API diferente que además de devolver la dirección IP, proporciona información detallada como el país, la ciudad y el proveedor de servicio de Internet del usuario.

La Obtención de la IP Local del Cliente

Es importante señalar que, típicamente, las APIs externas brindarán la dirección IP pública del usuario, que puede ser la de su router o un proxy y no necesariamente la IP local de su dispositivo. Obtener la IP local del dispositivo del usuario es mucho más complejo y puede no ser posible sin el uso de tecnologías como WebRTC.

Conclusiones Técnicas

La obtención de la dirección IP desde la perspectiva del cliente usando únicamente JavaScript está sujeta a ciertas limitaciones y requiere de servicios externos. Es fundamental seleccionar APIs confiables y considerar aspectos legales y éticos. Con el uso de AJAX, promesas, y la sintaxis async/await, podemos integrar la funcionalidad de forma efectiva y eficiente en nuestras aplicaciones web.

Esperamos que este artículo haya sido de utilidad y que ahora tengas un conocimiento más claro de cómo manejar la obtención de la dirección IP de tus usuarios utilizando JavaScript. Recuerda siempre hacer pruebas exhaustivas y validar la confiabilidad de los servicios de API que decidas implementar en tus proyectos.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad