var stringBuilderResult = new StringBuilder();
using (var tcpClinetWhois = new TcpClient(whoIsServer, 43))
using (var networkStreamWhois = tcpClinetWhois.GetStream())
using (var bufferedStreamWhois = new BufferedStream(networkStreamWhois))
using (var streamWriter = new StreamWriter(networkStreamWhois, leaveOpen: true))
{
streamWriter.WriteLine(url);
streamWriter.Flush();
using (var streamReaderReceive = new StreamReader(networkStreamWhois, leaveOpen: true))
{
while (!streamReaderReceive.EndOfStream)
{
stringBuilderResult.AppendLine(streamReaderReceive.ReadLine());
}
}
}
7条答案
按热度按时间t98cgbkg1#
我在www.example.com上找到了一个完美的C#示例dotnet-snippets.com(* 它已经不存在了 *)。
这是11行代码,可以直接复制和粘贴到您自己的应用程序中。
zpf6vheq2#
我认为,最简单的方法是在端口43上连接到whois服务器的套接字。发送域名,后跟一个换行符,并读取响应。
8iwquhpp3#
托马斯的答案只有在你知道要连接到哪个“whois”服务器的情况下才有效。
有许多不同的方法可以找到它,但没有一种(AFAIK)可以统一适用于每个域注册表。
一些域名在DNS中支持
_nicname._tcp
服务的SRV
记录,但存在问题,因为目前还没有公认的标准来防止子域提供覆盖官方注册表的SRV
记录(参见https://datatracker.ietf.org/doc/html/draft-sanz-whois-srv-00)。对于许多顶级域名来说,可以将您的查询发送到
<tld>.whois-servers.net
。这实际上工作得很好,但要注意,它并不适用于所有官方授权的二级域名。例如,在
.uk
中有几个官方子域,但只有其中一些由.uk
注册中心运行,其他的有自己的WHOIS服务,而这些服务不在whois-servers.net
数据库中。令人困惑的是,还有一些“非官方”的注册表,比如
.uk.com
,它们在whois-servers.net
数据库中。p.s. WHOIS中的官方行尾定界符,与大多数IETF协议一样,是
CRLF
,而不仅仅是LF
。j9per5c44#
我找到了一些提供这些信息的网络服务。这个是免费的,对我来说效果很好。http://www.webservicex.net/whois.asmx?op=GetWhoIS
ippsafx75#
我在这里找到了一个完美的C#示例。它有11行代码,可以直接复制和粘贴到你自己的应用程序中。但首先你应该添加一些using语句,以确保dispose方法被正确调用,以防止内存泄漏:
cs7cruho6#
如果您将
leaveOpen: true
添加到StreamWriter
和StreamReader
构造函数,则不会出现“无法访问已关闭的流”异常kx5bkwkv7#
下面是Java解决方案,它只是打开一个shell并运行
whois
: