2011-08-02 23 views
5

Bir ana bilgisayar adını ilgili IP adresine çözümlemeye çalışıyorum. InetAddress.getByName, proxy'nin arkasında başarısız oluyor

Ortamım, sistem tercihleri ​​aracılığıyla otomatik proxy yapılandırması aracılığıyla bir .pac dosyasıyla yapılandırılmış bir proxy sunucusunun arkasındaki bir şirket ağındaki bir mac var. Şimdiye kadar her şey iyi çalışıyor ve şirket ağımın içindeki ve dışındaki kaynaklara erişebiliyorum. InetAddress.getByName("host.local");

Ama dış ana bilgisayar adlarını kullanırken, bir UnknownHostException olsun: my ağı içinde ana çözme

mükemmel çalışıyor ben ( InetAddress.getByName("google.com");

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) 

üretir

( Inet6AddressImpl hakkında biraz şaşkınAnladığım kadarıyla, inetAddress.getByName, ana makine adlarını çözmek için yerel mekanizmaları kullanıyor. Bu yüzden hataya java jvm içindeki eksik bir proxy yapılandırmasından kaynaklandığını düşünmüyorum.

Ama her şey yolunda gidiyorsa başka ne olabilir?

bazıları (belki) yararlı ek bilgiler:

  • Ben bir MacBook kullanıyorum, ifconfig, lo0 gif0, stf0, fw0, en0 arayüzleri gösterir en1 -> ipv4 ile, ağa bağlı adres. konsolda

  • nslookup google.com aynı İstisna

Bu hatanın nedeni hakkında herhangi bir fikir üretti ağı içinde bir windows makinede ** server can't find google.com: NXDOMAIN

  • aynı kod döndürür? Veya java'da ana bilgisayar adlarını çözümlemenin başka yolları var mı?

  • cevap

    5

    Şirketinizin DNS sunucusu, herhangi bir Etkileşim etki alanını çözmenizi engeller (büyük olasılıkla kişilerin kurumsal olmayan içeriğe göz atmasını istemezler).

    Bu, nslookup sorgunuzun başarısız olmasıyla desteklenir.

    Şirket politikanızla ilgili bir oylama hakkınız yoksa ve geliştirme makinenizin şirket binanızda kalması gerekiyorsa, yapabileceğiniz bir şey yoktur.

    +0

    Cevabınız için teşekkürler Alexander. Ağ uzmanı değilim, ancak bu, google.com'a (ve tabii ki bu siteye;) şirket ağından erişemediğim anlamına gelmez mi? Pac dosyasının, proxy'yi ne zaman kullanacağını ve ne zaman kullanılmayacağını tanımladığını biliyorum. Belki bir jvm isteği için pac "yürütme" ile ilgili bir sorun? – Benjamin

    +1

    Alexander doğrudur. Trafiğiniz Google'a gönderilir ve proxy'ye gönderilir. Bu, trafiği Google web sunucusuna göndermeden önce DNS'in kendisini arar. – EricLaw

    +0

    @Benjamin. Kurumsal tarayıcınız üzerinden google.com'a ulaşabiliyorsanız, java programınız için proxy'yi yapılandırmanız gerekebilir. Yardım için şu makaleyi okuyun: http://download.oracle.com/javase/6/docs/technotes/guides/net/proxies.html –

    0

    this post'da belirtildiği gibi, yalnızca bir Sun-JVM ayarı aracılığıyla özel DNS ayarlayabilirsiniz. Aynı çözünürlük sorunu vardı, ama aynı zamanda DNS sunucusu olarak ayarlayarak proxy için arama için açıkça sordu. YMMV

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