7

在最近的 100 级 CompSci 课程中,我一直在处理字符串操作。我有一个非常“原始”的想法,我可以编写一个简单的域名生成器/检查器。

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

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

我的问题:

我是否适当地接近这个?简单的数学表明,只有 10 个用户每个签出 10 个搜索,每个搜索仅提供 10 个结果 (10**3) 可能会导致超出限制和临时禁止。

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

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

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

4

3 回答 3

4

whois unix 命令的限制似乎较少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;

?>

如果这就是您已经在做的事情,那么这可能是您最好的选择。我猜 1,000 个查询限制可能是指使用某人的 Web 服务为您执行此操作(例如 whois.com)。我认为如果您按照我上面显示的方式进行操作,您可以进行更多查询。

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

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

于 2012-10-09T06:16:52.797 回答
4

即使这已经被标记为已回答(我已经为另一篇文章输入了这个,所以我不妨重用它):-)

如前所述,如果大多数 whois 权威机构认为您在 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 地址。

于 2013-05-29T19:37:30.593 回答
1

如果您只对域是否已注册感兴趣,而不是对 WHOIS 详细信息感兴趣,那么使用 DNS 服务器而不是 WHOIS 进行检查会更好。

于 2012-10-09T05:11:52.710 回答