0

ストリームと tcp 接続についてトレーニングするために、Android 用の Java で whois を作成しています。

しかし、私には問題があります。私は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 コードでは完全に機能します。

4

2 に答える 2

3

DNS クエリが複数のレコードに一致するようです。少なくとも、それが私が応答を解釈する方法です。返された応答には、次の行が表示されます。

1 つのレコードを選択するには、「xxx」で検索します。ここで、xxx は上に表示されているレコードの 1 つです。レコードが同じ場合は、「=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;
}

考慮すべき点: メソッド名、変数などには、スペイン語ではなく英語を使用してください。これにより、コードが国際的に読みやすくなります。プログラミング言語自体も英単語を使用しています。英語と母国語が奇妙に混ざらないようにしてください。

于 2012-02-02T15:39:47.787 に答える
0

dominio.com を検索すると、次の 3 つの一致が得られます。

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

クエリで関心のあるものを指定する必要があります。

=dominio.com<newline>

複数の一致がない場合でも、これは常に機能します。

于 2012-02-02T15:25:18.237 に答える