1

我正在尝试使用此功能获取 whois 数据:

function getDomain()
$domain = 'stackoverflow.com';
$whois = '';
$connection = @fsockopen('whois.internic.net', 43);
if ($connection) {
    @fputs($connection, $domain ."\r\n");
    while (!feof($connection)) {
        $whois .= @fgets($connection, 128);
    }
}
fclose($connection);
return $whois;
}

它适用于某些域,但是当我尝试“apple.com”、“cnn.com”或“google.com”时,得到以下信息:

APPLE.COM.ZON.COM
APPLE.COM.WWW.ZON.COM
APPLE.COM.WWW.BEYONDWHOIS.COM
APPLE.COM.WAS.PWNED.BY.M1CROSOFT.COM
APPLE.COM.MORE.INFO.AT.WWW.BEYONDWHOIS.COM
APPLE.COM.IS.OWN3D.BY.NAKEDJER.COM
APPLE.COM.IS.0WN3D.BY.GULLI.COM
APPLE.COM.DENIS.DA.DOIDE.DA.PIEM.UNIX-BG.COM
APPLE.COM.BEYONDWHOIS.COM
APPLE.COM.AT.WWW.BEYONDWHOIS.COM
APPLE.COM
4

2 回答 2

2

您的脚本仅查询

whois.internic.net

请记住,全球有几个域/IP 提供商。

大多数 linux 发行版中提供的完整工具都知道尝试几个不同的服务器,然后检查所有服务器的数据以确定哪个服务器是权威服务器。

从记忆中,我相信有 5 个全球权威区域,您已经拥有的内部区域还有:

whois.afrinic.net
whois.lacnic.net
whois.arin.net
whois.apnic.net

Ripe(我们在欧洲使用的中央注册中心)也有一个,但它不是您所期望的“whois.ripe.net”,我现在没有时间查找它。

现在,除了我上面所说的之外,您可能还需要考虑以下内容。如果大多数 whois 权威机构认为您在 24 小时内发出过多请求,他们会限制(甚至阻止)您的流量,相反,您可能需要考虑登录上述任何提供商的 ftp 站点并下载各种位数据库,然后编写(或查找)您自己的脚本来处理它们。

我目前使用自己的一台服务器执行此操作,该服务器使用以下 shell 脚本连接(每 24 小时一次):

#!/bin/bash
rm -f delegated-afrinic-latest
rm -f delegated-lacnic-latest
rm -f delegated-arin-latest
rm -f delegated-apnic-latest
rm -f delegated-ripencc-latest
rm -f ripe.db.inetnum
rm -f apnic.db.inetnum
rm -f ripe.db.inetnum.gz
rm -f apnic.db.inetnum.gz
wget ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
wget ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest
wget ftp://ftp.arin.net/pub/stats/arin/delegated-arin-latest
wget ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest
wget ftp://ftp.ripe.net/ripe/stats/delegated-ripencc-latest
wget ftp://ftp.ripe.net/ripe/dbase/split/ripe.db.inetnum.gz
ftp -n -v ftp.apnic.net <<END
user anonymous anonymous@anonymous.org
binary
passive
get /apnic/whois-data/APNIC/split/apnic.db.inetnum.gz apnic.db.inetnum.gz
bye
END
gunzip ripe.db.inetnum
gunzip apnic.db.inetnum

然后,我有一个自定义编写的程序,它将文件解析为自定义数据库结构,然后我的服务器从中进行查询。

由于所有服务器都相互镜像数据,那么您应该能够从一台服务器获取完整的数据集,但如果不是,则不需要太多修改上述 shell 脚本以从其他服务器下载数据,所有他们也回应'ftp.????' 并具有相同的通用文件夹结构。

但是我无法帮助您使用解析器,因为它包含专有代码,但文件格式(尤其是如果您获得拆分文件)与您在典型的 whois 输出中看到的相同,因此非常容易使用。

通过像这样下载和处理您自己的数据,您可以绕过供应商施加的任何限制,结果是查询您自己的数据存储很可能比每次都从您的服务器向查询服务器发出请求要快得多有人输入 IP 地址。

更新

除了我在这里列出的那些之外,还有很多很多的 whois 服务器,但是,而不是在这个页面上将它们全部列出,这个链接:

https://jfreewhois.googlecode.com/git/JFreeWhois/src/uk/org/freedonia/jfreewhois/etc/serverlist.xml

将带您到一个 XML 文件,该文件是 google 代码项目的一部分,返回的 XML 文件将为您提供所有可用 whois 服务器的相当大的列表,以及它们每个服务的 TLD 列表,使您能够调整您的脚本根据输入的地址与正确的服务器通信。

于 2013-05-29T18:53:37.683 回答
0

=用一个符号为您的查询添加前缀,=example.com而不仅仅是域名,您将不会看到额外的结果。

很长的原因是,默认情况下,whois 服务器会进行前缀搜索,并将返回存储在注册表中的每个对象,其名称以您在查询中给出的名称开头。而且,尽管鲜为人知,名称服务器是存储在注册表中的对象,而且很久以前,注册无用的名称服务器只是为了“恶作剧”进行查询并获得与您一样的结果的无辜查看者被认为很有趣,这可能会被某些人解释不知道细节为“哦,我的上帝,XXXX 已被黑客入侵,看看这个结果......”,因为你基本上可以添加任何单词作为标签(在两个点之间),只要你完成一个 .COM/.NET您持有的域名。当然,这与攻击无关。

通过使用相等的字符串作为前缀,您可以强制完全匹配而不是前缀匹配。请注意,纯粹主义者可能会补充说,即使在这种情况下,您也可能会看到两条记录,因为您可以注册一个名称为域名名称的名称服务器(这比有用更令人困惑,但它是可能的并且发生了)。

顺便说一句,对于 .COM 域名,您应该使用相关的注册表 whois 服务器,即whois.verisign-grs.com. 其他顶级域名也是如此。请注意,根据您搜索的内容,每个域可能需要 2 个 whois 查询,因为 .COM/.NET (目前)仍然是一个瘦注册表。有关这一点的更多详细信息,请参阅我在https://unix.stackexchange.com/a/407030/211833上的回答。

于 2018-01-03T21:48:06.580 回答