Obtener nuestra IP externa desde el terminal de Linux usando el comando dig

Bueno, si ya vimos ayer cómo obtener nuestra IP externa desde el PowerShell de Windows y anteriormente desde Linux con cURL y con wget, hoy vamos a ver unha tercera forma de hacer esto desde Linux: con el comando dig (acrónimo de Domain Information Groper).

Para este ejemplo nos serviremos del servicio de OpenDNS, aunque también podría hacersce con otros como el de Google, Cloudflare o el de Ipify que usamos ayer. Básicamente tendríamos que usar este comando:

dig +short myip.opendns.com @resolver1.opendns.com

¿Y si queremos usarlo en un script? Pues basta con meter la respuesta que capturamos en una variable:

miDirIp="$(dig +short myip.opendns.com @resolver1.opendns.com)"

Conocer nuestra IP externa desde línea de comandos en Windows, usando PowerShell

En el pasado vimos cómo podíamos descubrir nuestra IP externa desde línea de comandos en Linux, sirviéndonos tanto de cURL como del comando wget. Como ahora ya todos sabéis que soy un apaniaguado del Tito Bill vamos a ver cómo hacerlo con el PowerShell de Microsoft.

Como siempre, cuando se trata de la IP externa, tenemos que recurrir a un servicio web externo. Hay un buen montón de opciones para esto, pero por comodidad (comodidad para mí, porque ya tengo las pruebas hechas con ese) recurriremos a https://api.ipify.org

En PowerShell podemos usar el cmdlt Invoke-WebRequest para lanzar peticiones http y https a una web y recoger su respuesta. Si llamamos al api que os ponía arriba obtendremos nuestra IP.

Invoke-WebRequest -uri "https://api.ipify.org/"

¿Y ya está? Pues no, porque eso nos devolverá como texto plano además de la IP el status de la respuesta y las cabeceras, por lo que aunque podemos leer la IP sería incómodo trabajar con ella. Pero por suerte el cmdlt nos permite filtrar y obtener solo el valor que nos interesa. Tal que así:

(Invoke-WebRequest -uri "https://api.ipify.org").content

De esa forma sí que obtendríamos solo la línea con el valor de la IP, ya que accedemos únicamente al contenido de la respuesta, al valor de content. Si quisiéramos meter el valor de la IP en una variable para trabajar con un script podríamos hacerlo tal que así:

$miDirIP = (Invoke-WebRequest -uri "https://api.ipify.org/").Content

El API de geolocalización en HTML5

Aunque la geolocalización no forme parte de la especificación original de HTML5 (al menos según dice el manual de Remy Sharp, que es el que en un primer momento fue manual de referencia), su funcionalidad es una de las más atractivas e interesantes de dicho lenguaje, sobre todo en un contexto de web cada vez más orientada a dispositivos móviles (tablet, smartphone).

En fin, el API de geolocalización de HMTL5 permite que el navegador acceda a los datos de la posición del dispositivo desde el que se está accediendo a la web, ya sea por triangulación usando el GPS, o el GSM del teléfono; o a través de la posición de tu dirección IP.

El API posee tres métodos básicos:

  • getCurrentPosition(): Recoge la posición del dispositivo una vez.
  • watchPosition(): Recupera y actualiza la posición conforme va cambiando.
  • clearWatch(): Detiene la actualización de la posición.

En caso de éxito, getCurrentPosition() y watchPosition() devuelven un objeto Position, formado a su vez por un objeto coords (con todas las coordenadas) y un timestamp. El objeto coords tiene varias propiedades, algunas reconocidas por todos los navegadores y otras no:

  • latitude: un número flotante de sólo lectura que indica la latitud.
  • longitude: un número flotante de sólo lectura que indica la longitud.
  • accuracy: un número flotante de sólo lectura que indica la precisión de la longitud y la latitud en metros.
  • altitude: un número flotante de sólo lectura que indica la altura. No todos los dispositivos los permiten, en esos casos viene a nulo
  • altitudeAccuracy: un número flotante de sólo lectura que indica la precisión de la altura en metros. No todos los dispositivos los permiten, en esos casos viene a nulo
  • heading: un número flotante de sólo lectura que indica la dirección y el recorrido, expresada en grados. No todos los dispositivos los permiten, en esos casos viene a nulo
  • speed: un número flotante de sólo lectura que indica la velocidad de desplazamiento, expresada en metros por segundo. No todos los dispositivos los permiten, en esos casos viene a nulo

Ahora que te has leído la teoría, lo mejor es un ejemplo práctico, similar al que aparece en el manual de Lawson y Sharp (Introducing HTML5):

if(navigator.geolocation){
    navigator.geolocation.getCurrentPosition(function (position{
        var coordenadas = position.coords;
        showMap(coordenadas.latitude, coordenadas.longitude, coordenadas.accuracy);
    });
}else{
    window.alert("El navegador no soporta el API de geolocalización");
}

Plantéate que sería un código que llame a una función que genere un mapa recibiendo las coordenadas (como las API de GoogleMaps o OpenStreetMap). Primero comprueba que el navegador soporte el API, luego almacena las coordenadas conseguidas con getCurrentPosition en una variable objeto y finalmente las envía a la función que genera el mapa.

En fin, un API con muchas posibilidades en las nuevas aplicaciones web para dispositivos móviles.