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 不作为任何域的 ccTLD whois 服务器;与 ARIN 一样,它只包含网络块信息。每个 ccTLD 都有自己的根 whois 服务器(或者,其中一些没有适当的 whois 服务 - 例如,西班牙.es注册局要求您使用 Web 客户端,并且必须填写令人讨厌的 CAPTCHA每次)。

另请参阅http://www.ripe.net/data-tools/db,尽管它对数据库不包含的内容不是很明确。

您可以通过向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 尝试了您的代码,它发现我的一个域没有问题。我能够重现您针对 RIPE 运行的问题,因此我在他们的网站上以交互方式尝试了相同的查询 - 并得到了相同的结果。你的代码没有问题。

Tripleee 是对的whois.nic.hu,我成功地用它来解析 pokerstars.hu - 这让我想知道 RIPE whois 服务器的用途是什么。

感谢 Triplee 向我们展示了如何获取 ccTLD 的 whois 服务器友好名称。


您可能会发现这很有用:

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 回答