当前位置: 首页 > 面试题库 >

域名解析在Ubuntu64 9.04计算机上的Java应用程序中不起作用。所有其他软件可以正确解析DNS

和选
2023-03-14
问题内容

我在Ubuntu64 9.04
PC上安装了许多Java应用程序,但它们都无法解析域名(也有多个JRE,其中有些是IBM产品)。如果我将域名及其关联的IP地址放在hosts文件中,则Java应用程序仅适用于这些域。其他所有非Java程序(例如ping,firefox等)在域解析方面都可以正常工作。我尝试对java.security文件中的所有JRE禁用DNS缓存-
但这也不起作用。在解决这一问题上,我将不胜感激。谢谢!

更新:我确定我的家中或办公室中没有代理服务器。-非常感谢你们在这里帮助我。我真的要使用Linux而不是Windows,因为我再次进行Java开发

jgreenwood@jeg-ubuntu64:~$ cat /etc/resolv.conf
# Generated by NetworkManager
domain hsd1.in.comcast.net.
search hsd1.in.comcast.net.
nameserver 192.168.0.1
jgreenwood@jeg-ubuntu64:~$ env | grep -i proxy
jgreenwood@jeg-ubuntu64:~$ dig google.com

; <<>> DiG 9.5.1-P2 <<>> google.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56845
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com.            IN  A

;; ANSWER SECTION:
google.com.     58  IN  A   74.125.53.100
google.com.     58  IN  A   74.125.45.100
google.com.     58  IN  A   74.125.67.100

;; Query time: 35 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Thu Oct 22 13:37:26 2009
;; MSG SIZE  rcvd: 76

更新:我用RAD编写了这个Java程序:

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.PrintWriter;
import java.io.StringWriter;

public class DomainResolutionTest {

    public static void main(String[] args) {
        if (args.length == 0) args = new String[] { "www.google.com" };

        try {
            InetAddress ip = InetAddress.getByName(args[0]);
            System.out.println(ip.toString());
        }catch (UnknownHostException uhx) {
            System.out.println("ERROR: " + uhx.getMessage() + "\n" + getStackTrace(uhx));
            Throwable cause = uhx.getCause();
            if (cause != null) System.out.println("CAUSE: " + cause.getMessage());
        }

    }

    public static String getStackTrace(Throwable t)
    {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw, true);
        t.printStackTrace(pw);
        pw.flush();
        sw.flush();
        return sw.toString();
    }

}

输出为:

ERROR: www.google.com
java.net.UnknownHostException: www.google.com
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:862)
    at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1213)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1166)
    at java.net.InetAddress.getAllByName(InetAddress.java:1096)
    at java.net.InetAddress.getAllByName(InetAddress.java:1032)
    at java.net.InetAddress.getByName(InetAddress.java:982)
    at DomainResolutionTest.main(DomainResolutionTest.java:12)

从命令行:(相同的结果)

jgreenwood@jeg-ubuntu64:~$ javac DomainResolutionTest.java
jgreenwood@jeg-ubuntu64:~$ java DomainResolutionTest 
ERROR: www.google.com
java.net.UnknownHostException: www.google.com
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:849)
    at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1200)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1153)
    at java.net.InetAddress.getAllByName(InetAddress.java:1083)
    at java.net.InetAddress.getAllByName(InetAddress.java:1019)
    at java.net.InetAddress.getByName(InetAddress.java:969)
    at DomainResolutionTest.main(DomainResolutionTest.java:12)
jgreenwood@jeg-ubuntu64:~$ java -version
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Server VM (build 14.2-b01, mixed mode)
jgreenwood@jeg-ubuntu64:~$

问题答案:

再一次,在这里人们的指导下,我找到了答案。当我执行以下操作时,上述Java程序将起作用:

java -Djava.net.preferIPv4Stack=true DomainResolutionTest

细节:

