2012-09-05 43 views
2

我有一個域有多個TXT記錄。挖顯示所有這些。名稱服務器以非確定性順序返回它們。嘗試使用javax.naming.directory類檢索這些記錄,每一個都會導致名稱服務器返回的名字 - 有時是一個,有時是另一個,因爲名稱服務器返回的順序不同。如何從Java使用DNS檢索多個TXT記錄?

這裏的一個代碼片段:

Hashtable<String, String> env = new Hashtable<String, String>(); 
env.put("java.naming.factory.initial", 
      "com.sun.jndi.dns.DnsContextFactory"); 
DirContext dirContext = new InitialDirContext(env); 
Attributes attrs = dirContext.getAttributes(name, new String[] { "TXT" }); 

在這一點上,attrs永遠只包含一個Attribute。這是預期的行爲?我如何讓Java檢索所有的TXT記錄?

回答

3

在我自己的測試中,(單)返回屬性包含兩者的TXT記錄我試過域:

Attributes attrs = dirContext.getAttributes("paypal.com", new String[] { "TXT" }); 
Attribute txt = attrs.get("TXT"); 
NamingEnumeration e = txt.getAll(); 
while (e.hasMore()) { 
    System.out.println(e.next()); 
} 

如果不爲你工作,則dnsjava庫肯定讓你獲取所有記錄。

+0

謝謝。我只能說現在這個工作,它以前不工作!另外,返回一個單獨的TXT'Attribute'這個事實,它本身可以返回一個'NamingEnumeration',這個事實在我身上已經失去了。那個內部的'NamingEnumeration'現在包含了TXT記錄每個值的一個條目。 –

+0

@ PaulA.Hoadley是的 - 「外部」NamingEnumeration將包含從提供給'.getAttributes()'調用的列表中的每個'RRTYPE'的列表,以及內部每個'RR'的枚舉。 – Alnitak

+0

謝謝澄清。這完全失去了我。 –