whois xyz

Linux 中的 whois 客户端把各个顶域的 whois 服务器写在了代码里,所以不包含一些新的顶域。在 Linux 里可以给这个 whois 客户端添加配置/etc/whois.conf,指定顶域的 whois 服务器。

如果没有进行配置,查询一些新顶域的域名 whois 信息时就查不到了,比如大家喜闻乐见的电影搜索网站 51bt.xyz 这个网站的域名,或者 Google 新买的 abc.xyz 这个域名,whois 查询时就得到了这样的信息。

whois server is known for this kind of object.

为了能查询这些域名的 whois 信息,就要把这些域名顶域的 whois 服务器写在配置文件里,格式是这样 \.ac$ whois.nic.ac 意思是以 .ac 结尾的域名,去 whois.nic.ac 查询 whois 信息。

但是首先,要找到这些顶域的 whois 服务器是什么。

查找 whois 服务器的方法

IANA

首选的方法向 IANA 查询,IANA 相当于 DNS 解析过程中的根。例如查询顶域 xyz 的 whois 服务器 whois -h whois.iana.org,会得到很多内容

% IANA WHOIS server
% for more information on IANA, visit http://www.iana.org
% This query returned 1 object

domain:       XYZ

organisation: XYZ.COM LLC
address:      2121 E Tropicana Ave
address:      Las Vegas
address:      NV 89119
address:      United States

contact:      administrative
name:         General Counsel
organisation: XYZ.COM LLC
address:      2121 E Tropicana Ave., STE2
address:      Las Vegas
address:      NV 89119
address:      United States
phone:        +1.7027632191
e-mail:       hello@xyz.com

contact:      technical
name:         CTO
organisation: CentralNic
address:      35-39 Moorgate
address:      London EC2R 6AR
address:      United Kingdom
phone:        +44.2033880600
fax-no:       +44.2033880601
e-mail:       tld.ops@centralnic.com

nserver:      GENERATIONXYZ.NIC.XYZ 212.18.249.42 2a04:2b00:13ff:0:0:0:0:42
nserver:      X.NIC.XYZ 194.169.218.42 2001:67c:13cc:0:0:0:1:42
nserver:      Y.NIC.XYZ 185.24.64.42 2a04:2b00:13cc:0:0:0:1:42
nserver:      Z.NIC.XYZ 212.18.248.42 2a04:2b00:13ee:0:0:0:0:42
ds-rdata:     3599 8 1 3FA3B264F45DB5F38BEDEAF1A88B76AA318C2C7F
ds-rdata:     3599 8 2 B9733869BC84C86BB59D102BA5DA6B27B2088552332A39DCD54BC4E8D66B0499

whois:        whois.nic.xyz

status:       ACTIVE
remarks:      Registration information: http://nic.xyz

created:      2014-02-06
changed:      2015-03-18
source:       IANA

其中包含了 whois 的那一行,其值 whois.nic.xyz 就是要找的 xyz 的 whois 服务器了。

whois-servers.net

有些时候上面的方法竟然查不到,比如 whois -h whois.iana.org ad 查询 ad 顶域的信息,返回的结果里没有 whois 这一项。

可以尝试使用 dig ad.whois-servers.net 的方法,也就是以要查的顶域作为 whois-servers.net 的子域名进行 DNS 请求。检查返回结果中的 CNAME,就是这个顶域的 whois 服务器。

例如 dig +noall buzz.whois-servers.net +answer 结果是

buzz.whois-servers.net.	 551	 IN    CNAME    	whois.nic.buzz.
whois.nic.buzz.		     552     IN	    A        	156.154.115.28
whois.nic.buzz.		     552     IN     A           156.154.117.28

得到 buzz 顶域的 whois 服务器就是 whois.nic.buzz.


一个尝试获取顶域 whois 服务器的丑陋脚本

#!/bin/bash

set -o errexit 

TLDS_FILE="./tlds-alpha-by-domain.txt"
WHOIS_SERVER_FILE="./whois_server.txt"
ERROR_FILE="${WHOIS_SERVER_FILE}.err"
DOMAIN_REGEX='^[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.([A-Za-z]{2,}|xn--[A-Za-z0-9]{2,}))\.?$'

if [[ ! -f $TLDS_FILE ]]
then
    # 下载顶域列表
    wget https://data.iana.org/TLD/tlds-alpha-by-domain.txt -O $TLDS_FILE
fi

cat /dev/null > $WHOIS_SERVER_FILE
cat /dev/null > $ERROR_FILE

while read tld
do
    # 过滤可能出现的空行和注释的内容
    if [[ -z $tld ]]; then continue; fi
    if [[ ${tld:0:1} = '#' ]]; then continue; fi
    ## 一律转换为小写字母
    tld=$(echo $tld | tr A-Z a-z)
    echo $tld

    # 首先通过 whois -h whois.iana.org xxx 的方式向 IANA 查询 tld 信息
    whois_server=$(whois -h whois.iana.org $tld | grep whois | head -1 | awk '{print $2}'|| echo "NOT FOUND")
    if [[ ! "x$whois_server" = "x" || "x$whois_server" = "xNOT FOUND" ]] &&  [[ $whois_server =~ $DOMAIN_REGEX ]]
    then
        echo "\\.$tld\$ $whois_server" >> $WHOIS_SERVER_FILE
    else
        # 如果上面的方法没查到,尝试使用 dig xxx.whois-servers.net 的方法,不太可靠,放弃
        echo "dig $tld.whois-servers.net"
        whois_server=$(dig +noall $tld.whois-servers.net +answer | head -1 | awk '{print $5}' || echo "NOT FOUND")
        if [[ ! "x$whois_server" = "x" || "x$whois_server" = "xNOT FOUND" ]] && [[ $whois_server =~ $DOMAIN_REGEX ]]
        then
            # 有些顶域查到了 whois.ripe.net,并不能从这里查到这些顶域的域名信息
            if [[ "$whois_server" = "whois.ripe.net." ]]
            then
                echo "$tld got $whois_server" >> $ERROR_FILE
            else
                echo "\\.$tld\$ $whois_server" >> $WHOIS_SERVER_FILE
            fi
        else
            echo "didn't find $tld whois server"
            echo "$tld" >> $ERROR_FILE
        fi
    fi
done < $TLDS_FILE

参考内容
Where to find an up-to-date list of WHOIS Servers for various tlds?
How to whois new TLDs?

Subscribe to Atom

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe