【问题标题】:Querying the DNS service records to find the hostname and TCP/IP查询 DNS 服务记录以查找主机名和 TCP/IP
【发布时间】:2009-04-10 20:17:33
【问题描述】:

Roderic DM Page 博士在一篇关于生命科学标识符(参见 LSID Tester, a tool for testing Life Science Identifier resolution services)的论文中写道:

给定 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 库,我想要一个轻量级的解决方案)?

谢谢

【问题讨论】:

    标签: java dns host bioinformatics


    【解决方案1】:

    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. 服务器

    【讨论】:

    • 谢谢!看起来很有趣!我稍后会在 WE 中测试您的解决方案。 :-)
    • 我知道它已经很老了,但我想在line 4 上指出this.env 应该是env。 +1 不过,为了得到好的答案,这正是我所需要的。
    【解决方案2】:

    使用标准 Java 库无法做到这一点。 InetAddress 类只能查找 DNS A 记录。

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

    我个人在 Google Android 上使用过 1.6 版本,运行良好。 2.0 及更高版本使用 Java nio 层,因此与早期的 JVM 不兼容。

    【讨论】:

    • 您好,我正在尝试将 dnsjava-1.6.6 集成到我的 android 应用程序中以进行 SRV 解析。我想知道,您是否编译了整个 dnsjava 包并拉入 .jar - 或者您是否从包中提取了相关的源文件....以保持轻量级?谢谢!
    • 就我而言,我刚刚将整个(预编译的).jar 文件添加到我的项目中。不过,只添加您需要的文件应该是可行的。
    【解决方案3】:

    我认为如果不使用一些外部库,您将无法做到这一点。 java.util.InetAddress 有一些通过 DNS 解析名称的方法,但它仅可用于将名称解析为 IP 地址,而不能用于通用 DNS 查询。

    为此,您需要一些外部库,例如 DNSJava

    【讨论】:

      【解决方案4】:

      如果有人正在寻找非 Java 解决方案(他们可能会考虑到问题的标题不是特定于语言的),当我实现 LSID(参见 doi:10.1186/1751-0473-3-2)时,我使用了 PEAR 包 Net_DNS ,可以查找SRV记录。

      【讨论】:

      • 或者,做一个自我回答的问题来分享你的工作。 :)
      猜你喜欢
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      相关资源
      最近更新 更多