Php 谁是脚本不';我得不到一些域名

Php 谁是脚本不';我得不到一些域名,php,whois,Php,Whois,我正在尝试使用此函数获取whois数据: function getDomain() $domain = 'stackoverflow.com'; $whois = ''; $connection = @fsockopen('whois.internic.net', 43); if ($connection) { @fputs($connection, $domain ."\r\n"); while (!feof($connection)) { $whois .=

我正在尝试使用此函数获取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

您的脚本仅用于查询

whois.internic.net
请记住,全球有多个域/IP提供商

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

根据记忆,我相信世界上有5个权威区域,其中一个是你已经拥有的国际区域,另一个是:

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

现在,除了我上面所说的,你可能想考虑下面的内容。如果你认为你在24小时内提出了太多的请求,那么权威机构会节制(甚至阻塞)你的流量,相反,你可能会考虑登录到上述任何提供者的FTP站点,下载数据库的各个位,然后编写(或查找)你自己的脚本来处理它们。 目前,我使用自己的一台服务器进行连接,该服务器使用以下shell脚本进行连接(每24小时一次):

#/bin/bash
rm-f授权afrinic最新版本
rm-f授权lacnic最新版本
rm-f授权arin最新版本
rm-f授权apnic最新版本
rm-f最新版本
rm-f.db.inetnum
rm-f apnic.db.inetnum
rm-f.db.inetnum.gz
rm-f apnic.db.inetnum.gz
wgetftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
wgetftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest
wgetftp://ftp.arin.net/pub/stats/arin/delegated-arin-latest
wgetftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest
wgetftp://ftp.ripe.net/ripe/stats/delegated-ripencc-latest
wgetftp://ftp.ripe.net/ripe/dbase/split/ripe.db.inetnum.gz

ftp-n-v ftp.apnic.net在您的查询前面加上
=
符号,比如
=example.com
,而不仅仅是域名,您将看不到额外的结果

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

通过使用相等字符串作为前缀,可以强制进行精确匹配,而不是前缀匹配。 请注意,纯粹主义者可以补充说,即使在这种情况下,您可能会看到两条记录,因为您可以注册一个名称为域名名称的名称服务器(这比有用的名称更容易混淆,但这是可能的,而且会发生)


顺便说一句,对于.COM域名,您应该使用相关的注册表whois服务器,即
whois.verisign grs.COM
。其他TLD也是如此。请注意,根据您搜索的内容,每个域可能需要2个whois查询,因为.COM/.NET(当前)仍然是精简注册表。有关这一点的更多详细信息,请参阅我的答案。

域太多还是不够?你的问题不清楚。我看不出他的问题有多不清楚,我理解他在问什么,因此我的答案如下。从问题的标题来看,我建议OP知道apple.com上启动的域名比查询返回的域名还要多。
#!/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