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

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

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

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

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

///  /// Gets the whois information. ///  /// The whois server. /// The URL. ///  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(); } 

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

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

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

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

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

令人困惑的是,还有“非官方”注册表,例如.uk.com ,它们位于whois-servers.net数据库中。

ps WHOIS中的官方End-of-Line分隔符,与大多数IETF协议一样,是CRLF ,而不仅仅是LF

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

我在这里找到了一个完美的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()); } } } } } 

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