如果我从DNS名称中查找IP地址,如下所示:
InetAddress inetAddress = InetAddress.getByName(name);
String address = inetAddress.getHostAddress();
我可以找出哪个名称服务器向我提供了信息吗?
答案 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));