【问题标题】:How do I retrieve multiple TXT records from DNS with Java?如何使用 Java 从 DNS 检索多个 TXT 记录?
【发布时间】:2012-09-05 10:44:39
【问题描述】:

我有一个包含多条 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" });

此时,attrs 只包含一个Attribute。这是预期的行为吗?如何让 Java 检索所有 TXT 记录?

【问题讨论】:

    标签: java dns


    【解决方案1】:

    在我自己的测试中,(单个)返回的属性包含我尝试过的域中的两个 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 库肯定会允许您获取所有记录。

    【讨论】:

    • 谢谢。我只能说现在可以,以前不行!此外,返回单个 TXT Attribute 本身 可以返回 NamingEnumeration 的事实让我迷失了。内部的NamingEnumeration 现在包含 TXT 记录的每个值的条目。
    • @PaulA.Hoadley 是的 - “外部”NamingEnumeration 将包含提供给 .getAttributes() 调用的列表中的每个 RRTYPE 的列表,以及每个 @987654330 的内部枚举@ 在里面。
    • 感谢您的澄清。我完全忘记了这一点。
    • 是否可以在不支持 javax.naming.directory 的 Android 上做类似的事情?
    • @GrandAdmiral 在 Android 上我使用了 dnsjava 包来获得完整的 DNS 客户端功能
    猜你喜欢
    • 1970-01-01
    • 2015-08-19
    • 2012-07-27
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2011-08-16
    相关资源
    最近更新 更多