raj-uimatic/phpwhois

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

v4.2.6 2022-03-02 10:31 UTC

README

已测试通过PHP 7.4

安装

php composer.phar require "raj-uimatic/phpwhois":"~4.2.6"

示例用法

(见 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 并传递要使用的域名和服务器以及参数来使用除预配置或发现的以外的其他 Whois 服务器。例如,您可以使用此方法使用另一个不限制请求数量(但提供不了所有者信息)的 Whois 服务器来查询 .au 域名

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.phpWHOIS_SPECIAL),则尝试查询 [tld].whois-servers.net。如果它有 IP 地址,则假定它是一个有效的 whois 服务器
  4. 尝试查询找到的 whois 服务器或使用 unknown() 方法填充响应数组

注意

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

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

贡献

如果您想添加对新顶级域的支持、扩展功能或修复错误,请自由在 Github 仓库中创建新的 pull request:https://github.com/phpWhois/phpWhois

致谢

Mark Jeftovic markjr@easydns.com

David Saez Padros david@ols.es

Ross Golder ross@golder.org

Dmitry Lukashin dmitry@lukashin.ru