Me gustaría leer mi dirección ip desde la siguiente página(http://l2.io/ip u otra) usando javascript para guardarlo en mi variable "myIp".
function getMyIP() {
var myIp;
...
return myIp;
}
¿Como se puede hacer?
Comprobando su sitio enlazado, puede incluir una etiqueta script pasando un parámetro ?var=desiredVarName
que se establecerá como una variable global que contiene la dirección IP:
<script type="text/javascript" src="http://l2.io/ip.js?var=myip"></script>
<!-- ^^^^ -->
<script>alert(myip);</script>
[Demo][2]
Creo que no tengo que decir que esto puede ser fácilmente suplantado (ya sea mediante el uso de proxies o suplantando las cabeceras de solicitud), pero vale la pena señalar en cualquier caso.
En caso de que su página se sirva utilizando el protocolo https
, la mayoría de los navegadores bloquearán el contenido de la misma página servida utilizando el protocolo http
(que incluye scripts e imágenes), por lo que las opciones son bastante limitadas. Si tiene < 5k visitas/día, puede utilizar la Smart IP API. Por ejemplo:
<script>
var myip;
function ip_callback(o) {
myip = o.host;
}
</script>
<script src="https://smart-ip.net/geoip-json?callback=ip_callback"></script>
<script>alert(myip);</script>
[Demo][4]
Edición: Al parecer, el certificado de este servicio https
ha caducado, por lo que el usuario tendría que añadir una excepción manualmente. Abre directamente su API para comprobar el estado del certificado: https://smart-ip.net/geoip-json
La forma más resistente y sencilla, en caso de que tenga lógica de servidor back-end, sería simplemente dar salida a la IP del solicitante dentro de una etiqueta <script>
, de esta forma no necesita depender de recursos externos. Por ejemplo:
PHP:
<script>var myip = '<?php echo $_SERVER['REMOTE_ADDR']; ?>';</script>
También hay una solución PHP más robusta (que tiene en cuenta las cabeceras que a veces establecen los proxies) en esta respuesta relacionada.
C#:
<script>var myip = '<%= Request.UserHostAddress %>';</script>