2012-02-02 39 views
0

我正在做一個java的whois在android上訓練流和tcp連接。whois在java爲Android

但我有一個問題。我有一段時間前寫過的php腳本,我正在嘗試在java中做同樣的事情。

這是我的Java代碼:

public String consultawhois(String domain,String tld) 
    { 
     String domquest = domain + "." + tld; 
     String resultado = ""; 
     Socket theSocket; 
     String hostname = "whois.internic.net"; 
     int port = 43; 
     try { 
      theSocket = new Socket(hostname, port, true); 
      Writer out = new OutputStreamWriter(theSocket.getOutputStream()); 
      out.write(domquest + "\r\n"); 
      out.flush(); 
      DataInputStream theWhoisStream; 
      theWhoisStream = new DataInputStream(theSocket.getInputStream()); 
      String s; 
      while ((s = theWhoisStream.readLine()) != null) { 
      resultado = resultado + s + "\n"; 
      } 
     } 
     catch (IOException e) { 
     } 

     return resultado; 
    } 

服務器的答案是不正確的,我認爲這個問題是我送一個壞的查詢。我發送的查詢是「dominio.com \ r \ n」,在我的php whois代碼中,它完美地工作。

+0

我已經找到了很多不同的腳本來使這在java中,查詢結構是相同的! – user1185430 2012-02-02 15:36:08

+0

如果我嘗試google.com,它說GOOGLE.COM沒有匹配.... – user1185430 2012-02-02 15:54:39

+0

我認爲有*多個*匹配。不是「不匹配」。查詢= google.com,它會給你正確的答案。 – 2012-02-02 16:01:22

回答

3

似乎DNS查詢匹配多個記錄。至少,這是我如何解讀迴應。在返回的效應初探,你應該看到下面一行:

挑出一個記錄,以「XXX」,其中xxx是上面顯示的記錄 的一個查找。如果記錄相同,則使用「= xxx」查找 ,以獲得每條記錄的完整顯示。

因此,如果您在「=」前加上查詢,它將僅返回該記錄的數據。以下爲我工作。

public String consultawhois(String domain,String tld) 
{ 
    String domquest = domain + "." + tld; 
    String resultado = ""; 
    Socket theSocket; 
    String hostname = "whois.internic.net"; 
    int port = 43; 
    try { 
     theSocket = new Socket(hostname, port, true); 
     Writer out = new OutputStreamWriter(theSocket.getOutputStream()); 
     out.write("="+domquest + "\r\n"); 
     out.flush(); 
     DataInputStream theWhoisStream; 
     theWhoisStream = new DataInputStream(theSocket.getInputStream()); 
     String s; 
     while ((s = theWhoisStream.readLine()) != null) { 
     resultado = resultado + s + "\n"; 
     } 
    } 
    catch (IOException e) { 
    } 

    return resultado; 
} 

需要考慮的一件事:使用英語來表示方法名稱,變量等,而不是西班牙語。它將使您的代碼更易於閱讀國際。編程語言本身也使用英文單詞。儘量避免使用英語和母語的奇怪組合。

+0

好吧,它的工作原理,知道它顯示我的信息...但如果我要求terra.com,它會顯示我terra.com.br,terra.com。 PE和字符串名稱中包含terra.com的更多域名...我不知道它爲什麼在我的php中工作,但不在java中。 .. – user1185430 2012-02-02 16:19:00

0

在三場比賽的結果dominio.com查找:

  • DOMINIO.COM.BR
  • DOMINIO.COM.ASCPROBIENESTARIDSS.COM
  • DOMINIO.COM

你應該指定您感興趣的查詢。

=dominio.com<newline> 

即使沒有多個匹配的情況下,這也可以奏效。

+0

好吧,我說「dominio.com」來說一個查詢結構的例子。我嘗試過與terra.com,我知道是註冊,它說沒有關於此域的信息... – user1185430 2012-02-02 15:34:23

+1

你應該檢查出Jeroen Peeters的答案,你應該把「=」放在你的請求前面。我錯誤地將服務器響應解釋爲「找不到域」,而實際上它是「找到多個域」。 – 2012-02-02 15:55:46

+0

Nitpick:根據RFC3912每行必須以CR + LF終止 – 2018-01-04 15:00:45