如何在Java 8中查找CAA DNS记录?

rhfm7lfc  于 2023-01-11  发布在  Java
关注(0)|答案(3)|浏览(130)

在Java 8中查找CAA DNS记录的最佳方法是什么?
使用InitialDirContext查找CAA记录失败,因为CAA记录尚不受支持。
例如,使用

InitialDirContext context  = new InitialDirContext();
Attributes = context.getAttributes("dns:/" + domain + ".", new String[] { "CAA" });

失败

javax.naming.directory.InvalidAttributeIdentifierException: Unknown resource record type 'CAA'
    at com.sun.jndi.dns.DnsContext.fromAttrId(DnsContext.java:714)
    at com.sun.jndi.dns.DnsContext.attrIdsToClassesAndTypes(DnsContext.java:735)
    at com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:431)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:235)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:141)
    at com.sun.jndi.toolkit.url.GenericURLDirContext.getAttributes(GenericURLDirContext.java:103)
    at javax.naming.directory.InitialDirContext.getAttributes(InitialDirContext.java:142)

(this适用于其他记录类型,如A、AAAA或CNAME)
有没有其他方法可以使用vanilla Java 8来实现这一点?如果没有,可以使用哪些第三方库?

rbl8hiat

rbl8hiat1#

正如上面所建议的,你可以使用dnsjava。它很稳定,非常容易处理,最低要求是Java8。
举个简单的例子:

public static void main(String[] args) throws TextParseException {
    Record[] records = new Lookup("google.com", Type.CAA).run();
    System.out.println(records[0]);
}
v64noz0r

v64noz0r2#

声明一下,Java仍然不支持CAA记录,甚至在Java 19中也不支持--最新的版本是2023年1月3日。
我在JavaBugsDatabase中找不到对此的任何引用,所以我猜这不会是Java团队的优先事项。
推荐的其他Java DNS库离题。但是,如果你在Google上搜索java caa record,你应该会看到一些有希望的搜索结果。例如,“dnsjava”/“org.xbill.DNS”库。

jexiocij

jexiocij3#

这将对指定域的CAA记录执行DNS查找,如果查找成功,则返回CAARecord对象数组。然后,您可以访问CAARecord对象的属性以获取CAA记录的详细信息。

import org.xbill.DNS.*;

// other code

Lookup lookup = new Lookup(domain, Type.CAA);
Record[] records = lookup.run();
if (lookup.getResult() == Lookup.SUCCESSFUL) {
   for (Record record : records) {
       CAARecord caaRecord = (CAARecord) record;
       // do your stuff
   }
}

相关问题