¿Cual es mi dirección IP?

Publicado 10-04-2016

Hoy se nos planteaba el problema de hacer un script para un cliente que necesitaba actualizar la configuración de una VPN dependiendo de la IP de salida que tenía en una determinada sucursal. El script era sencillo de programar, un poco de Bash lo solucionaba, pero teníamos que saber cual era la IP a través de la que su servidor local se estaba conectando a Internet. En esta sucursal sólo tienen un ADSL con la famosa IP dinámica así que puede haber cambiado de un día para otro.

Hemos estado navegando por ahí y viendo algunos servicios como WhatsMyIp.org, que hace muchas cosas pero ninguna tan sencilla como devolver una cadena de texto con la IP detectada. También hemos encontrado servicios de pago, otros que limitaban mucho las consultas, y la verdad es que ninguno que diese mucha confianza, seguro que lo hay pero unos minutos buscando no han dado un resultado satisfactorio.

La solución: Hágalo usted mismo

Entonces hemos pensado… si nuestra propia web está en ruby, Sinatra/PadrinoRb, añadirle esta función no cuesta más de cinco minutos. Y eso hemos hecho.

Podéis ver el resultado en martianoids.com/myip, donde además de presentarla en html damos la opción de obtenerla en texto plano y en json. Seguro que más de uno le va a encontrar utilidad.

El código utilizado

Para ilustrar lo sumamente fácil que es desarrollar algo así en PadrinoRb os dejamos a continuación el código que hemos hecho en no más de cinco minutos:

Una acción en el controlador
 1get :myip, :provides => [:txt, :html, :json] do
 2  case content_type
 3  when :json
 4    return {:ip => request.ip}.to_json
 5  when :txt
 6    return request.ip
 7  else
 8    render 'front/myip'
 9  end
10end
Una plantilla

La plantilla está en formato slim:

 1/ myip.slim
 2
 3- content_for :page_title
 4    | Tu dirección IP
 5
 6header.page-header
 7    h3 Dirección IP
 8
 9section.doc
10    .jumbotron
11        h1 = request.ip
12        p
13            ' Tu dirección IP es
14            em = request.ip
15            ' . También puedes pedirla en
16            a> href="/myip.txt" formato texto
17            ' o en
18            a href="/myip.json" formato json
19            ' .
20            ' Más datos sobre esta IP en la
21            a href="https://apps.db.ripe.net/search/query.html?searchtext=#{request.ip}" base de datos de RIPE
22            | .
Comentarios por Disqus