3

JNDIを使用してDNSサーバーからSRVレコードを取得しようとしています。

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

しかし、属性を取得しようとすると、次の例外が発生します

DNSエラー[ルート例外はjava.net.PortUnreachableException:ICMPポートに到達できません]; 残りの名前'_sip._udp'

host -tsrv_sip._udp.server.comが有効なSRVレコードを返すことを確認しました。

これが起こるかもしれない理由として何か理由はありますか?

4

1 に答える 1

4

次のいずれかです:dns.server.com有効な DNS サーバーではない、 の SRV レコードが_sip._udpない、DNS サービスがポート 53 (標準 DNS ポート) で応答しない、または Java コードが間違っている。

DNS サーバーのトラブルを診断するには、サーバーが動作していることを確認するhost -t SRV _sip._udp.server.com dns.server.comか、試してみてください。dig @dns.server.com -t SRV _sip._udp.server.com

hostまたは予期したエントリが返された場合digは、コードに次の変更を加えてみてください。

変化する:

env.put("java.naming.provider.url", "dns://dns.server.com");

に:

env.put("java.naming.provider.url", "dns:");

(つまり、OS の標準の DNS 解決を使用するだけです)

変化する:

ctx.getAttributes("_sip._udp", new String [] { "SRV" });

に:

ctx.getAttributes("_sip._udp.domain.com", new String [] { "SRV" });

SRV レコードでは検索にドメイン名が必要なため、次のようになります。

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("_sip._udp.domain.com", new String [] { "SRV" });
return attributes;
于 2011-06-24T21:57:59.817 に答える