Question

I'm developing a simple app in c#, that can check if a domain name is available to puchase for a specific tld. The method: I downloaded a whois-server list, I send the domain name to its whois server with a TCP client on the protocol 43, and check the servers answer. The problem: more countries has the same whois server: "whois.ripe.net" . If I send the full domain name(with tld), the server's answer is always "No entries found in source RIPE.". If I send the domain name without tld, I dont get any tld specific data about the status of the domain name.

The method I use:

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";
        }
    }

Example: I do:

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

The server's answer:

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

for the next command:

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

the result contains several blocks like this:

% 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

There's no information about the domain name "pokerstars.hu". Of course, I get exactly the same answers if I want to check pokerstars.va. Pokerstars.hu is a registred domain, pokerstars.va is not.

How can I find the correct status of a domain name?

Was it helpful?

Solution

RIPE does not serve as a ccTLD whois server for any domains; like ARIN, it contains only netblock information. Each ccTLD has its own root whois server (or, that is, some of them don't have a proper whois service -- for example, the Spanish .es registry requires that you use a web client, with an obnoxious CAPTCHA you have to fill in every time).

See also http://www.ripe.net/data-tools/db although it is not very explicit about what the database does not contain.

You can get the address of the authoritative whois server by requesting the ccTLD's information from whois.iana.org.

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

See also http://www.iana.org/domains/root/db/

OTHER TIPS

I tried your code against whois.melbourneit.net and it found one of my domains no trouble. I was able to reproduce your problem running against RIPE and so I tried the same query interactively on their website - and had the same result. There's nothing wrong with your code.

tripleee is right about whois.nic.hu, I successfully used it to resolve pokerstars.hu - which leaves me wondering what the blazes is purpose of the RIPE whois server.

Thanks to triplee for showing us how to obtain the whois server friendly-name for a ccTLD.


You may find this useful:

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";
      }
    }
  }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top