如何在我的程序中获取域名的whois信息?

时间:2008-09-10 08:27:46

标签: c# java whois domain-name

我想从我的c#/ java程序中获取域名的whois信息。有一个简单的方法吗?

6 个答案:

答案 0 :(得分:6)

我在dotnet-snippets.com上找到了一个完美的C#示例(不再存在)。

将11行代码直接复制并粘贴到您自己的应用程序中。

/// <summary>
/// Gets the whois information.
/// </summary>
/// <param name="whoisServer">The whois server.</param>
/// <param name="url">The URL.</param>
/// <returns></returns>
private string GetWhoisInformation(string whoisServer, string url)
{
    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();
}

答案 1 :(得分:4)

我认为,最简单的方法是在端口43上连接到whois服务器的套接字。发送域名后跟换行符并阅读响应。

答案 2 :(得分:2)

托马斯的回答只有在你知道连接哪个“whois”服务器时才有效。

有许多不同的方法可以找到它,但没有(AFAIK)可以统一地为每个域注册表工作。

某些域名支持DNS中SRV服务的_nicname._tcp记录,但是存在一些问题,因为目前还没有关于如何防止子域服务的公认标准{{1覆盖官方注册表的记录(参见http://tools.ietf.org/html/draft-sanz-whois-srv-00)。

对于许多TLD,您可以将查询发送至SRV。这实际上运作得很好,但要注意它在官方授权的二级域名的所有情况下都不起作用。

例如在<tld>.whois-servers.net中有几个官方子域名,但其中只有一些由.uk注册管理机构运行,其他人有自己的WHOIS服务,而这些服务不在.uk {1}}数据库。

令人困惑的是,还有一些“非官方”注册管理机构,例如whois-servers.net .uk.com数据库中。

P.S。与大多数IETF协议一样,WHOIS中的官方End-of-Line分隔符为whois-servers.net,而不仅仅是CRLF

答案 3 :(得分:2)

我找到了一些提供此信息的网络服务。这个是免费的,对我很有用。 http://www.webservicex.net/whois.asmx?op=GetWhoIS

答案 4 :(得分:2)

我在这里找到了一个完美的C#示例。这11行代码可以直接复制并粘贴到您自己的应用程序中。但首先你应该添加一些using语句,以确保正确调用dispose方法以防止内存泄漏:

StringBuilder stringBuilderResult = new StringBuilder();
using(TcpClient tcpClinetWhois = new TcpClient(whoIsServer, 43))
{
   using(NetworkStream networkStreamWhois = tcpClinetWhois.GetStream())
   {
      using(BufferedStream bufferedStreamWhois = new BufferedStream(networkStreamWhois))
      {
         using(StreamWriter streamWriter = new StreamWriter(bufferedStreamWhois))
         {
            streamWriter.WriteLine(url);
            streamWriter.Flush();
            using (StreamReader streamReaderReceive = new StreamReader(bufferedStreamWhois))
            {
               while (!streamReaderReceive.EndOfStream) stringBuilderResult.AppendLine(streamReaderReceive.ReadLine());
            }
         }
      }
   }
}

答案 5 :(得分:-4)

这是Java解决方案,它只打开一个shell并运行whois

import java.io.*;
import java.util.*;

public class ExecTest2 {
    public static void main(String[] args) throws IOException {
        Process result = Runtime.getRuntime().exec("whois stackoverflow.com");

        BufferedReader output = new BufferedReader(new InputStreamReader(result.getInputStream()));
        StringBuffer outputSB = new StringBuffer(40000);
        String s = null;

        while ((s = output.readLine()) != null) {
            outputSB.append(s + "\n");
            System.out.println(s);
        }

        String whoisStr = output.toString();
    }
}