不使用第三方接口实现域名whois信息查询API接口

2022-04-19 18:48 栏目:技术开发 查看(8593)

最近想给微构网络网站巡查系统增加一个小功能,就是域名状态提醒,主要需要实时获取指定域名的状态和到期时间,本质上就是域名的whois信息。域名的whois的信息随便在网上一查就能查到,尤其是那些域名注册商其实都提供了这么一个功能。

然而很少平台提供查询接口,因为需要实时查询,因此在第三方网页上的查询结果不可以直接用于我们需要的数据,当然也可以通过爬取抓取的方式,但这种方式严格来讲是不合规的。首先想到的是在各大API平台搜索,结果主流API开放平台几乎都提供域名whois查询接口。但是,但是收费貌似不便宜,每次查询要小几分钱,别小看这个几分钱,因为我们需要获取的是实时的数据,因此查询量是非常大的,这么相比起来其实还是需要一点成本的。比如下图就是阿里云云市场某服务商的whois查询接口:

QQ截图20220419183848

作为开发者,虽然很多时候不想重复造轮子,然而我们还是决定自己造一个这样的轮子。理由很简单,我们的经验告诉我们,实现这个需求工作量应该不是很大,而且自己弄的东西就是感觉香。其实获取域名的whois信息,流程是非常简单的。直接贴出核心代码:

$socket = @fsockopen($whois_server, 43);
fputs($socket, "{$domain}\r\n");
$response = '';
while (!feof($socket)) {
    $response .= fgets($socket, 128);
}
fclose($socket);

没错,就是上面这么一点代码就可以实现域名的whois查询,上面的$whois_server就是各种域名注册局whois查询服务器的主机名(也就是地址),$domain就是我们需要查询的域名,如csweigou.com。

某些拿来主义者可能看到这里,就会觉得:“卧槽,原来这么简单”。实际上并没有,要应用到自己的项目,光上面的核心代码是远远不够的。据我们从头完全实践发现至少需要解决如下几个问题。

1、域名注册局的whois查询服务器怎么获取的问题

全球目前域名后缀大概有1000多个,比如我们国内的.cn、.net.cn、.gov.cn、org.cn、hn.cn等等在全球访问内其实多算.cn这一种类型,虽然我们注册域名的时候有.org.cn这种所谓的顶级域名,实际上你注册的严格意义上讲算是域名域名。域名在全球范围类是有专门的机构维护的,最知名的莫过于icann了;我们国内相应的就是中国互联网络信息中心(CNNIC)。所有的查询服务器我们都可以在这个页面查到详细数据:

https://www.iana.org/domains/root/db

这个数据列表除了这些数据,还包括各种后缀域名的注册局信息。如下图所示:

QQ截图20220419183651

2、查询响应速度和频次的问题

通过实践发现,注册局查询服务器在境外的查询速度会很慢,比如最常见的com域名查询就经常需要超过1秒的时间,实践证明通过境外服务器进行查询会快很多,因此怎么做就不用细说了。此外,不同查询服务器对查询的频次是有限制的,单位时间查询次数过多会被限制查询。至于如何突破这种限制,相信你能有耐心看到这里来说明自己肯定是开发者,因此也不是啥难事了。

3、查询得到的whois的信息需要进行数据清洗的问题

不同的查询服务器得到的数据字段是不一样的,所以需要有点耐心去做查询得到的数据清理,清理成为我们对于多种不同域名查询得到的统一字段。比如我们最需要的域名创建时间、更新时间、过期时间、域名状态等。如何进行数据清理,在我看来应该是作为开发者的基本功。这里插一句,一开始笔者是直接找github上人家写的清理逻辑,搜索了一些库浏览后发现,这些库要么太臃肿,要么太简单不能实现完整功能;因此最终还是自己动手写了一遍。

最后分享一张以我们微构网络网站域名csweigou.com为例通过该成果接口查询的结果吧:

QQ截图20220419184704

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:不使用第三方接口实现域名whois信息查询API接口 - 微构网络
分享: