2011-06-24 27 views
3

JNDIを使用してDNSサーバーからSRVレコードを取得しようとしています。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; 

しかし、私は[ルート例外が java.net.PortUnreachableExceptionです: ICMPポート到達不能]次の例外

DNSエラーを取得する属性を取得しようとしています。残りの名前 '_sip._udp'

は私がホスト-t SRV _sip._udp.server.com有効なSRVレコードを返すを確認しました。

この理由は何故ですか?

答えて

4

dns.server.com有効なDNSサーバーではない、_sip._udpのSRVレコードがない、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を試して、サーバーが動作することを確認します。 (すなわち、ちょうどあなたのOSを使用し

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

:へ

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

変更:

hostまたは予想エントリを返す場合は、あなたのコードを次のように変更してみてください標準DNS解決)

変更:

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

へ:SRVレコードと

ctx.getAttributes("_sip._udp.domain.com", new String [] { "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; 
関連する問題