如何使用Java从DNS检索多个TXT记录?

如何使用Java从DNS检索多个TXT记录?,java,dns,Java,Dns,我有一个有多个TXT记录的域。挖掘显示了所有这些。名称服务器以不确定的顺序返回它们。尝试使用javax.naming.directory类检索这些记录时,只会得到名称服务器返回的第一个名称——有时是一个,有时是另一个,因为名称服务器返回的顺序不同 下面是一个代码片段: Hashtable<String, String> env = new Hashtable<String, String>(); env.put("java.naming.factory.initial",

我有一个有多个TXT记录的域。挖掘显示了所有这些。名称服务器以不确定的顺序返回它们。尝试使用
javax.naming.directory
类检索这些记录时,只会得到名称服务器返回的第一个名称——有时是一个,有时是另一个,因为名称服务器返回的顺序不同

下面是一个代码片段:

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" });
Hashtable env=new Hashtable();
put(“java.naming.factory.initial”,
“com.sun.jndi.dns.DnsContextFactory”);
DirContext DirContext=新的初始DirContext(env);
Attributes attrs=dirContext.getAttributes(名称,新字符串[]{“TXT”});
此时,
attrs
仅包含一个
属性。这是预期的行为吗?如何让Java检索所有TXT记录?

在我自己的测试中,(单个)返回的属性包含我尝试的域中的两个
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());
}

如果这对您不起作用,图书馆肯定会允许您获取所有记录。

谢谢。我所能说的是,这是现在的工作,它以前没有工作!此外,返回单个TXT
属性
,而该属性本身可以返回一个
namingumeration
,这一事实在我身上丢失了。内部
NamingEnumeration
现在包含TXT记录的每个值的一个条目。@PaulA.Hoadley Yes-外部
NamingEnumeration
将包含提供给
.getAttributes()
调用的列表中的每个
RRTYPE
,和内部枚举,其中每个
RR
。感谢澄清。我完全没有意识到这一点。在不支持javax.naming.directory的Android上,有可能做类似的事情吗?@GrandAdmiral在Android上,我使用了
dnsjava
包来获得完整的DNS客户端功能