我正在尝试使用此功能获取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
答案 0 :(得分:2)
您的脚本只能查询
whois.internic.net
请记住,全球有多家域名/ IP提供商。
大多数Linux发行版中提供的完整工具都知道尝试几个不同的服务器,然后检查所有服务器中的数据,以确定哪个服务器是权威服务器。
从记忆中我相信全世界有5个权威区域,你已经拥有的内部区域加上:
whois.afrinic.net
whois.lacnic.net
whois.arin.net
whois.apnic.net
成熟(我们在欧洲使用的中央注册表)也有一个,但它并不像你期望的那样'whois.ripe.net'而且我现在没时间查阅它了。
现在,除了我上面所说的,你可能想要考虑以下几点。如果他们认为您在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输出中看到的相同,所以它很容易使用
通过下载和处理您自己的数据,您可以解决提供商施加的任何限制,结果是查询您自己的数据存储的速度最快,而不是将服务器的请求发送到查询每次有人输入IP地址时都会使用服务器。
有很多甚至更多的whois服务器,而不仅仅是我在这里列出的那些,而不是在这个页面上列出所有这些,这个链接:
https://jfreewhois.googlecode.com/git/JFreeWhois/src/uk/org/freedonia/jfreewhois/etc/serverlist.xml
会将您带到一个XML文件,该文件是Google代码项目的一部分,返回的XML文件将为您提供所有可用服务器的相当大的列表,以及每个服务器为您提供服务的TLD列表根据输入的地址调整脚本与正确的服务器通信。
答案 1 :(得分:0)
使用=
标记前缀您的查询,例如=example.com
,而不仅仅是域名,您将看不到额外的结果。
长期以来,默认情况下,whois服务器会执行前缀搜索,并返回存储在注册表中的每个对象,其名称以您在查询中提供的名称开头。并且,尽管鲜为人知,但是名称服务器是存储在注册表中的对象,很久以前,将无用的名称服务器注册到“恶作剧”中被认为是有趣的。无辜的观察者做查询和取回你的结果可能被一些不知道细节的人解释为&#34;我的上帝,XXXX被黑了,看到这个结果......&#34;,因为你基本上可以只要您使用.COM / .NET域名完成,就可以将任何单词添加为标签(两个点之间)。当然,这与攻击无关。
通过在前缀中使用相等的字符串,可以强制完全匹配而不是前缀匹配。 请注意,纯粹主义者可以添加,即使在这种情况下,您可能会看到两个记录,因为您可以注册一个名称服务器,其名称是域名的名称(这比使用更令人困惑,但它可能会发生)。 / p>
对于.COM域名的BTW,您应该使用相关的注册表whois服务器,即whois.verisign-grs.com
。同样适用于其他顶级域名。请注意,根据您搜索的内容,每个域可能需要2个whois查询,因为.COM / .NET(目前)仍然是一个瘦注册表。有关这一点的详细信息,请参阅https://unix.stackexchange.com/a/407030/211833的答案。