david-garcia / phpwhois
phpWhois - 用于查询whois服务和解析结果的库。基于phpwhois.org
Requires
- php: >=5.3.0
- mso/idna-convert: *
Requires (Dev)
- phpunit/phpunit: 4.4.1
Suggests
- lib-openssl: *
README
此软件包包含一个用于PHP的Whois (RFC954) 库。它允许PHP程序使用lookup
函数创建Whois对象,并获取whois查询的输出。
响应是一个数组,至少包含一个名为'rawdata'的元素,该元素包含whois请求的原始输出。
此外,如果域名属于存在特殊处理程序的注册商,则特殊处理程序将解析输出,并在响应中提供额外的元素。这些额外元素的键在HANDLERS.md文件中描述。
它完全支持按照RFC3490、RFC3491、RFC3492和RFC3454定义的IDNA(国际化)域名。
它还支持ip/AS whois查询,这对于追踪垃圾邮件非常有用。您只需传递点分十进制IP地址或AS(自治系统)处理程序,而不是域名。还提供了对Referral Whois(RFC 1714/2167)的有限、非递归支持。
要求
phpWhois需要PHP 5.3或更高版本,并支持OpenSSL才能正常工作。
如果没有SSL支持,您将无法查询没有whois服务器但基于https的whois的域名。
安装
通过composer
稳定版本
php composer.phar require david-garcia/phpwhois
最新开发版本
php composer.phar require "david-garcia/phpwhois":"dev-master"
示例用法
(见example.php
)
// Load composer framework if (file_exists(__DIR__ . '/vendor/autoload.php')) { require(__DIR__ . '/vendor/autoload.php'); } use phpWhois\Whois; $whois = new Whois(); $query = 'example.com'; $result = $whois->lookup($query,false); echo "<pre>"; print_r($result); echo "</pre>";
如果您以UTF8提供要查询的域名,则必须使用
$result = $whois->lookup($query);
如果查询字符串不是UTF8,则必须使用ISO-8859-1,否则IDNA支持将无法工作。
您可以查询的内容
您可以使用phpWhois查询域名、IP地址和其他信息,如AS,例如以下两个示例都有效
use phpWhois\Whois; $whois = new Whois(); $result = $whois->lookup('example.com'); $whois = new Whois(); $result = $whois->lookup('62.97.102.115'); $whois = new Whois(); $result = $whois->lookup('AS220');
使用特殊whois服务器
一些注册商可以提供特殊访问权限,以便对whois服务进行更精细的控制。目前已知提供特殊访问的whois服务包括
ripe
新的ripe whois服务器软件支持一些特殊参数,允许传递真实客户端IP地址。此功能仅适用于已注册网关。如果您已注册,可以以此方式查询ripe IP地址
use phpWhois\Whois; $whois = new Whois(); $whois->useServer('uk','whois.ripe.net?-V{version},{ip} {query}'); $result = $whois->lookup('62.97.102.115');
whois.isoc.org.il
此服务器也使用新的ripe whois服务器软件,因此以相同的方式工作。如果您已注册,可以以此方式查询.il
域名
use phpWhois\Whois; $whois = new Whois(); $whois->useServer('uk','whois.isoc.org.il?-V{version},{ip} {query}'); $result = $whois->lookup('example.co.uk');
whois.nic.uk
他们向已注册用户(通常是Nominet成员)提供所谓的WHOIS2(见http://www.nominet.org.uk/go/whois2),每小时允许进行更多查询。如果您已注册,可以以此方式查询.uk域名
use phpWhois\Whois; $whois = new Whois(); $whois->useServer('uk','whois.nic.uk:1043?{hname} {ip} {query}'); $result = $whois->lookup('example.co.uk');
此新功能还允许您通过调用whois->useServer并传递用于命名tld的tld和服务器以及参数来使用不同的whois服务器。例如,您可以使用以下方式为.au
域名使用另一个不限制请求数量(但提供不了所有者信息)的whois服务器
use phpWhois\Whois; $whois = new Whois(); $whois->useServer('au','whois-check.ausregistry.net.au');
或
use phpWhois\Whois; $whois = new Whois(); $whois->useServer('be','whois.tucows.com');
以避免.be
whois服务器施加的限制
或
use phpWhois\Whois; $whois = new Whois(); $whois->useServer('ip','whois.apnic.net');
在特定的whois服务器上查找IP地址(但会失去由适当处理程序解析结果的能力)
useServer
可以根据需要调用多次。请注意,如果该域名有处理程序,它也将被调用,但是从 whois 服务器返回的数据可能与处理程序预期的数据不同,因此结果可能不同。
获取结果更快
如果您只想知道一个域名是否已注册,但不关心获取真实的所有者信息,您可以设置
$whois->deepWhois = false;
这将告诉 phpWhois 只查询一个 whois 服务器。对于 .com
、.net
和 .tv
域名和 IP 地址,这将防止 phpWhois 向多个 whois 服务器请求,您只会知道域名是否已注册以及注册商是谁,但不会知道所有者信息。
UTF-8
PHPWhois 假设所有 whois 服务器返回 UTF-8 编码的输出,如果某些 whois 服务器不返回 UTF-8 数据,您可以将它包含在 whois.servers.php
中的 NON_UTF8
数组中
获取域名信息的流程
- 使用域名作为参数调用方法
phpWhois\Whois::lookup()
- 如果方法的第二个参数是 true(默认),phpWhois 将尝试将域名转换为 punycode
- 如果域名未列在预定义的处理程序中(
WHOIS_SPECIAL
在src/whois.servers.php
中),尝试查询 [tld].whois-servers.net。如果它有 IP 地址,则假设它是有效的 whois 服务器 - 尝试查询找到的 whois 服务器或使用
unknown()
方法填充响应数组
注意
有一个扩展类 phpWhois\Utils
,其中包含一个名为 showObject()
的调试函数,如果您 showObject($result)
,它将输出返回对象的总体布局到浏览器。
该软件包的最新版本和演示脚本位于 https://github.com/phpWhois/phpWhois
贡献
如果您想添加对新 TLD 的支持、扩展功能或修复错误,请随意在 Github 存储库中创建一个新的 pull request:https://github.com/phpWhois/phpWhois
致谢
Mark Jeftovic [email protected]
David Saez Padros [email protected]
Ross Golder [email protected]
Dmitry Lukashin [email protected]