jgreenwood@jeg-ubuntu64:~$ java -Djava.net.preferIPv4Stack=true DomainResolutionTest 
www.google.com/209.85.225.106
jgreenwood@jeg-ubuntu64:~$ java DomainResolutionTest ERROR: www.google.com
java.net.UnknownHostException: www.google.com
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:849)
    at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1200)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1153)
    at java.net.InetAddress.getAllByName(InetAddress.java:1083)
    at java.net.InetAddress.getAllByName(InetAddress.java:1019)
    at java.net.InetAddress.getByName(InetAddress.java:969)
    at DomainResolutionTest.main(DomainResolutionTest.java:12)

事实证明,IPv6堆栈中存在一个错误。有几篇文章使我得出这个结论:

http://uclue.com/?xq=2127

http://bugs.debian.org/cgi-
bin/bugreport.cgi?bug=477211

https://answers.launchpad.net/ubuntu/+question/23024

我希望我不必每次运行Java应用程序时都添加IPv4废话。最终的解决方案可能在第二个链接中-缺少软件包。我们将会看到。

Debian错误报告日志-#477211 ia32-sun-java6-bin:需要依赖lib32nss-mdns
…无法解析域名。在系统的其余部分可以很好地解决,还没有与其他JDK一起测试。从软件包安装,并使用update-java-
alternatives进行设置。

DNS对我系统上的其他所有功能都起作用。在Debian 2.6.23-AMD64上运行。尝试了Lenny软件包和Sid软件包。对于sun-
java6-bin可以正常工作,而对于ia32-sun-java6-bin则可以失败。精氨酸
…如果您用strace击中Java,您会发现它正在尝试使用libnss_mdns4_minimal.so.2,该软件包可在lib32nss-
mdns包中找到。您应该对此添加依赖性以修复该错误。

sun-java6-bin也会发生同样的事情-这里使用libnss-mdns。

我的机器上确实缺少该软件包:

jgreenwood@jeg-ubuntu64:~$ dpkg -L lib32nss-mdns
Package `lib32nss-mdns' is not installed.
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.

无论哪种方式,我都希望这篇文章对其他人有所帮助,因为这是要弄清的主要PITA。



 类似资料:
  • 为什么我们的域名不能被解析 最近经常有朋友在使用一个域名地址时发现无法被正确解析,比如在使用 Mysql 实例时某些云会给一个私有的域名搭配自有的 nameserver 使用 local client = mysql:new() client:connect({ host = "rdsmxxxxxx.mysql.rds.xxxx.com", port = 3306, dat

  • nslookup可以解析成功,但是ping不可以,为什么?

  • 目前还没有用于链上解析的可靠库,但是ENS解析非常简单,不需要库也可以轻松完成。首先,我们定义了一些只包含必要方法的简化接口,: contract ENS { function resolver(bytes32 node) constant returns (Resolver); } contract Resolver { function addr(bytes32 node)

  • 本文向大家介绍详解js的作用域、预解析机制,包括了详解js的作用域、预解析机制的使用技巧和注意事项,需要的朋友参考一下 虽然,ES6在我们工作中应用得越来越广泛,但是还是很多项目保留着ES5的写法,所以,今天,带着大家重新巩固下ES5下的作用域及预解析机制。 概念: 作用域:域,指的是一个空间、范围、区域,作用指的是在域内可进行读写操作。一个变量的作用域是程序源代码中定义的这个变量的区域。 在ES

  • 我是gRPC的新手,正在尝试使用cactuaroid中的聊天服务器/客户端示例来学习它。我修改了代码,以显示WPF应用程序中长时间运行的任务的进度。所有代码都在.NET5上运行,我使用的是最新版本的gRPC软件包。 使用计算机的IP地址时,该过程工作正常,但是当为gRPC客户端使用计算机名称时,我收到“DNS解析失败”异常(计算机名称为“skylake”): RpcException: Statu

  • 解析至以太坊地址 ENS中最简单和最常用的函数是域名解析函数。域名可以关联多种类型的资源,其中最常见的是以太坊地址。借助ENS库,将域名解析为以太坊地址很简单: ethereum-ens var address = await ens.resolver('alice.eth').addr(); 1 web3.js var address = ens.getAddress('alice.eth');