如何在Java中获取主机名的规范名称?

如何在Java中获取主机名的规范名称?,java,dns,java-7,cname,Java,Dns,Java 7,Cname,我已经为DNS解析构建了一个小型帮助器类: public class DNSService { private static Properties env; private static final String CNAME_ATTRIB = "CNAME"; private static String[] CNAME_ATTRIBS = { CNAME_ATTRIB }; static { env = new Properties();

我已经为DNS解析构建了一个小型帮助器类:

public class DNSService {
    private static Properties env;
    private static final String CNAME_ATTRIB = "CNAME";
    private static String[] CNAME_ATTRIBS = { CNAME_ATTRIB };

    static {
        env = new Properties();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
    }

    public static String getCNAME(String host) throws NamingException {
        return getCNAME(new InitialDirContext(env), host);
    }

    private static String getCNAME(InitialDirContext idc, String host) throws NamingException {
        String cname = host;
        Attributes attrs = idc.getAttributes(host, CNAME_ATTRIBS);
        Attribute attr = attrs.get(CNAME_ATTRIB);

        if (attr != null) {
            int count = attr.size();
            if (count == 1) {
                cname = getCNAME(idc, (String) attr.get(0));
            } else {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < count; i++) {
                    sb.append("-> " + attr.get(i) + "\n");
                }

                throw new NamingException("Unexpected count while looking for CNAME of " + host + ". Expected 1. Got " + count + ".\n"
                        + sb.toString());
            }
        }

        return cname;
    }
}

为什么两次调用的结果如此不同?为什么每次呼叫都没有一个CNAME?

也许主机使用DNS解析作为一种负载平衡?例如,请查看来自amazon的以下官方文档:


其中讨论了WRR和弹性负载平衡。可能您的数据与一些负载平衡混在一起,这些负载平衡会根据负载考虑针对不同的后端解决您的请求,这就是为什么您会得到不同的答案

尝试使用另一个DNS服务器添加,看看这是否有错,您可以通过添加:
env.put(Context.PROVIDER\u URL,"dns://8.8.8.8“”;
请记住,任何非本地的DNS服务器都可能运行较慢。
<Date>     <Hour> <Thread Name> <Host>        <Canonical Name>
02/12/2012 09:51  thread-1      www.site.com  www.site.com
02/12/2012 12:06  thread-2      www.site.com  time.microsoft.akadns.net.
qq.com.edgesuite.net.
a1574.b.akamai.net.