顶级域名无知使用RIPE

时间:2012-10-03 01:08:48

标签: c# .net dns whois tld

我正在开发一个c#中的简单应用程序,可以检查域名是否可用于特定tld的购买。 方法:我下载了一个whois-server列表,我将域名发送到协议43上带有TCP客户端的whois服务器,然后检查服务器的答案。 问题:更多国家/地区拥有相同的whois服务器:“whois.ripe.net”。 如果我发送完整的域名(使用tld),服务器的答案始终是“在源RIPE中找不到条目”。如果我发送没有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不是。

如何找到域名的正确状态?

2 个答案:

答案 0 :(得分:1)

RIPE不作为任何域的ccTLD whois服务器;像ARIN一样,它只包含网络信息。每个ccTLD都有自己的root whois服务器(或者,也就是说,其中一些没有合适的whois服务 - 例如,西班牙语.es注册表要求您使用Web客户端,并且使用令人讨厌的CAPTCHA你必须每次都填写。

另请参阅http://www.ripe.net/data-tools/db,但不清楚数据库不包含的内容。

您可以通过whois.iana.org请求ccTLD的信息来获取权威whois服务器的地址。

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

另见http://www.iana.org/domains/root/db/

答案 1 :(得分: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";
      }
    }
  }
}