【问题标题】:Java DNS API not workingJava DNS API 不工作
【发布时间】:2011-08-10 10:34:10
【问题描述】:

我似乎无法弄清楚如何让这段代码正常工作。难道我做错了什么?程序在 Record[] 记录上失败 =lookup.run();行。

import java.util.Iterator;

    import org.xbill.DNS.ARecord;
    import org.xbill.DNS.Lookup;
    import org.xbill.DNS.Record;
    import org.xbill.DNS.TXTRecord;
    import org.xbill.DNS.TextParseException;
    import org.xbill.DNS.Type;
    Lookup lookup;
    try {
        lookup = new Lookup("google.com", Type.ANY);
        Record[] records = lookup.run();

        if (lookup.getResult() == Lookup.SUCCESSFUL) {
            String responseMessage = null;
            String listingType = null;
            for (int i = 0; i < records.length; i++) {
                if (records[i] instanceof TXTRecord) {
                    TXTRecord txt = (TXTRecord) records[i];

                    for (Iterator j = txt.getStrings().iterator(); j.hasNext();) {
                        responseMessage += (String) j.next();
                    }
                } else if (records[i] instanceof ARecord) {
                    listingType = ((ARecord) records[i]).getAddress()
                            .getHostAddress();
                }
            }
        }
    }catch (TextParseException e) {
        e.printStackTrace();
    }

【问题讨论】:

  • 如果打印堆栈跟踪失败,也发布堆栈跟踪。

标签: java dns


【解决方案1】:

你说它不起作用是什么意思?请按照前面的要求粘贴任何异常跟踪。我能够很好地运行代码,我将输出添加到记录中以查看结果。代码如下:

import java.util.Iterator;
import org.xbill.DNS.ARecord;
import org.xbill.DNS.Lookup;
import org.xbill.DNS.Record;
import org.xbill.DNS.TXTRecord;
import org.xbill.DNS.TextParseException;
import org.xbill.DNS.Type;

public class DNS {

    public static void main(String[] args) {
        try {
            Lookup lookup = new Lookup("google.com", Type.ANY);
            Record[] records = lookup.run();

            if (lookup.getResult() == Lookup.SUCCESSFUL) {
                String responseMessage = null;
                String listingType = null;
                for (int i = 0; i < records.length; i++) {
                    if (records[i] instanceof TXTRecord) {
                        TXTRecord txt = (TXTRecord) records[i];
                        for (Iterator j = txt.getStrings().iterator(); j
                                .hasNext();) {
                            responseMessage += (String) j.next();
                        }
                        System.out.println("TXRecord " + responseMessage);
                    } else if (records[i] instanceof ARecord) {
                        listingType = ((ARecord) records[i]).getAddress()
                                .getHostAddress();
                        System.out.println("ARecord address : " + listingType);
                    }
                }
            }
        } catch (TextParseException e) {
            e.printStackTrace();
        }
    }
}

这是输出:

ARecord address : 74.125.224.49
ARecord address : 74.125.224.51
ARecord address : 74.125.224.52
ARecord address : 74.125.224.48
ARecord address : 74.125.224.50
TXRecord nullv=spf1 include:_netblocks.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all

【讨论】:

  • 如果相同的代码对 OP 不起作用但对您有效,则可能是 OP 系统上的网络配置问题。我想这个功能首先需要互联网连接。
  • 我在 Eclipse 中运行它。行 Record[] records = lookup.run();返回空值。我有互联网连接,所以我知道这不是问题。您使用的是哪个版本的 dnsjava,可能是它还是网络配置问题?不打印堆栈跟踪,它不会通过第一个 if 语句。如果我注释掉第一个 if 语句,那么它会抛出一个空指针异常。
  • 我正在使用 dnsjava-2.0.0.jar。另一种选择是去任何其他网络并从那里运行程序(如家庭/工作/星巴克/图书馆),看看它是否有效。
  • 想通了!我使用的是损坏的 dnsjava-2.0.0.jar。我现在正在使用他们较小的 dnsjava-2.1.1.jar 文件,一切正常!
  • 我在上面使用 2.1.1 库的示例代码中遇到了同样的问题。您是否还有其他解决问题的方法。我的还是不行。
猜你喜欢
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 2023-03-26
  • 2016-05-21
  • 2019-06-17
相关资源
最近更新 更多