【问题标题】:Using dnsjava to query using java?使用 dnsjava 使用 java 查询?
【发布时间】:2019-11-12 05:23:59
【问题描述】:

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

The results

        Lookup lookup = new Lookup("stackoverflow.com", Type.NS);
        SimpleResolver resolver=new SimpleResolver("8.8.8.8");

        lookup.setDefaultResolver(resolver);
        lookup.setResolver(resolver);
        Record [] records = lookup.run();
        for (int i = 0; i < records.length; i++) {
            Record  r = (Record ) records[i];
            System.out.println(r.getName()+","+r.getAdditionalName());
        }
    }
    catch (  Exception ex) {
        ex.printStackTrace();
        logger.error(ex.getMessage(),ex);
    }

结果:

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.

【问题讨论】:

  • 是的,现在应该起来了
  • 结果也需要在您的问题中显示为文本。见meta.stackoverflow.com/questions/285551/…
  • 已进行更改
  • 谢谢。我看到您还将代码从使用Type.A 更改为Type.NS;如果你想要 IPv4 地址,你想要Type.A。还是要获取其他域名服务器的地址?
  • 我想使用 8.8.8.8 的公共 google dns 并询问某个 URL 的具体 IP 地址

标签: java dns dnsjava


【解决方案1】:

您不需要 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,注意Direct Known Subclasses 下的长列表。您需要将每个 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());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 2014-02-14
    • 1970-01-01
    • 2019-07-17
    • 2016-10-14
    • 1970-01-01
    • 2018-06-26
    • 2021-11-24
    相关资源
    最近更新 更多