使用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) 个答案