2012-04-13 56 views
3

在下面的java代碼中,我正在進行DNS SRV記錄查找以解析給定域名(例如[email protected])的目標域名和關聯端口。以/ HERE /以下指示的查找函數以某種方式返回null,並且我無法獲得查詢結果(即記錄數組爲空)。因此,當在for循環中訪問記錄數組時,會引發空指針異常。用於SRV記錄的Java DNS查找

您認爲我錯過了什麼讓下面的代碼工作。我使用的是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(); 
      } 
     } 
     } 

回答

2

你的代碼是好的,但Lookup.run()回報null一個空數組),如果不找到任何記錄。

例如,如果更換_ssh._tcp_nicname._tcp,然後查找uk,你會發現在.UK whois服務器的SRV記錄。

如果您的輸入參數存在問題。