ivankristianto/phpwhois

phpWhois - 用于查询 Whois 服务和解析结果的库。基于 phpwhois.org

v4.3.0 2017-12-29 15:39 UTC

This package is auto-updated.

Last update: 2024-08-26 05:24:23 UTC


README

此包包含一个 Whois (RFC954) 库,用于 PHP。它允许 PHP 程序创建 Whois 对象,并通过 lookup 函数获取 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 "phpwhois/phpwhois":"~4.0"

最新开发版本

php composer.phar require "phpwhois/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 服务。目前已知提供特殊访问权限的 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、服务器和参数来使用不同的 whois 服务器,而不是预先配置的或发现的 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 数组中包含它

获取域名信息的工作流程

  1. 调用方法 phpWhois\Whois::lookup() 并将域名作为参数传递
  2. 如果方法的第二个参数是 true(默认值),phpWhois 将尝试将域名转换为punycode
  3. 如果域名不在预定义的处理程序中(src/whois.servers.php 中的 WHOIS_SPECIAL),尝试查询 [tld].whois-servers.net。如果它有IP地址,假设它是一个有效的Whois服务器
  4. 尝试查询找到的Whois服务器或使用 unknown() 方法填充响应数组

注意事项

有一个扩展类 phpWhois\Utils,其中包含一个名为 showObject() 的调试函数,如果您调用 showObject($result),它将输出返回对象的完整布局到网页浏览器。

包的最新版本和示例脚本位于 https://github.com/phpWhois/phpWhois

贡献

如果您想添加对新TLD的支持、扩展功能或修复错误,请随时在 Github 的仓库中创建一个新的拉取请求 https://github.com/phpWhois/phpWhois

鸣谢

Mark Jeftovic [email protected]

David Saez Padros [email protected]

Ross Golder [email protected]

Dmitry Lukashin [email protected]