Java中的DNS查找使用JNDI和默认域

时间:2016-02-02 11:16:53

标签: java dns jndi

我在Java中使用JNDI在我的应用程序中执行DNS查找以解析A记录 - 在Windows 7上的Java 8下运行。但是,除非我指定包含域名的完整主机条目,否则我无法解析记录。

Java似乎忽略了在PC上配置的DNS搜索列表。我没有问题,包括域名,如果这是Java要求的,但我找不到公共方法来获取搜索列表中的域。

以下SSCCE使用私有方法sun.net.dns.ResolverConfiguration来获取DNS搜索列表,但我不应该使用它,因为它是内部专有API,可能会在将来的版本中删除。

import java.util.*;
import javax.naming.*;
import javax.naming.directory.*;

public class SSCCE {
  public static void main(String[] args) {
    String[] hostsToLookup = new String[] { "testhost", "testhost.mydomain.com" };

    try {
      System.out.println("DNS Search List:");
      for (Object o: sun.net.dns.ResolverConfiguration.open().searchlist()) {
        System.out.println(" " + o);
      }

      Properties p = new Properties();
      p.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
      InitialDirContext idc = new InitialDirContext(p);

      for (String h : hostsToLookup) {
        System.out.println("Host: " + h);
        try {
          Attributes attrs = idc.getAttributes(h, new String[] { "A" });
          Attribute attr = attrs.get("A");

          if (attr != null) {
            for (int i = 0; i < attr.size(); i++) {
              System.out.println(" " + attr.get(i));
            }
          }
        }
        catch (NameNotFoundException e) {
          System.out.println(" undefined");
        }
      }
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
}

当我仅使用它无法解析的主机部分来运行时,但是当我从搜索列表中手动添加域时,它会这样做:

DNS Search List:
 mydomain.com
Host: testhost
 undefined
Host: testhost.mydomain.com
 192.0.2.1

是否有可能使Java使用JNDI尊重DNS搜索列表,或者是否有公共方法来获取DNS搜索列表?

0 个答案:

没有答案