0

私はc#で簡単なアプリを開発しています。このアプリは、特定のtldの購入にドメイン名が使用可能かどうかを確認できます。方法:whois-serverリストをダウンロードし、プロトコル43でTCPクライアントを使用してwhoisサーバーにドメイン名を送信し、サーバーの応答を確認します。問題:より多くの国が同じwhoisサーバー「whois.ripe.net」を持っています。フルドメイン名(tldを含む)を送信すると、サーバーの応答は常に「ソースRIPEにエントリが見つかりません」です。tldなしでドメイン名を送信すると、ドメイン名のステータスに関するtld固有のデータが取得されません。

私が使用する方法:

private string GetWhoisInformation(string whoisServer, string url)
    {
        try
        {
            StringBuilder stringBuilderResult = new StringBuilder();
            TcpClient tcpClinetWhois = new TcpClient(whoisServer, 43);
            NetworkStream networkStreamWhois = tcpClinetWhois.GetStream();
            BufferedStream bufferedStreamWhois = new BufferedStream(networkStreamWhois);
            StreamWriter streamWriter = new StreamWriter(bufferedStreamWhois);

            streamWriter.WriteLine(url);
            streamWriter.Flush();

            StreamReader streamReaderReceive = new StreamReader(bufferedStreamWhois);

            while (!streamReaderReceive.EndOfStream)
                stringBuilderResult.AppendLine(streamReaderReceive.ReadLine());
            return stringBuilderResult.ToString();
        }
        catch
        {
            return "lekérdezés sikertelen";
        }
    }

例:私はします:

GetWhoisInformation("whois.ripe.net", "pokerstars.hu")

サーバーの答え:

%ERROR:101: no entries found
%
% No entries found in source RIPE.

次のコマンドの場合:

GetWhoisInformation("whois.ripe.net", "pokerstars")

結果には、次のようないくつかのブロックが含まれます。

% Information related to '80.65.254.128 - 80.65.254.159'

inetnum:        80.65.254.128 - 80.65.254.159
netname:        Pokerstars
descr:          Hosting
country:        GB
admin-c:        DC77-RIPE
tech-c:         JM2352-RIPE
status:         assigned PA
mnt-by:         manx-telecom-mnt
changed:        bill.hogg@manx-telecom.com 20101123
source:         RIPE

ドメイン名「pokerstars.hu」に関する情報はありません。もちろん、pokerstars.vaをチェックしたい場合は、まったく同じ答えが得られます。Pokerstars.huは登録済みドメインですが、pokerstars.vaは登録されていません。

ドメイン名の正しいステータスを見つけるにはどうすればよいですか?

4

2 に答える 2

1

RIPEは、どのドメインのccTLDwhoisサーバーとしても機能しません。ARINと同様に、ネットブロック情報のみが含まれています。各ccTLDには独自のルートwhoisサーバーがあります(つまり、一部のサーバーには適切なwhoisサービスがありません-たとえば、スペイン語の.esレジストリでは、Webクライアントを使用する必要があり、不快なCAPTCHAを入力する必要があります毎回)。

http://www.ripe.net/data-tools/dbも参照してください。ただし、データベースに何が含まれていないかについてはあまり明確ではありません。

からccTLDの情報を要求することにより、信頼できるwhoisサーバーのアドレスを取得できますwhois.iana.org

vnix$ whois -h whois.iana.org hu | fgrep whois:
whois:        whois.nic.hu

http://www.iana.org/domains/root/db/も参照してください

于 2012-10-03T06:30:26.140 に答える
0

whois.melbourneit.netに対してコードを試しましたが、私のドメインの1つに問題はありませんでした。RIPEに対して実行されている問題を再現できたので、同じクエリをWebサイトでインタラクティブに試しましたが、同じ結果が得られました。コードに問題はありません。

tripleeeは正しいですwhois.nic.hu、私はpokerstars.huを解決するためにそれをうまく使用しました-それは私にブレイズがRIPEwhoisサーバーの目的であるのか疑問に思います。

ccTLDのwhoisサーバーフレンドリ名を取得する方法を示してくれたtripleに感謝します。


あなたはこれが役に立つと思うかもしれません:

using System;
using System.IO;
using System.Net.Sockets;
using System.Text;

namespace Whois
{
  class Program
  {
    static void Main(string[] args)
    {
      string tldWhoisServer = "whois.iana.org";
      string ccTldServer, query = null;
      Console.Write("Query> ");
      while ((query = Console.ReadLine()) != string.Empty)
      {
        string tld = query.Substring(query.LastIndexOf('.') + 1);
        string foo = GetWhoisInformation(tldWhoisServer, tld);
        foo = foo.Remove(0, foo.IndexOf("whois:") + 6).TrimStart();
        ccTldServer = foo.Substring(0, foo.IndexOf('\r'));
        Console.WriteLine(GetWhoisInformation(ccTldServer, query));
        Console.Write("Query> ");
      } 
    }
    static string GetWhoisInformation(string whoisServer, string url)
    {
      try
      {
        StringBuilder stringBuilderResult = new StringBuilder();
        TcpClient tcpClinetWhois = new TcpClient(whoisServer, 43);
        NetworkStream networkStreamWhois = tcpClinetWhois.GetStream();
        BufferedStream bufferedStreamWhois = new BufferedStream(networkStreamWhois);
        StreamWriter streamWriter = new StreamWriter(bufferedStreamWhois);

        streamWriter.WriteLine(url);
        streamWriter.Flush();

        StreamReader streamReaderReceive = new StreamReader(bufferedStreamWhois);

        while (!streamReaderReceive.EndOfStream)
          stringBuilderResult.AppendLine(streamReaderReceive.ReadLine());
        return stringBuilderResult.ToString();
      }
      catch
      {
        return "Query failed";
      }
    }
  }
}
于 2012-10-03T04:19:34.873 に答える