乐者为王

Do one thing, and do it well.

利用WHOIS协议查询域名信息

域名信息的查询原理非常简单,主要是基于RFC 954(RFC 812已被废弃)提供的WHOIS协议。WHOIS服务器是一个基于“查询/响应”的TCP事务服务器,用户程序通过访问WHOIS服务器,从WHOIS数据库中查询得到我们所需要的内容。其主要过程有以下三步:

  1. 在TCP服务端口43连接WHOIS服务主机;
  2. 发送一个命令,以回车换行符结尾;
  3. 接受相应命令的返回信息,一旦输出结束,服务器将关闭连接。

命令的格式非常简单。可以直接输入域名(例如example.com)查询相关域名信息;也可以使用help得到详细的帮助信息。以下是查询的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
wxString Whois::Lookup(wxString& host, wxString& szAddress)
{
    char szQuery[512];
    char szBuffer[512];
    wxString szResult;

    strcpy(szQuery, szAddress);
    strcat(szQuery, "\r\n");

    wxIPV4address addr;
    addr.Hostname(host);
    addr.Service(43);

    wxSocketClient socket;
    socket.Connect(addr, false);
    socket.WaitOnConnect(30);

    if (socket.IsConnected())
    {
        socket.Write(szQuery, strlen(szQuery));
        szResult = "";
        while (true)
        {
            // Clear buffer before each iteration
            memset(szBuffer, 0, 512);

            // Try to receive some data
            socket.Read(szBuffer, 500);
            if (socket.LastCount() <= 0)
            {
                break;
            }
            szResult += szBuffer;
        }
    }
    else
    {
        szResult = wxT("Failed! Unable to connect\n");
    }
    socket.Close();

    return wxString::FromUTF8(szResult);
}

常用的WHOIS服务器:

1
2
3
4
5
.cn=whois.cnnic.net.cn
.com=whois.internic.com
.net=whois.internic.com
.name=www.whois.name
.cc=whois.nic.cc

Comments