簡體   English   中英

使用dnsjava使用Java查詢嗎?

[英]Using dnsjava to query using java?

我正在嘗試使用Google公共DNS服務器(8.8.8.8)進行查詢,以獲取某些已知URL的IP地址。 但是,似乎無法使用以下代碼來獲得它? 我正在使用dnsjava java庫。 這是我當前的代碼

結果

        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.

您不需要DNS庫就可以查找IP地址。 您可以簡單地使用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 (就像您的代碼在編輯之前所做的那樣)。

查看Record類文檔 ,請注意Direct Known子類下的長長列表。 您需要將每個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());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM