3

C#/Java プログラムからドメイン名の whois 情報を取得したいと考えています。これを行う簡単な方法はありますか?

4

6 に答える 6

4

I think, the easiest way is a socket connection to a whois server on port 43. Send the domainname followed by a newline and read the response.

于 2008-09-10T08:33:32.990 に答える
3

トーマスの答えは、接続する「whois」サーバーがわかっいる場合にのみ機能します。

それを見つけるにはさまざまな方法がありますが、すべてのドメインレジストリで一様に機能する方法はありません (AFAIK)。

一部のドメイン名は DNS 内SRVのサービスのレコードをサポートしていますが、公式レジストリのレコードを上書きするレコードを_nicname._tcpサブドメインが提供するのを防ぐ方法については、まだ承認された標準がないため、問題があります ( https://datatracker. ietf.org/doc/html/draft-sanz-whois-srv-00 )。SRV

多くの TLD では、クエリを に送信できます<tld>.whois-servers.net。これは実際には非常にうまく機能しますが、公式に委任された第 2 レベル ドメインがあるすべての場合に機能するとは限らないことに注意してください。

たとえば、.uk公式のサブドメインがいくつかありますが、そのうちの一部のみが.ukレジストリによって実行されており、他のサブドメインには独自の WHOIS サービスがあり、whois-servers.netデータベースにはありません。

紛らわしいことに、データベース.uk.comなどの「非公式」レジストリもありwhois-servers.netます。

ps は、ほとんどの IETF プロトコルと同様に、WHOIS の公式の行末区切り文字でありCRLF、単なる ではありませんLF

于 2008-10-07T09:34:45.467 に答える
2

この情報を提供するWebサービスをいくつか見つけました。これは無料で、私にとっては素晴らしい働きをしました。 http://www.webservicex.net/whois.asmx?op=GetWhoIS

于 2009-05-29T00:24:12.080 に答える
2

ここで完璧な C# の例を見つけました。11 行のコードをコピーして、独自のアプリケーションに直接貼り付けます。ただし、最初にいくつかの using ステートメントを追加して、メモリ リークを防ぐために dispose メソッドが適切に呼び出されるようにする必要があります。

StringBuilder stringBuilderResult = new StringBuilder();
using(TcpClient tcpClinetWhois = new TcpClient(whoIsServer, 43))
{
   using(NetworkStream networkStreamWhois = tcpClinetWhois.GetStream())
   {
      using(BufferedStream bufferedStreamWhois = new BufferedStream(networkStreamWhois))
      {
         using(StreamWriter streamWriter = new StreamWriter(bufferedStreamWhois))
         {
            streamWriter.WriteLine(url);
            streamWriter.Flush();
            using (StreamReader streamReaderReceive = new StreamReader(bufferedStreamWhois))
            {
               while (!streamReaderReceive.EndOfStream) stringBuilderResult.AppendLine(streamReaderReceive.ReadLine());
            }
         }
      }
   }
}
于 2013-04-23T21:21:18.660 に答える
-4

Here's the Java solution, which just opens up a shell and runs whois:

import java.io.*;
import java.util.*;

public class ExecTest2 {
    public static void main(String[] args) throws IOException {
        Process result = Runtime.getRuntime().exec("whois stackoverflow.com");

        BufferedReader output = new BufferedReader(new InputStreamReader(result.getInputStream()));
        StringBuffer outputSB = new StringBuffer(40000);
        String s = null;

        while ((s = output.readLine()) != null) {
            outputSB.append(s + "\n");
            System.out.println(s);
        }

        String whoisStr = output.toString();
    }
}
于 2008-09-10T08:36:03.047 に答える