如何在我的程序中获取域名的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,可以将您的查询发送到
。 这实际上工作得很好,但要注意它在官方授权的二级域名的所有情况下都不起作用。
例如,在.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(); } }