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

时间:2020-03-05 18:50:35  来源:igfitidea点击:

我想从我的c#/ java程序中获取域名的whois信息。有没有简单的方法可以做到这一点?

解决方案

回答

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

回答

这是Java解决方案,它仅打开一个外壳并运行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();
    }
}

回答

仅当我们知道要连接到哪个" whois"服务器时,Thomas的答案才有效。

有很多不同的方法可以找到答案,但是没有一种方法(AFAIK)可以对每个域注册表统一使用。

某些域名在DNS中为_nicname._tcp服务支持SRV记录,但是存在一些问题,因为尚无关于如何防止子域提供覆盖它们的SRV记录的公认标准。官方注册表(请参阅http://tools.ietf.org/html/draft-sanz-whois-srv-00)。

对于许多TLD,可以将查询发送到<tld> .whois-servers.net。这实际上可以很好地工作,但是请注意,在有正式委派的二级域的情况下,它不能正常工作。

例如,在.uk中,有几个正式的子域,但是只有一部分是由.uk注册表运行的,而其他子域则拥有自己的WHOIS服务,而不在whois-servers.net中。 `数据库。

令人困惑的是,在" whois-servers.net"数据库中还存在"非官方"注册表,例如" .uk.com"。

p.s.与大多数IETF协议一样,WHOIS中的官方行尾定界符是CRLF,而不仅仅是LF。

回答

我发现了一些提供此信息的Web服务。这是免费的,对我来说很棒。 http://www.webservicex.net/whois.asmx?op=GetWhoIS

回答

我在dotnet-snippets.com(已经不存在)上找到了一个完美的Cexample。

这是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();
}