当前位置: 首页 > 知识库问答 >
问题:

Java DNS 查找 SRV 记录

常元章
2023-03-14

在下面的java代码中,我正在进行DNS SRV记录查找,以解析给定域名的目标域名和相关端口,例如root@1000000000.blubluzone.com.用/HERE/below表示的查找函数以某种方式返回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();
          }
       }
      }

共有1个答案

程智明
2023-03-14

您的代码很好,除了<code>查找。run()如果未找到记录,则返回<code>null(不是空数组)。

例如,如果替换<code>_ssh_tcp与_nicname_tcp,然后查找uk您将找到.ukwhoisserver的SRV记录。

如果存在问题,则与输入参数有关。

 类似资料:
  • 问题内容: 我有一个Main应用程序和多个工作程序节点,它们在领事中注册。我想通过负载平衡将数据发送到工作节点。使用congo的golang API,我可以在主应用程序上获得可用的服务。 但是,我无法在golang应用程序中获取DNS SRV记录。 如该线程中所述,如何在go应用程序中读取领事SRV记录?,我尝试了github.com/miekg/dns,但没有成功。另外,我尝试使用github.

  • 相当意外的是,我在谷歌搜索中似乎找不到这个问题的答案。 SRV记录集中有多少记录太多? 10,50 100? 如果我想提供一个在同一物理位置的50台服务器之间保持平衡的单一主机名,如何做到最好? 如何将其扩展到100台服务器?

  • find 查找匹配标准的记录,可以链式查询(见下文): Person.find({status:'active'}, function(err, results) { // ... }); 你也可以限制结果的个数,这条语句限制结果为10个: Person.find({status:'active'}, 10, function(err, results) { // ... }); Pers

  • 我正在构建一个自定义DNS服务器,除其他外,它提供记录以及相关的和记录。我可以验证直接查询服务器是否返回预期的答案: 然而,当通过我的ISPs解析器(或任何公共解析器,如谷歌的8.8.8.8)查询时,我得到的答案是空的: 查询立即返回,我可以看到我的服务器接收到一个传入查询,但它是空的。解析程序剥离和其他答案是已知的行为吗?如果是这种情况,为什么查询被转发到我的服务器?或者是错误在我这边,服务器只

  • 问题内容: 我想在MySQL数据库中提取重复记录。这可以通过以下方式完成: 结果是: 我想将其拉出,以使其显示重复的每一行。就像是: 关于如何做到这一点有什么想法?我试图避免做第一个,然后在代码中用第二个查询查找重复项。 问题答案: 关键是重写此查询,以便可以将其用作子查询。

  • 问题内容: 如何提出一个存储过程来选择过去30天的结果? 问题答案: 用适当的列名称替换第一个GETDATE()。