我正在寻找一个可靠且最新的 WHOIS 服务器列表,用于 whois 脚本。
由于列表经常更改,如果有资源可供我参考,而不必频繁更新脚本,那就太好了。
答案1
有几种众所周知的方法可以定位 TLD 的 whois 服务器,IANA 数据库可能是最接近问题所要求的,但在实践中还有其他来源可能更有用。
来自 IANA(通过 whois 和 http 访问)
浏览http://www.iana.org/domains/root/db或搜索 whois 数据库以whois.iana.org
查找 TLD。每个条目都有一个字段指定谁是服务器。
例子:
$ whois -h whois.iana.org com
[Querying whois.iana.org]
[whois.iana.org]
% IANA WHOIS server
% for more information on IANA, visit http://www.iana.org
% This query returned 1 object
domain: COM
organisation: VeriSign Global Registry Services
address: 12061 Bluemont Way
address: Reston Virginia 20190
address: United States
contact: administrative
name: Registry Customer Service
organisation: VeriSign Global Registry Services
address: 12061 Bluemont Way
address: Reston Virginia 20190
address: United States
phone: +1 703 925-6999
fax-no: +1 703 948 3978
e-mail: [email protected]
contact: technical
name: Registry Customer Service
organisation: VeriSign Global Registry Services
address: 12061 Bluemont Way
address: Reston Virginia 20190
address: United States
phone: +1 703 925-6999
fax-no: +1 703 948 3978
e-mail: [email protected]
nserver: A.GTLD-SERVERS.NET 192.5.6.30 2001:503:a83e:0:0:0:2:30
nserver: B.GTLD-SERVERS.NET 192.33.14.30 2001:503:231d:0:0:0:2:30
nserver: C.GTLD-SERVERS.NET 192.26.92.30
nserver: D.GTLD-SERVERS.NET 192.31.80.30
nserver: E.GTLD-SERVERS.NET 192.12.94.30
nserver: F.GTLD-SERVERS.NET 192.35.51.30
nserver: G.GTLD-SERVERS.NET 192.42.93.30
nserver: H.GTLD-SERVERS.NET 192.54.112.30
nserver: I.GTLD-SERVERS.NET 192.43.172.30
nserver: J.GTLD-SERVERS.NET 192.48.79.30
nserver: K.GTLD-SERVERS.NET 192.52.178.30
nserver: L.GTLD-SERVERS.NET 192.41.162.30
nserver: M.GTLD-SERVERS.NET 192.55.83.30
ds-rdata: 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CFC41A5766
whois: whois.verisign-grs.com
status: ACTIVE
remarks: Registration information: http://www.verisign-grs.com
created: 1985-01-01
changed: 2012-02-15
source: IANA
$
来自 whois-servers.net(通过 DNS 访问)
该名称tld.whois-servers.net
是CNAME
相应 whois 服务器的名称。目前尚不清楚谁真正维护了该服务器,但它似乎非常受欢迎,因为几乎任何 whois 客户端都可以很容易地使用它(有些客户端默认使用此服务)。
例子:
$ dig com.whois-servers.net +noall +answer
; <<>> DiG 9.9.4-P2-RedHat-9.9.4-15.P2.fc20 <<>> com.whois-servers.net +noall +answer
;; global options: +cmd
com.whois-servers.net. 600 IN CNAME whois.verisign-grs.com.
whois.verisign-grs.com. 5 IN A 199.7.55.74
$
从注册中心本身(通过 DNS 访问)
许多注册机构将其 whois 服务器的地址直接发布在 DNS 的相关区域中,作为_nicname._tcp
SRV
记录。
例子:
$ dig _nicname._tcp.us SRV +noall +answer
; <<>> DiG 9.9.4-P2-RedHat-9.9.4-15.P2.fc20 <<>> _nicname._tcp.us SRV +noall +answer
;; global options: +cmd
_nicname._tcp.us. 518344 IN SRV 0 0 43 whois.nic.us.
$
答案2
我定期整理一份清单互联网号码分配机构和平价放入一个 XML 文件中,包括 whois 服务器、注册商、二级域名,如果可能的话,还包括可用性的正则表达式: https://github.com/whois-server-list/whois-server-list
答案3
我最近一直在研究 WHOIS,我发现一些公开的 whois 软件包(即 CentOS 的 jwhois)似乎依赖于预先打包的 TLD WHOIS 服务器列表。虽然这对于大多数 TLD 来说没有问题,但对于像 这样的深奥 gTLD 的激增来说,这是一个问题.horse
。
100% 可靠的方法是在 IANA 的 WHOIS 服务器上查找 TLD,whois.iana.org
解析出whois:
条目,然后查询那服务器以获取域的信息。例如:
foo@bar:~ $ echo -e "horse\r\n" | nc -i 1 whois.iana.org 43
% IANA WHOIS server
% for more information on IANA, visit http://www.iana.org
% This query returned 1 object
domain: HORSE
[snip]
whois: whois-dub.mm-registry.com
[snip]
Connection closed by foreign host.
进而:
foo@bar:~ $ echo -e "dord.horse\r\n" | nc -i 1 whois-dub.mm-registry.com 43
Domain Name: dord.horse
Domain ID: 1742946-MMd1
WHOIS Server: whois-dub.mm-registry.com
[snip]
如果您使用此方法,您应该礼貌地缓存来自 IANA 服务器的响应至少 48 小时,甚至更长时间,因为它们很少会改变,并且 IANA 的服务器往往承受着巨大的负载。
答案4
您可以使用此脚本从 IANA 获取 whois 服务器。由 noys 创建。以 JSON 格式输出区域和 whois 服务器列表。
<style>
body {
font: normal 10px verdana, sans-serif;
color: #333;
}
</style>
<?
$zones = array('ac','am','asia','at','be','biz','biz.ua','biz.ua','br.com','bz','cc','ch','co','co.am','co.in','co.ua','co.ua','om','com.am','com.kz','com.ua','cx','cz','de.com','eu','eu.com','firm.in','fm','gen.in','im','in','ind.in','info','io','kiev.ua','kz','la','lc','li','lt','lu','md','me','mn','mobi','ms','mx','name','net','net.am','net.in','org','org.am','org.in','org.kz','ph','pl','pp.ua','pro','pw','pw','ru','ru.com','so','su','su','su','tel','tv','tw','us','uy.com','vc','ws','xxx','za.cm','xn--p1ai');
$count = count($zones);
echo '<h1>Whois tool</h1>';
echo '<pre>
{
';
for($i=0;$i<$count;$i++) {
$root_server = 'whois.iana.org';
$zone = $zones[$i];
$domain = 'nuceti75.'.$zones[$i];
//echo "<h2>$domain - $current_domain</h2>";
$fp = fsockopen($root_server, 43);
if (!$fp) echo "Connection error: $root_server \r\n";
else {
fputs($fp, $zone."\r\n");
while (!feof($fp)) {
$root_answer .= fgets($fp, 128);
}
preg_match("~whois:\s(.+)~i", $root_answer, $result);
$current_server = trim($result[1]);
fclose($fp);
}
//echo "<pre>$root_answer</pre>";
//echo "<b>Whois server for this TLD:</b> $current_server";
$fh = fsockopen($current_server, 43);
if (!$fh) echo "Connection error: $current_server ($zone) \r\n";
else {
fputs($fh, $domain."\r\n");
while (!feof($fh)) {
$current_answer .= fgets($fh, 128);
}
fclose($fh);
}
//echo "<pre>$current_answer</pre>";
echo "\"$zone\": \"$current_server\",\r\n";
unset($root_answer);
unset($current_answer);
unset($result);
}
echo '
}
</pre>';
?>