减少whois查询负担的策略

时间:2012-10-09 00:34:55

标签: php javascript whois

我在最近的100级CompSci课程中一直致力于字符串操作。 我得到了一个非常“原始”的想法,我可能会写一个简单的域名生成器/检查器。

所以我做了一些功课,发现各种whois服务器可以理解地限制了允许的查询次数。

所以,我决定首先检查DNS布尔值。如果没有找到记录,那么我检查MySQL数据库以确保最近没有发送相同的查询。如果它没有我使用fsockopen用PHP启动whois查询。所以,我正准备完成我的小脚本并将其从我的开发服务器上传到我的生产服务器,我发现一些网站建议各种whois服务器将查询限制为只有1000个。

我的问题:

我接近这个吗? 简单的数学表明,只有10个用户每次检查10次搜索,每次搜索只提供10个结果(10 ** 3),可能会超出限制并暂时禁止。

是否有任何方法可以对whois服务器进行批量查询?

其他网站是否使用某种形式的客户端javascript查询或服务器端代理? 我在stackoverflow上发现了另一个类似的问题,表明* NIX系统可以访问没有限制的终端命令。我发现的其他问题涉及解析数据 - 这不是我的担忧。

我知道这是一个模糊的问题。我不想给whois服务器带来不适当的负担。我不希望也不想要现成的代码解决方案。关于这个问题的替代程序策略的基本讨论将使我成为一个非常满意的朋友:)任何人都有一两个关键字,我可以继续我的研究?

3 个答案:

答案 0 :(得分:4)

whois unix命令似乎 less 受限(https://superuser.com/questions/452751/what-are-the-limits-of-whois-command-on-unix)。最简单的做法是我假设whois正在做的事情,并在端口43上打开与whois.internic.net的tcp连接。

<?php

$fp = fsockopen("whois.internic.net", 43);
fwrite($fp, "hello.com\n");

$response = "";
while (!feof($fp)) {
    $response .= fread($fp, 8192);
}

fclose($fp);
echo $response;

?>

如果这就是你已经在做的事情,那么这可能是你最好的选择。我猜测1000个查询限制可能是指使用某人为您执行此操作的Web服务(例如whois.com)。如果你正在做我上面展示的内容,我认为你可以提出更多的疑问。

(我在这里做了很多猜测和假设。)

P.S。这里有很多好消息:http://semmyfun.blogspot.com/2010/08/how-does-whois-work-dirty-guide.html

答案 1 :(得分:2)

即使已经将其标记为已回答(我已经为另一篇帖子输入了这个内容,所以我也可以重复使用它): - )

如前所述,如果他们认为您在24小时内提出的请求太多,那么大多数人都会限制(甚至阻止)您的流量。

相反,您可能需要考虑登录到全球任何whois提供商的ftp站点并下载数据库的各个位,所有这些都使这些公共数据可用,并且它与maxmind公司使用的数据完全相同他们的IP到地理查找服务,并且所有这些'whois'命令背后的数据都是相同的,每个人都自动完成。

我目前使用我自己的一个服务器执行此操作,该服务器使用以下shell脚本连接(每24小时一次)警告 - 这将产生近4 GB的数据,因此请确保在磁盘上执行此操作空间...

#!/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地址时都会使用服务器。

答案 2 :(得分:1)

如果您只关注域已注册,而不是WHOIS详细信息,那么您可以更好地使用DNS服务器进行检查而不是WHOIS。