nslookup和Java的InetAddress getHostName之间的结果不同

4

我正在尝试编写一个简单的Java程序,该程序将返回IP地址的DNS名称,我使用以下代码实现:

InetAddress host = InetAddress.getByName(ip);
String dnsName = host.getHostName();

当一个DNS名称被注册时,getHostName()将返回该名称,当没有存在的DNS名称时,将返回IP地址。
对于许多地址,上述代码不会返回任何内容,而nslookup命令会返回结果。
例如,对于地址82.117.193.169,nslookup会返回peer-AS31042.sbb.rs,而getHostName()仅返回地址。这并非对所有地址都发生,但在大多数情况下都会出现此问题。
2个回答

0

即使DNS可按需使用,您的计算机可能默认未配置使用它。

我建议尝试:

ping 82.117.193.169

并查看是否将IP地址解析为主机名。


当我使用IP地址进行ping时,它无法将地址解析为主机名,但是当我使用主机名进行ping时,它会将其解析为IP地址。这不是预期的行为吗? - Vasilis
DNS需要提供两个映射,一个将主机名映射到IP地址,但如果您想要反向查找,则还需要从IP地址到主机名的反向映射。 - Peter Lawrey
默认情况下是否可以配置使用反向DNS? - Vasilis
旧的DNS服务器无法做到这一点,但我已经十年没有配置过这样的服务器了。 ;) - Peter Lawrey

0
由于“A”记录检查,Java希望您查找的IP号码已在其中列出。他们称其为“XXX”,我明白为什么:
private static String getHostFromNameService(InetAddress addr, boolean check) {
String host = null;
for (NameService nameService : nameServices) {
    try {
        // first lookup the hostname
        host = nameService.getHostByAddr(addr.getAddress());

        /* check to see if calling code is allowed to know
         * the hostname for this IP address, ie, connect to the host
         */
        if (check) {
            SecurityManager sec = System.getSecurityManager();
            if (sec != null) {
                sec.checkConnect(host, -1);
            }
        }

        /* now get all the IP addresses for this hostname,
         * and make sure one of them matches the original IP
         * address. We do this to try and prevent spoofing.
         */

        InetAddress[] arr = InetAddress.getAllByName0(host, check);
        boolean ok = false;

        if(arr != null) {
            for(int i = 0; !ok && i < arr.length; i++) {
                ok = addr.equals(arr[i]);
            }
        }

        //XXX: if it looks a spoof just return the address?
        if (!ok) {
            host = addr.getHostAddress();
            return host;
        }

        break;

我该怎么解决这个问题呢? - undefined
  1. 检查现代的Java - 或许现在可以运行了。
  2. 通过复制粘贴这个代码并移除这个XXX欺骗检查来实现你自己的方法。
- undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接