有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用JNDI和默认域在Java中进行DNS查找

我正在使用Java中的JNDI在我的应用程序中执行DNS查找,以解析一个在Windows 7上的Java 8下运行的记录。但是,除非我指定完整的主机条目(包括域名),否则我在解析记录时会遇到问题

Java似乎忽略了电脑上配置的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

是否可以使用JNDI让Java遵守DNS搜索列表,或者是否有公共方法获取DNS搜索列表


共 (0) 个答案