查询DNS服务记录以查找主机名和TCP/IP

Pie*_*rre 6 java dns host bioinformatics

在一篇关于生命科学标识符的论文中(参见LSID Tester,一种测试生命科学标识符解析服务的工具),Roderic DM Page博士写道:

鉴于LSID urn:lsid**:ubio.org**:namebank:11815,查询DNS以获取_lsid._tcp的SRV记录.ubio.org返回animalia.ubio.org:80作为ubio.org LSID服务的位置.

我了解到我可以使用unix上的host命令将_lsid._tcp.ubio.org链接到animalia.ubio.org:80 :

host -t srv _lsid._tcp.ubio.org
_lsid._tcp.ubio.org has SRV record 1 0 80 ANIMALIA.ubio.org
Run Code Online (Sandbox Code Playgroud)

如何使用Java J2SE API执行此"DNS"操作(没有任何外部Java库,我想要一个轻量级的解决方案)?

谢谢

Dea*_*vey 18

JNDI DNS提供程序可以查找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" });
Run Code Online (Sandbox Code Playgroud)

返回的属性是字符串的枚举,看起来像"1 0 80 ANIMALIA.ubio.org".空格分隔的字段按顺序排列:

  1. 优先
  2. 重量
  3. 港口
  4. 服务器


Aln*_*tak 9

您无法使用标准Java库执行此操作.该InetAddress班是唯一能够查找DNS A记录.

要查找SRV记录(以及记录以外的任何其他DNS资源记录类型A),您需要第三方库. dnsjava是通常的选择.

我个人在谷歌Android上使用1.6版本,它运行正常.2.0版及更高版本使用Java nio层,因此与早期的JVM不兼容.