2009-09-02 18 views
20

¿Hay alguna manera de encontrar la IP del servidor al que está conectado el navegador? Por ej. si el navegador está accediendo al http://www.google.com, ¿podemos decir de qué manera está conectada la IP? Esto es muy útil en casos donde se implementa Round-robin DNS. Así que decir, la primera solicitud de a.com resultados en 1.1.1.1 & resultado de la solicitud posterior en 1.1.1.2 así sucesivamente.¿Cómo saber la dirección IP del servidor (usando JavaScript) a la que está conectado el navegador?

No he podido encontrar ninguna forma de hacerlo con JavaScript. ¿Es posible? Si no, ¿hay alguna forma universal de encontrar esta información?

+0

Una forma podría ser hacer una búsqueda de DNS para 'location.host' a través de ajax. Sin embargo, eso no sería del todo JS. – Dencker

+0

Consulte esta pregunta como relacionada: http://stackoverflow.com/questions/102605/can-i-perform-a-dns-lookup-hostname-to-ip-address-using-client-side-javascript –

Respuesta

12

Bastante seguro de que esto no se puede hacer. Sin embargo, puede usar su idioma preferido del lado del servidor para imprimir la IP del servidor al cliente y luego usarlo como desee. Por ejemplo, en PHP:

<script type="text/javascript"> 
    var ip = "<?php echo $_SERVER['SERVER_ADDR']; ?>"; 
    alert(ip); 
</script> 

Sin embargo, esto depende de la configuración de seguridad de su servidor; algunos pueden bloquear esto.

+1

No usamos PHP, pero entiendo la idea. Independientemente de esto, ¿funcionará incluso si el servidor está NATed? – John

+0

Honestamente, no estoy seguro, puedes intentarlo, es bastante simple. Creé el caso de prueba que publiqué en menos de un minuto. .NET, ColdFusion y estoy seguro de que la mayoría de los otros lenguajes del lado del servidor tienen sus equivalentes. –

+2

No, no será correcto si el servidor está NATed y solo tiene una IP interna. –

6

No estoy seguro de cómo obtener la dirección IP específicamente, pero el objeto de ubicación proporciona parte de la respuesta.

p. Ej. estas variables pueden ser útiles:

  • self.location.host - Establece o el nombre de host y el puerto serie de la ubicación
  • self.location.hostname - Establece o la parte del nombre de host de la ubicación o URL.
+0

self.location .origin -> proporciona protocolo + host + puerto –

5

No puede obtener esto en general. Desde Javascript, solo puede obtener el encabezado HTTP, que puede o no tener una dirección IP (generalmente solo tiene el nombre de host). Parte del programa del navegador es abstraer la dirección TCP/IP y solo le permite tratar con un nombre de host.

1

Actualmente, no hay forma de hacerlo a través de JavaScript, a menos que utilice alguna fuente externa. Incluso entonces, podría no ser 100% correcto.

34

probar este como un atajo, no como una solución definitiva (ver comentarios):

<script type="text/javascript"> 
    var ip = location.host; 
    alert(ip); 
</script> 

Esta solución no puede funcionar en algunos escenarios, pero puede ayudar para la prueba rápida. Saludos

+7

Como el parámetro implica ('host'), esta es la parte del host de la URL, no la dirección IP. – matpie

+0

@sirlancelot Luego, en algunos casos, el host y el IP coincidirán y en otros casos no. – Spacemonkey

1

Puede hacerlo a través de un complemento como applet de Java o Flash, luego haga que el Javascript invoque una función en el applet o viceversa (O haga que JS llame a una función en Flash u otro complemento) y devuelva el IP. Esta podría no ser la IP utilizada por el navegador para obtener los contenidos de la página. Además, si hay imágenes, css, js -> navegador podría haber hecho múltiples conexiones. Creo que la mayoría de los navegadores solo usan la primera IP que obtienen de la llamada DNS (que se conectó correctamente, no está seguro de qué sucede si un nodo se cae después de que se obtienen pocos recursos y de obtener otros: temporizadores/ajax que agregan html que hacen referencia a otros recursos).

Si el applet de Java tuviera que estar firmado, conéctese a la ventana.location (obtenido de javascript, en caso de que el applet sea genérico y pueda usarse en cualquier página de cualquier servidor) sino que vuelva al servidor doméstico y use java.net.Address para obtener IP.

+0

FF debe exponer la IP principal y la lista de direcciones IP que utilizó para varios recursos al obtener una página, en las opciones de la página quizás o disponibles para una extensión. – tgkprog

0

Creo que la respuesta de John es correcta.Por ejemplo, estoy usando mi computadora portátil a través de un servicio wifi administrado por un centro de conferencias. Estoy bastante seguro de que no hay forma de que JavaScript se ejecute en mi navegador para descubrir la dirección IP que está utilizando el proveedor del servicio. Por otro lado, es posible abordar un recurso externo adecuado desde javascript. Puede escribir el suyo propio si realiza una llamada ajax a un servidor que puede tomar la dirección IP de los encabezados HTTP y devolverla, o intente buscar en Google "find my ip". La solución más limpia probablemente sea capturar la información antes de que se sirva la página e insertarla en el html devuelto al usuario. Consulte How to get a viewer's IP address with python? para obtener información sobre cómo capturar la información si está publicando la página con python.

-2

Estoy seguro de que el siguiente código te ayudará a obtener la dirección IP.

<script type="application/javascript"> 
    function getip(json){ 
     alert(json.ip); // alerts the ip address 
    } 
</script> 

<script type="application/javascript" src="http://www.telize.com/jsonip?callback=getip"></script> 
+0

Aconsejar a las personas que carguen un fragmento de código de una fuente aleatoria es una pesadilla de seguridad. (Además, como dice ese sitio, "La API pública se cerrará permanentemente el 15 de noviembre de 2015"). – hashchange

+0

Además, la pregunta era sobre la IP del servidor, no del cliente. – Andris

1

pienso que usted puede utilizar la devolución de llamada desde una solicitud JSONP o tal vez sólo los datos JSON puros utilizando un servicio externo, pero basándose en la salida de JavaScript location.host de esa manera:

$.getJSON("//freegeoip.net/json/" + window.location.host + "?callback=?", function(data) { 
    console.warn('Fetching JSON data...'); 
    // Log output to console 
    console.info(JSON.stringify(data, null, 2)); 
}); 

voy Use este código para mis necesidades personales, ya que primero vine a este sitio por la misma razón.

Puede usar otro servicio externo en lugar del que estoy usando para mis necesidades. Existe una lista muy buena y contiene pruebas hechas aquí https://stackoverflow.com/a/35123097/5778582

+0

La pregunta era sobre la IP del servidor, esto le dará la del cliente. – Andris

+0

Mire la parte js ... 'window.location.host' devuelve el nombre del servidor, por lo que el servicio lo usará y devolverá la IP del servidor del lado del cliente ... y no del cliente IP – Jiab77

+0

Ah, ya veo, usted ' estas en lo correcto. Parcialmente. Quería usar esto para verificar si el servidor al que me conecto está en la IP predefinida, pero resolverlo me dará el IP oficial y no el IP real. – Andris

Cuestiones relacionadas