【问题标题】:Java DNS Lookup for SRV recordsSRV 记录的 Java DNS 查找
【发布时间】:2012-04-13 10:02:46
【问题描述】:

在下面的 java 代码中,我正在查找 DNS SRV 记录以解析给定域名的目标域名和关联端口,例如 root@1000000000.blubluzone.com。下面用 /HERE/ 指示的查找函数以某种方式返回 null,我无法获得查询结果(即记录数组为 null)。因此,在 for 循环中访问记录数组时会引发空指针异常。

您认为我缺少什么才能使以下代码正常工作。我正在使用 dnsjava,相关的 API jar 文件可在http://www.dnsjava.org/download/(页面底部)找到。提前感谢您的建议。

     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();
          }
       }
      }

【问题讨论】:

    标签: java dns srv


    【解决方案1】:

    您的代码没问题,只是如果没有找到记录,Lookup.run() 会返回 null不是空数组)。

    例如,如果您将 _ssh._tcp 替换为 _nicname._tcp,然后查找 uk,您将找到 .UK whois 服务器的 SRV 记录。

    如果有问题,那就是您的输入参数。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多