Inetaddress返回意外的主机名

时间:2013-11-26 04:32:02

标签: java network-programming

我有以下代码,用于在我前进之前获取服务器的完整规范主机名。 这会在我的服务器上返回一个值(特别是不同的域)。命令行上的nslookup返回正确的值。

我试图了解java.inet在内部究竟做了什么来解析正确的完整规范名称。 它是否查询DNS服务器?

import java.net.InetAddress;

public class IpLookup {

    public static void main(String[] args) {

        try{

            String REQUESTSERVER = args[0];  
            InetAddress in = InetAddress.getByName(REQUESTSERVER);
            REQUESTSERVER = in.getCanonicalHostName();
            System.out.println("Canonical REQUESTSERVER "+ REQUESTSERVER );
        } catch(Exception e) {
            System.out.println("lookup failed");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

正在发生的事情是nslookup返回您输入的主机名及其IP地址,而Java代码首先查找IP,然后根据返回的IP地址使用反向DNS。 rDNS可能未配置为返回您认为的“规范”地址。

我在www.google.com上运行nslookup:

> www.google.com
Non-authoritative answer:
Server:  perseus.jhmg.pvt
Address:  192.168.10.254

Name:    www.google.com
Addresses:  2607:f8b0:400a:801::1010
          173.194.33.146
          173.194.33.144
          173.194.33.148
          173.194.33.147
          173.194.33.145

然后我在www.google.com上运行了你的程序并得到了这个结果:

Canonical REQUESTSERVER sea09s17-in-f17.1e100.net

对nslookup返回的第一个地址执行反向DNS搜索,提供:

> 173.194.33.146
Server:  perseus.jhmg.pvt
Address:  192.168.10.254

Name:    sea09s17-in-f18.1e100.net
Address:  173.194.33.146

(顺便说一句,注意1e100是10 100 或者被称为“googol”的数字......可爱: - )

这证明了正在发生的事情。