0

たとえば、DNS構成で次のSRVレコードが定義されている場合

_dev._tcp          IN      SRV     0       0       8400   dev.server.com.

次のコマンドを実行できます

host -lt SRV server.com

そしてそれは私にdnsサーバー(server.com)のSRVレコードの完全なリストを与えます。JNDIルックアップを使用して同じことをしたい場合

Hashtable<String, String> env = new Hashtable<String, String>();
env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory");
DirContext ctx = new InitialDirContext(env);
Attributes attributes = ctx.getAttributes("server.com", new String [] { "SRV" });
return attributes;

上記のコードは属性を返していません。上記のコードの最後から2行目をこれに変更すると、

Attributes attributes = ctx.getAttributes("_dev._tcp.server.com", new String [] { "SRV" });

できます。

しかし、問題は、以前は完全なドメイン名がわからないため、SRVレコードを検索して完全なドメイン名を見つける必要があることです。

これを行う方法として何かアイデアはありますか?

4

1 に答える 1

2

DNS ゾーン転送を指示するパラメーター-l/usr/bin/host従来の DNS クエリとは異なり、ゾーン転送は TCP 上で動作します。

これが何をするかhost -lt SRV server.comです:

  1. のネーム サーバーを検索しますserver.com
  2. 最初にリストされたネーム サーバーのポート 53 に TCP で接続します。
  3. ゾーン転送を開始します。
  4. フィルタに従って結果を除外し-t srvます。

JNDI を介してゾーン転送を開始し、探している結果をフィルターで除外する必要があります。で DNS ゾーン転送を呼び出す方法DnsContextlist().

NamingEnumeration<NameClassPair> names = ctx.list("server.com");

IMHO、JNDIにはひどいインターフェースがあります。すべてのネーミング サービスとディレクトリ サービスが非常に汎用的になるように設計されており、インターフェースと DNS の間の機械的および技術的なミスマッチは単純にイライラさせられます。

より実用的で使いやすく、フル機能の DNS ライブラリを探している場合は、http: //www.dnsjava.org の dnsjava プロジェクトを参照してください。

また、すべての DNS サーバーが信頼できないホストからのゾーン転送を許可しているわけではないことに注意してください。最近では、LAN DNS サーバーでさえデフォルトでゾーン転送を許可しません。

于 2011-11-01T06:18:40.333 に答える