5

我正在为网站编写域检查器,但我遇到了有趣的问题。

一些 whois 服务器负责像 .WS (whois.worldsite.ws) 或 .CA (whois.cira.ca) 这样的域,每天 2 或 3 次查询后阻止 IP 地址!

对于每天可能有数百万个请求的托管网站来说,这看起来像是一场灾难。

我应该怎么做才能解决这个问题?

4

3 回答 3

13

相反,有一个非常简单的方法。

如前所述,如果大多数 WHOIS 权威机构认为您在 24 小时内发出过多请求,他们会限制(甚至阻止)您的流量,相反,您可能需要考虑登录全球任何 WHOIS 提供商的 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 输出中看到的相同,因此非常容易使用。

google-code 上有一个解析器(这是我下载脚本的地方),名为“ip-country”(我认为),它旨在让您构建自己的 whois 数据库,我构建的数据库稍微复杂一些,因为它也与其他数据结合(因此我的解析器是专有的)

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

于 2013-05-29T19:05:54.963 回答
1

没有简单的方法来解决这个问题。您发现的一些 whois 服务器会在几次查询后阻止您。您通常可以为一定数量的查询向他们支付费用。还有另一种可行的方法。由于阻塞是通过 IP 地址完成的,因此您可以编写一个 Java 小程序来运行查询。这样,限制将在用户身上,因此用户将被限制为每天 2-3 次查询,而不是网站。Java Applet 必须经过签名才能允许网络访问。我用 java 写了一个 whois 库,可能对JFreeWhois有帮助

于 2013-04-13T10:33:39.560 回答
0

您应该了解错误消息模式并尝试在睡眠一段时间后重复查询。如果它不起作用,则使用不同的 Whois 服务器。当您为网站编写应用程序时,应从客户端完成 Whois 查询。

于 2016-07-04T08:19:09.250 回答