2011-08-02 14 views
5

Estoy tratando de resolver un nombre de host a su 'IP correspondiente.InetAddress.getByName falla detrás del proxy

Mi entorno es un mac en una red corporativa detrás de un servidor proxy, que se configura con un archivo .pac a través de las preferencias del sistema (configuración de proxy automático). Hasta ahora todo está funcionando bien y puedo acceder a los recursos dentro y fuera de mi red corporativa.

Resolver los hosts dentro de mi red funciona perfectamente bien: InetAddress.getByName("host.local");

Pero cuando se utiliza nombres de host externos, aparece un UnknownHostException: InetAddress.getByName("google.com");

produce

Exception in thread "main" java.net.UnknownHostException: google.com 
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) 
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:850) 
    at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1201) 
    at java.net.InetAddress.getAllByName0(InetAddress.java:1154) 
    at java.net.InetAddress.getAllByName(InetAddress.java:1084) 
    at java.net.InetAddress.getAllByName(InetAddress.java:1020) 
    at java.net.InetAddress.getByName(InetAddress.java:970) 
    at Test.main(Test.java:67) 

(estoy un poco sorprendido acerca de Inet6AddressImpl aquí)

Por lo que yo entiendo es InetAddress.getByName utilizando los mecanismos nativos para resolver nombres de host. Por lo tanto, no creo que el error esté causado por una configuración de proxy faltante dentro de java jvm.

¿Pero qué más puede ser, si todo lo demás funciona bien?

Algunos (tal vez) útil información adicional:

  • estoy usando un MacBook, ifconfig muestra las interfaces lo0, gif0, stf0, en0, fw0, en1 -> conectado a la red, con IPv4 dirección.

  • nslookup google.com en la consola vuelve ** server can't find google.com: NXDOMAIN

  • El mismo código en una máquina Windows dentro de la red producida la misma excepción

alguna idea acerca de la causa de este error? ¿O hay otras formas de resolver nombres de host en Java?

Respuesta

5

Su servidor DNS corporativo le impide resolver cualquier dominio Interent (es probable que no quieran que las personas exploren el contexto no corporativo).

Esto es respaldado por el hecho de que su consulta nslookup falla.

Si no tiene un voto sobre su política corporativa, y su máquina de desarrollo tiene que permanecer en las instalaciones de su empresa, no hay nada que pueda hacer.

+0

Gracias por su respuesta Alexander. No soy un experto en redes, pero ¿esto no significa que no puedo acceder a google.com (y, por supuesto, a este sitio;) desde dentro de la red corporativa? Sé que el archivo pac define las reglas para usar el proxy y cuándo no. ¿Tal vez un problema relacionado con "ejecutar" el pac para la solicitud de un jvm? – Benjamin

+1

Alexander es correcto. Su tráfico llega a Google al ser enviado al proxy, que realiza la búsqueda de DNS antes de enviar el tráfico al servidor web de Google. – EricLaw

+0

@Benjamin. Si puede acceder a 'google.com' a través de su navegador corporativo, entonces puede necesitar configurar el proxy para su programa java. Para obtener ayuda, lea este artículo: http://download.oracle.com/javase/6/docs/technotes/guides/net/proxies.html –

0

Como se menciona en this post, puede establecer DNS personalizado a través de una configuración Sun-JVM única. Tuve este mismo problema de resolución, pero pude preguntar al proxy explícitamente por la búsqueda al configurarlo como el servidor DNS también. YMMV

System.setProperty("sun.net.spi.nameservice.nameservers", "<my-proxy-ip>"); 
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun"); 
Cuestiones relacionadas