7

ライフ サイエンス識別子(ライフ サイエンス識別子解決サービスをテストするためのツールである LSID テスターを参照)に関する論文で、Roderic DM Page 博士は次のように書いています。

LSID urn:lsid**:ubio.org**:namebank:11815 を指定して、DNS に_lsid._tcpの SRV レコードを照会します。ubio.orgは、ubio.org LSID サービスの場所として animalia.ubio.org:80 を返します。

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 ライブラリがなければ、軽量のソリューションが必要です)。

ありがとうございました

4

4 に答える 4

19

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

返される属性は、「1080ANIMALIA.ubio.org」のような文字列の列挙です。スペースで区切られたフィールドは次のとおりです。

  1. 優先度
  2. 重さ
  3. ポート
  4. サーバ
于 2009-10-25T05:35:53.577 に答える
11

標準の Java ライブラリを使用してこれを行うことはできません。このクラスは、DNSレコードInetAddressを検索することしかできません。A

SRVレコード (およびレコード以外の DNS リソース レコード タイプ)を検索するAには、サード パーティのライブラリが必要です。 dnsjava通常のオプションです。

私は個人的に Google Android で 1.6 バージョンを使用しましたが、問題なく動作します。バージョン 2.0 以降は Javanioレイヤーを使用するため、以前の JVM とは互換性がありません。

于 2009-04-11T14:49:44.587 に答える
2

いくつかの外部ライブラリを使用しないとできないと思います。java.util.InetAddressには、DNS 経由で名前を解決する方法がいくつかありますが、名前を IP アドレスに解決する場合にのみ使用でき、一般的な DNS クエリには使用できません。

そのためには、DNSJavaなどの外部ライブラリが必要です。

于 2009-04-10T20:26:27.330 に答える
0

誰かがJava以外の解決策を探している場合(質問のタイトルが言語固有ではないことを彼らが与えるかもしれない)、私がLSIDを実装したとき(doi:10.1186 / 1751-0473-3-2を参照)、私はSRVレコードを検索できるPEARパッケージNet_DNS 。

于 2009-10-25T19:03:58.090 に答える