在一篇关于生命科学标识符(参见LSID测试工具,用于测试生命科学标识符解析服务)的论文中,Roderic博士写道:
给定LSID _lsid._tcp.ubio.org,查询urn:lsid**:ubio.org**:namebank:11815的DNS记录将返回animalia.ubio.org:80作为ubio.org LSID服务的位置。
我了解到可以使用unix上的_lsid._tcp.ubio.org主机命令将链接到:
host -t srv _lsid._tcp.ubio.org
_lsid._tcp.ubio.org has SRV record 1 0 80 ANIMALIA.ubio.org我如何使用Java (没有任何外部的J2SE库,我想要一个轻量级的解决方案)来做这个'DNS‘?
谢谢
发布于 2009-10-25 05:35:53
JNDI提供程序可以查找SRV记录。你需要做的事情是:
Hashtable env = new Hashtable();
env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory");
env.put("java.naming.provider.url", "dns:");
DirContext ctx = new InitialDirContext(env);
Attributes attrs = ctx.getAttributes("_lsid._tcp.ubio.org", new String[] { "SRV" });返回的属性是字符串的枚举,这些字符串看起来类似于"1 0 80 ANIMALIA.ubio.org“。空格分隔的字段按顺序排列:
发布于 2009-04-11 14:49:44
您不能使用标准的Java库来完成这个任务。InetAddress类只能查找DNS A记录。
要查找SRV记录(以及除A记录之外的任何其他DNS资源记录类型),您需要一个第三方库。dnsjava是通常的选择。
我个人在Google上使用了1.6版本,它运行得很好。2.0版本和更高版本使用的是Java层,因此与早期的nio不兼容。
发布于 2009-04-10 20:26:27
我认为,如果不使用一些外部库,就无法做到这一点。java.util.InetAddress有一些通过DNS解析名称的方法,但它仅用于将名称解析为IP地址,而不用于一般的DNS查询。
为此,您需要一些外部库,如DNSJava。
https://stackoverflow.com/questions/738750
复制相似问题