niko9911/phpwhois

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

v4.2.5 2014-12-30 17:09 UTC

This package is auto-updated.

Last update: 2024-09-07 04:48:28 UTC


README

这是一个 Phpwhois 的分支,正在做一些修改。任何 PR 和问题都是开放的,欢迎贡献!

新闻

phpWhois v5 终于发布了!

完全重写,使用 OOP,支持新域名,修复了 IP 查询。提取关于地址的最重要信息

  • 创建、修改、过期日期
  • 注册人/管理/技术/计费联系人
  • 域名服务器
  • 状态
  • 评论

whois.iana.org 首先查询未知地址

Whois 信息现在可序列化,便于轻松监控更改

介绍

本包包含 PHP 的 Whois (RFC954) 库。该库的工作流程如下

  1. 检查是否指定了给定地址的处理程序
  2. 如果没有指定处理程序,则查询 whois.iana.org 以获取默认的 whois 服务器
  3. 查询 whois.iana.org 提供的 whois 服务器以获取指定地址

代码示例

$whois = new \phpWhois\Whois('google.com');
try {
    $response = $whois->lookup();
} catch (Exception $e) {
    echo 'Error: '.$e->getMessage();
}

if (is_null($response)) {
    exit('Can\'t get information about this address');
}

$responseIana = $whois->getResponseIana(); // Response from whois.iana.org
                                           // It provides the whois server for TLD in `refer` and `whois` fields
$responseIanaWhois = $whois->getResponseIanaWhois(); // Response from whois server provided by IANA
$response = $whois->getResponse(); // Response from the whois server specified by library or by user.
                                   // Returned with $whois->lookup()
                                   // If no special whois server was set - this is a copy of `$whois->responseIanaWhois`

客户端是 \phpWhois\Whois 类。您可以使用 lookup 方法查询 whois 服务器。执行 lookup

响应是一个数组,至少包含一个 'rawdata' 元素,包含 whois 请求的原始输出。

此外,如果域名属于存在特殊处理程序的中介机构,则特殊处理程序将解析输出并在响应中提供额外的元素。这些额外元素的键在 HANDLERS.md 文件中有描述。

它完全支持 RFC3490、RFC3491、RFC3492 和 RFC3454 中定义的 IDNA(国际化)域名。

它还支持 ip/AS whois 查询,这对于追踪垃圾邮件非常有用。您只需传递点分四元组 IP 地址或 AS(自治系统)处理程序,而不是域名。还提供有限的、非递归的 Referral Whois(RFC 1714/2167)支持。

有用的方法

PhpWhois 在查询 whois 服务器时返回 Response 对象。 Response->getQuery()->getAddress() - 返回优化的查询(移除 www. 和其他一些优化) Response->getQuery()->getAddressOrig() - 返回未优化的查询 Response->getParsed()

响应结构

响应基于提取数据而不是解析所有可能的数据。这意味着在原始响应中呈现的一些字段可能在解析结构中缺失。

响应由从原始响应中提取的 10 个块组成

  • 注册人
  • 管理
  • 技术
  • 计费
  • 注册商
  • 域名服务器
  • 状态
  • 日期
  • 评论
  • 键值

扩展库

phpWhois 由类组成,这些类可以扩展为用户开发的实现

  • \phpWhois\Provider\ProviderAbstract - 执行与 whois 服务器的连接并获取结果。目前实现:WhoisServer 和 HttpServer
  • \phpWhois\Handler\HandlerBase - 处理程序定义提供程序和解析模式
  • \phpWhois\DomainHandlerMap - 适用于特定域的自定义处理程序集合
  • \phpWhois\Query - 包含 whois 服务器的查询,包括可选查询参数
  • \phpWhois\Response - 包含来自 whois 服务器的响应,包括原始和解析数据

要求

phpWhois 需要 PHP 5.5 或更高版本以及 OpenSSL 支持,才能正常工作。

如果没有 SSL 支持,您将无法查询没有 whois 服务器但具有基于 https 的 whois 的域名。

安装

通过 composer

稳定版本

php composer.phar require "phpwhois/phpwhois":"~4.0"

最新开发版本

使用 composer.phar 安装 "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

他们为注册用户提供他们所说的 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 和服务器以及 args 来使用不同的 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.phpWHOIS_SPECIAL),则尝试查询 [tld].whois-servers.net。如果它有 IP 地址,则假定它是一个有效的 whois 服务器
  4. 尝试查询找到的 whois 服务器或使用 unknown() 方法填充响应数组

注意

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

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

贡献

如果您想添加对新顶级域(TLD)的支持、扩展功能或修复一个错误,请随意在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