使用dnsjava使用Java查询吗?

时间:2019-07-01 14:35:38

标签: java dns dnsjava

我正在尝试使用Google公共DNS服务器(8.8.8.8)进行查询,以获取某些已知URL的IP地址。但是,似乎无法使用以下代码来获得它?我正在使用dnsjava java库。 This is my current code

The results

stackoverflow.com.,ns-1033.awsdns-01.org.
stackoverflow.com.,ns-cloud-e1.googledomains.com.
stackoverflow.com.,ns-cloud-e2.googledomains.com.
stackoverflow.com.,ns-358.awsdns-44.com.

结果:

{{1}}

1 个答案:

答案 0 :(得分:0)

您不需要DNS库就可以查找IP地址。您可以简单地use JNDI

Properties env = new Properties();
env.setProperty(Context.INITIAL_CONTEXT_FACTORY,
    "com.sun.jndi.dns.DnsContextFactory");
env.setProperty(Context.PROVIDER_URL, "dns://8.8.8.8");

DirContext context = new InitialDirContext(env);
Attributes list = context.getAttributes("stackoverflow.com",
    new String[] { "A" });

NamingEnumeration<? extends Attribute> records = list.getAll();
while (records.hasMore()) {
    Attribute record = records.next();
    String name = record.get().toString();
    System.out.println(name);
}

如果您坚持使用dnsjava库,则需要使用Type.A(就像您的代码在编辑之前所做的一样)。

查看documentation for the Record class,注意直接已知子类下的长长列表。您需要将每个Record强制转换为适当的子类,在本例中为ARecord

完成该转换后,您可以使用另一种方法getAddress

for (int i = 0; i < records.length; i++) {
    ARecord r = (ARecord) records[i];
    System.out.println(r.getName() + "," + r.getAdditionalName()
        + " => " + r.getAddress());
}