我能找到的唯一线索是这个链接:
http://ephp.info/scripts/find-domain-registrar-script
我看不到下载实际脚本的方法。
有谁知道类似的事情?
一个非常简单的 WHOIS 客户端,我只是根据这个规范和这个服务器列表拼凑起来的。
它似乎工作得相当好,但这里要注意的重要一点是,WHOIS 协议,如它所定义的(这是我见过的最糟糕的协议定义)显然旨在返回人类可读的文档, 并且没有努力使其计算机可读。这是一种令人遗憾的事态,过去曾让我非常恼火。
因此,下面的非常简单的代码已经包含 .com 域的边缘情况解决方法,并使用了一个非常通用的正则表达式,可能会产生误报和漏报。
class WHOISClient
{
private $servers = array(
'ac' => 'whois.nic.ac',
'ae' => 'whois.aeda.net.ae',
'aero' => 'whois.aero',
'af' => 'whois.nic.af',
'ag' => 'whois.nic.ag',
'al' => 'whois.ripe.net',
'am' => 'whois.amnic.net',
'as' => 'whois.nic.as',
'asia' => 'whois.nic.asia',
'at' => 'whois.nic.at',
'au' => 'whois.aunic.net',
'ax' => 'whois.ax',
'az' => 'whois.ripe.net',
'ba' => 'whois.ripe.net',
'be' => 'whois.dns.be',
'bg' => 'whois.register.bg',
'bi' => 'whois.nic.bi',
'biz' => 'whois.neulevel.biz',
'bj' => 'www.nic.bj',
'br' => 'whois.nic.br',
'br.com' => 'whois.centralnic.com',
'bt' => 'whois.netnames.net',
'by' => 'whois.ripe.net',
'bz' => 'whois.belizenic.bz',
'ca' => 'whois.cira.ca',
'cat' => 'whois.cat',
'cc' => 'whois.nic.cc',
'cd' => 'whois.nic.cd',
'ch' => 'whois.nic.ch',
'ck' => 'whois.nic.ck',
'cl' => 'nic.cl',
'cn' => 'whois.cnnic.net.cn',
'cn.com' => 'whois.centralnic.com',
'co' => 'whois.nic.co',
'co.nl' => 'whois.co.nl',
'com' => 'whois.verisign-grs.com',
'coop' => 'whois.nic.coop',
'cx' => 'whois.nic.cx',
'cy' => 'whois.ripe.net',
'cz' => 'whois.nic.cz',
'de' => 'whois.denic.de',
'dk' => 'whois.dk-hostmaster.dk',
'dm' => 'whois.nic.cx',
'dz' => 'whois.nic.dz',
'edu' => 'whois.educause.net',
'ee' => 'whois.tld.ee',
'eg' => 'whois.ripe.net',
'es' => 'whois.ripe.net',
'eu' => 'whois.eu',
'eu.com' => 'whois.centralnic.com',
'fi' => 'whois.ficora.fi',
'fo' => 'whois.nic.fo',
'fr' => 'whois.nic.fr',
'gb' => 'whois.ripe.net',
'gb.com' => 'whois.centralnic.com',
'gb.net' => 'whois.centralnic.com',
'qc.com' => 'whois.centralnic.com',
'ge' => 'whois.ripe.net',
'gl' => 'whois.nic.gl',
'gm' => 'whois.ripe.net',
'gov' => 'whois.nic.gov',
'gr' => 'whois.ripe.net',
'gs' => 'whois.nic.gs',
'hk' => 'whois.hknic.net.hk',
'hm' => 'whois.registry.hm',
'hn' => 'whois2.afilias-grs.net',
'hr' => 'whois.ripe.net',
'hu' => 'whois.nic.hu',
'hu.com' => 'whois.centralnic.com',
'ie' => 'whois.domainregistry.ie',
'il' => 'whois.isoc.org.il',
'in' => 'whois.inregistry.net',
'info' => 'whois.afilias.info',
'int' => 'whois.isi.edu',
'io' => 'whois.nic.io',
'iq' => 'vrx.net',
'ir' => 'whois.nic.ir',
'is' => 'whois.isnic.is',
'it' => 'whois.nic.it',
'je' => 'whois.je',
'jobs' => 'jobswhois.verisign-grs.com',
'jp' => 'whois.jprs.jp',
'ke' => 'whois.kenic.or.ke',
'kg' => 'whois.domain.kg',
'kr' => 'whois.nic.or.kr',
'la' => 'whois2.afilias-grs.net',
'li' => 'whois.nic.li',
'lt' => 'whois.domreg.lt',
'lu' => 'whois.restena.lu',
'lv' => 'whois.nic.lv',
'ly' => 'whois.lydomains.com',
'ma' => 'whois.iam.net.ma',
'mc' => 'whois.ripe.net',
'md' => 'whois.nic.md',
'me' => 'whois.nic.me',
'mil' => 'whois.nic.mil',
'mk' => 'whois.ripe.net',
'mobi' => 'whois.dotmobiregistry.net',
'ms' => 'whois.nic.ms',
'mt' => 'whois.ripe.net',
'mu' => 'whois.nic.mu',
'mx' => 'whois.nic.mx',
'my' => 'whois.mynic.net.my',
'name' => 'whois.nic.name',
'net' => 'whois.verisign-grs.com',
'nf' => 'whois.nic.cx',
'ng' => 'whois.nic.net.ng',
'nl' => 'whois.domain-registry.nl',
'no' => 'whois.norid.no',
'no.com' => 'whois.centralnic.com',
'nu' => 'whois.nic.nu',
'nz' => 'whois.srs.net.nz',
'org' => 'whois.pir.org',
'pl' => 'whois.dns.pl',
'pr' => 'whois.nic.pr',
'pro' => 'whois.registrypro.pro',
'pt' => 'whois.dns.pt',
'pw' => 'whois.nic.pw',
'ro' => 'whois.rotld.ro',
'ru' => 'whois.tcinet.ru',
'sa' => 'saudinic.net.sa',
'sa.com' => 'whois.centralnic.com',
'sb' => 'whois.nic.net.sb',
'sc' => 'whois2.afilias-grs.net',
'se' => 'whois.nic-se.se',
'se.com' => 'whois.centralnic.com',
'se.net' => 'whois.centralnic.com',
'sg' => 'whois.nic.net.sg',
'sh' => 'whois.nic.sh',
'si' => 'whois.arnes.si',
'sk' => 'whois.sk-nic.sk',
'sm' => 'whois.nic.sm',
'st' => 'whois.nic.st',
'so' => 'whois.nic.so',
'su' => 'whois.tcinet.ru',
'tc' => 'whois.adamsnames.tc',
'tel' => 'whois.nic.tel',
'tf' => 'whois.nic.tf',
'th' => 'whois.thnic.net',
'tj' => 'whois.nic.tj',
'tk' => 'whois.nic.tk',
'tl' => 'whois.domains.tl',
'tm' => 'whois.nic.tm',
'tn' => 'whois.ripe.net',
'to' => 'whois.tonic.to',
'tp' => 'whois.domains.tl',
'tr' => 'whois.nic.tr',
'travel' => 'whois.nic.travel',
'tw' => 'whois.twnic.net.tw',
'tv' => 'whois.nic.tv',
'tz' => 'whois.tznic.or.tz',
'ua' => 'whois.ua',
'uk' => 'whois.nic.uk',
'uk.com' => 'whois.centralnic.com',
'uk.net' => 'whois.centralnic.com',
'gov.uk' => 'whois.ja.net',
'us' => 'whois.nic.us',
'us.com' => 'whois.centralnic.com',
'uy' => 'nic.uy',
'uy.com' => 'whois.centralnic.com',
'uz' => 'whois.cctld.uz',
'va' => 'whois.ripe.net',
'vc' => 'whois2.afilias-grs.net',
've' => 'whois.nic.ve',
'vg' => 'whois.adamsnames.tc',
'ws' => 'whois.website.ws',
'xxx' => 'whois.nic.xxx',
'yu' => 'whois.ripe.net',
'za.com' => 'whois.centralnic.com'
);
private function locateServer($domain)
{
$parts = explode('.', $domain);
for ($i = 0, $l = count($parts); $i < $l; $i++) {
$root = implode('.', $parts);
if (isset($this->servers[$root])) {
return $this->servers[$root];
}
array_shift($parts);
}
throw new \UnexpectedValueException('Unknown TLD in domain ' . $domain);
}
private function makeRequest($server, $domain)
{
$sock = stream_socket_client("tcp://$server:43", $errNo, $errStr, 3);
if (!$sock) {
throw new \RuntimeException('Unable to connect to WHOIS server at ' . $server . ':43');
}
if ($server == $this->servers['com']) {
// .com domains are a special case, there may be others as well
$domain = "=$domain";
}
if (!fwrite($sock, "$domain\r\n")) {
throw new \RuntimeException('Error sending request to server at ' . $server . ':43');
}
return stream_get_contents($sock);
}
private function findRegistrar($raw)
{
if (preg_match('/registrar\s*[:\-=][^a-z0-9]*([^\r\n]+)/i', $raw, $matches)) {
return trim($matches[1]);
}
return false;
}
public function queryRegistrar($domain)
{
$server = $this->locateServer($domain);
$raw = $this->makeRequest($server, $domain);
return $this->findRegistrar($raw);
}
}
像这样使用它:
$client = new WHOISClient;
var_dump($client->queryRegistrar('google.com'));