获取Java中DNS查找的名称服务器信息

时间:2009-10-22 08:54:05

标签: java dns

如果我从DNS名称中查找IP地址,如下所示:

InetAddress inetAddress = InetAddress.getByName(name);
String address = inetAddress.getHostAddress();

我可以找出哪个名称服务器向我提供了信息吗?

3 个答案:

答案 0 :(得分:3)

我不确定这是否是您想要的,但是有一个DNSJava库,它提供Java中的DNS功能。也许您可以使用它来更好地了解您的问题,或实施特定的解决方案?就像我说的那样,不是一个完美的匹配,但也许有用。

答案 1 :(得分:3)

对于给定的InetAddress,请尝试以下操作:

// get the default initial Directory Context
InitialDirContext idc = new InitialDirContext();
// get the DNS records for inetAddress
Attributes attributes = idc.getAttributes("dns:/" + inetAddress.getHostName());
// get an enumeration of the attributes and print them out
NamingEnumeration attributeEnumeration = attributes.getAll();
System.out.println("-- DNS INFORMATION --");
while (attributeEnumeration.hasMore()) {
    System.out.println("" + attributeEnumeration.next());
}
attributeEnumeration.close();

适应它以获取您正在寻找的东西。

答案 2 :(得分:0)

您需要一个命名上下文。可选您可以指定DNS服务器。 即使这样你也需要选择你想要的东西。这是一个例子。

final String ADDR_ATTRIB = "A";
final String[] ADDR_ATTRIBS = {ADDR_ATTRIB};
final Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
idc = new InitialDirContext(env);
env.put(Context.PROVIDER_URL, "dns://"+dnsServer);
final List<String> ipAddresses = new LinkedList<>();
final Attributes attrs = idc.getAttributes(hostname, ADDR_ATTRIBS);
final Attribute attr = attrs.get(ADDR_ATTRIB);
if (attr != null) for (int i = 0; i < attr.size(); i++)  ipAddresses.add((String) attr.get(i));