如何抓取域名完整WHOIS信息

2021-03-07    分类: 网站建设

域名注册信息(whois),即域名所有人信息,登记着域名归属人信息。既然是信息,就有他的价值所在。域名注册信息对很有些人来说非常重要,比如玩域名的米农们,还有一些公司的销售们,他们通过获取域名的注册信息来联系到域名的所有人,可以和他们洽谈收购域名事宜?亦或者问问你注册了域名要不要找我们做个网站?哈~反正由于骚扰量太大,所以现在很多人注册域名都不留真实的联系方式了。因为域名注册信息这块,注册商是不做信息有效性审核的,随便你填,只要格式正确就可以了。

但我不关心他的信息真实性,既然有人要这信息,我们就要想办法爬啊!网上有很多查询whois信息的软件,但都不太适合我们的软件调用和数据分析。所以我们最好还是自己直接抓取比较方便。

首先我们要了解域名注册信息的存储方式,我个人的理解是,全求有各大域名whois根服务器(有点像DNS根服务器)例如com的whois根服务器就是:whois.verisign-grs.com 这个服务器上存储这域名的基本信息,包括创建时间,注册时间,到期时间等等,比如我们查询下今日头条的域名toutiao.com的域名信息,具体信息如下图

每个后缀的域名的根whois服务器是固定的,但这里的信息太少,不是我们想要的。那哪里才能查到我们想要的具体信息呢,上图中,大家注意到没,其中有条信息叫whois Server,指向了域名注册商的whois服务器:whois.ename.com(易名中国),这个服务器存储着域名更详细的信息,其中就包括了我们想要的域名注册人,联系方式,邮箱等数据。

到这里,我们的任务完成了一半了!知道了信息的获取途径,下面我们就用程序的方法去获取吧!

百度下whois协议,我们知道了whois协议通信是用的服务器43端口。这样我们利用C#(亦或其他程序)中的SOCKET类去和服务器进行通信,协议方式就是连上43端口后,发送域名的ASCII编码,以 (回车换行符)结束。成功的话服务器就会返回对应域名的信息,C#的通信代码如下:

///

/// 查询域名的 whois 信息

///

/// 要查询的域名

/// whois 服务器地址

/// whois 服务器端口

///

/// 执行成功: 返回详细的whois信息

/// 执行失败:返回相就的异常或是错误信息

///

public static string Tcpwhois(string domain, string server, int port)

{

//domain = FunctionServices.getDomain(domain);

// 连接域名 whois 查询服务器

TcpClient tcp = new TcpClient();

tcp.SendTimeout = 10;

//return string

string returnstr = "String Error";

try

{

tcp.Connect(server, port);

}

catch (SocketException)

{

returnstr = "查询错误:连接 whois 服务器[" + server + "]失败";

return returnstr;

}

// 向域名 whois 查询服务器发送查询的域名

try

{

//构造发送的字符串

domain += " ";

Byte[] DomainBytes = System.Text.Encoding.ASCII.GetBytes(domain.ToCharArray());

// 将域名发送到域名 whois 查询服务器

Stream whoisStream = tcp.GetStream();

whoisStream.Write(DomainBytes, 0, domain.Length);

//返回流

StreamReader whoisStreamReader = new StreamReader(whoisStream, System.Text.Encoding.UTF8);

StringBuilder whoisInfo = new StringBuilder();

string whoisLine = null;

while (null != (whoisLine = whoisStreamReader.ReadLine()))

{

whoisInfo.Append(whoisLine + " ");

}

returnstr = whoisInfo.ToString();

}

catch (Exception)

{

returnstr = "查询错误:网络无响应,或者是您的域名输入有误";

}

finally

{

tcp.Close();

}

return returnstr;

}

我们就用toutiao.com举例,通过这个代码,我们可以先连接到com域名的根whois服务器:whois.verisign-grs.com 来获取基本信息,然后对信息分析,提取想要的信息,如到期时间等。同时我们要提取关键的whois SERVER的信息,获取到结果:whois.ename.com,同样的方式,我们再连一次这个whois服务器,发送域名,得到域名具体的注册信息。至此,我们就获取到了一个完整的域名注册信息了。

获取域名注册信息需要注意的以下几点:

  1. 每个根服务器返回的信息格式有的时候并不一样,这个就要靠我们人工新分析了。但同个服务器返回的信息格式是一样的。所以针对不同的服务器返回,我们要区别对待。

  2. 域名未注册时,查询的信息返回是未找到,每个根服务器返回的也不一样。有的是“does not exist”,有的是“Not found”,也有的是“No match for”,这个也挺让人难受的。对于这样的问题,我们只有针对不同的服务器,去做不同的判断。主要做一些主流域名.com,.net,.cn的判断基本就差不多了。

  3. 大多数域名服务器的请求频率是有限制的。所以这里并不推荐多线程大批量获取域名信息,为了稳定,还是单线程设置个延时,慢慢的抓吧。

这里提供一下几个主流域名的whois根服务器供大家测试,测试方式是用Telnet 软件去连接whois服务器的43端口,连接上之后就可以输入域名,然后回车,就可以得到域名注册信息了。

域名后缀 whois服务器
.com whois.verisign-grs.net
.net whois.verisign-grs.net
.cn whois.cnnic.net.cn"
.org whois.pir.org
.top whois.nic.top
.cc whois.nic.cc
.gov whois.internic.net
也许大家会问我,为什么不去站长直接这类网站获取WOHIS信息呢?他们不是提供WEB查询接口查询么?要知道,起始他们也是最终到whois服务器去抓取的信息,他们只是缓存下来给大家查而已。我不想过于依赖别人,所以我们还是直接去whois服务器爬去实时的域名注册

信息吧。

当前文章:如何抓取域名完整WHOIS信息
转载注明:/news5/104705.html

成都网站建设公司_创新互联,为您提供响应式网站网站营销搜索引擎优化建站公司定制网站用户体验

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营