我正在尝试将主机名解析为其对应的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中的主机名吗?
答案 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!