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

标签 java dns host bioinformatics

在一篇关于生命科学标识符(参见 LSID Tester, a tool for testing Life Science Identifier resolution services)的论文中,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

我如何使用 Java J2SE API 来做这个“DNS”事情(没有任何外部 Java 库,我想要一个轻量级的解决方案)?

谢谢

最佳答案

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" });

返回的属性是字符串的枚举,类似于“1 0 80 ANIMALIA.ubio.org”。空格分隔的字段按顺序排列:

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

关于java - 查询 DNS 服务记录以查找主机名和 TCP/IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/738750/

相关文章:

linux - 在没有 ping 的情况下从命令行测试主机名是否存在

java - 如何使用 BitcoinJ 创建费用替代 TX

java - 具有 JNDI.LDAP 的 LDAP 属性

java - GWT - 如何将 KeyDownHandler 添加到 Rootpanel

php - 通过PHP获取域名到期日期

ruby - 在 Ruby 中反向 DNS?

c# - Dns.GetHostEntry 在 Windows Mobile 上返回错误的 IP 地址

c# - 有没有办法以编程方式检查 AppFabric 缓存主机是否处于事件状态?

java - 如何检查 ACTION_CALL Activity 是否建立了连接?

mysql - mysql.user 表中的 127.0.0.1、localhost、[hostname] 有什么区别