InetAddress.getByName在代理后面失败

时间:2011-08-02 11:51:45

标签: java proxy hostname resolve

我正在尝试将主机名解析为其对应的IP。

我的环境是代理服务器后面的公司网络中的mac,它通过系统首选项(自动代理配置)配置.pac文件。到目前为止,一切工作正常,我可以访问公司网络内外的资源。

解析网络中的主机非常正常:     InetAddress.getByName("host.local");

但是当我使用外部主机名时,我得到一个UnknownHostException:     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)

(我对这里的Inet6AddressImpl感到有些惊讶)

据我所知,InetAddress.getByName使用本机机制来解析主机名。所以我不认为错误是由java jvm中缺少的代理配置引起的。

但如果其他一切都运转良好,还有什么可以呢?

一些(可能)有用的附加信息:

  • 我正在使用MacBook,ifconfig显示接口lo0,gif0,stf0,en0,fw0,en1 - >使用ipv4地址连接到网络。

  • 控制台上的
  • nslookup google.com返回** server can't find google.com: NXDOMAIN

  • 网络中的Windows机器上的相同代码产生了相同的异常

有关此错误原因的任何想法? 或者还有其他方法来解析java中的主机名吗?

3 个答案:

答案 0 :(得分:5)

您的公司DNS服务器阻止您解析任何Interent域(他们可能不希望人们浏览非公司上下文)。

nslookup查询失败的事实支持这一点。

如果您没有对公司政策进行投票,并且您的开发机器必须留在您的公司场所,那么您无能为力。

答案 1 :(得分:0)

this post中所述,您可以通过仅限Sun-JVM设置来设置自定义DNS。我有同样的解决方案问题,但能够通过将其设置为DNS服务器来明确询问代理查找。 YMMV

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

答案 2 :(得分:0)

我知道这个问题已经更新,但由于它是Google中排名最高的结果,我想添加这些有用的信息,这些信息可能会让人感到震惊。

使用此方法时,请记住以下内容。

http://www.google.com -- DOES NOT WORK
google.com -- WORKS!