在下面的java代码中,我正在进行DNS SRV记录查找,以解析给定域名的目标域名和关联端口,例如root@1000000000.blubluzone.com。用/ HERE /下面指示的查找函数以某种方式返回null并且我无法获得查询结果(即记录数组为空)。因此,在for循环中访问记录数组时会抛出空指针异常。
您认为我缺少什么才能使以下代码正常工作。我正在使用dnsjava,http://www.dnsjava.org/download/(位于页面底部)提供了相关的API jar文件。提前感谢您的建议。
import org.xbill.DNS.Lookup;
import org.xbill.DNS.Record;
import org.xbill.DNS.SRVRecord;
import org.xbill.DNS.TextParseException;
import org.xbill.DNS.Type;
public class DNSLookup {
public static void main(String[] args) {
if (args.length < 1) {
System.err.println("Usage: java -jar DNSLookup <hostname>");
System.exit(1);
}
String query = "_ssh._tcp." + args[0];
try {
/*****HERE*********/
Record[] records = new Lookup(query, Type.SRV).run();
for (Record record : records) {
SRVRecord srv = (SRVRecord) record;
String hostname = srv.getTarget().toString().replaceFirst("\\.$", "");
int port = srv.getPort();
System.out.println(hostname + ":" + port);
}
} catch (TextParseException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:3)
您的代码没问题,但如果没有找到记录,则Lookup.run()
会返回null
(不为空数组)。
例如,如果您将_ssh._tcp
替换为_nicname._tcp
,然后查找uk
,您将找到.UK whois
服务器的SRV记录。
如果出现问题则与您的输入参数有关。