+
28
-

回答

你可以通过以下三种方式实现“免费且开源”的 Whois 查询:

方案一:使用 RDAP 协议(最推荐,官方,返回 JSON)

点击查看全文

这是 Whois 的下一代继任者,由 ICANN 推广。优点

原生返回 JSON:不需要复杂的正则去解析文本。

官方免费:直接向注册局(如 Verisign, CNNIC)查询。

标准化:基于 HTTP/HTTPS,不再需要开启 43 端口。

PHP 实现代码:

RDAP 的逻辑是:先问 IANA 这个域名归谁管,然后重定向到具体的注册局拿到 JSON 数据。

<?php
function getDomainRdap($domain) {
    // 1. 获取顶级域名 (如 com, cn)
    $parts = explode('.', $domain);
    $tld = end($parts);

    // 2. IANA 的引导服务器地址
    // 实际生产中建议缓存这个 bootstrap 列表,不要每次都请求 IANA
    $bootstrapUrl = 'https://rdap.org/domain/' . $domain;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $bootstrapUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 关键:RDAP 会重定向到具体注册局
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 PHP RDAP Client');

    // 忽略 SSL 错误 (部分老旧注册局证书可能有问题)
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpCode == 200) {
        return json_decode($response, true);
    } else {
        return ['error' => '查询失败或域名不存在', 'code' => $httpCode];
    }
}

// 使用
$info = getDomainRdap('baidu.com');

// 打印注册商信息
echo "注册商: " . ($info['entities'][0]['vcardArray'][1][1][3] ?? '未知') . "\n";
// 打印状态
echo "状态: " . ($info['status'][0] ?? '未知');
?>

方案二:使用 PHP 开源库(本地直连 Port 43)

这是传统的 Whois 方式。你的服务器直接连接全球各地的 Whois 服务器(端口 43)。优点:完全免费,自己就是 API。缺点:返回的是纯文本,需要解析;如果你查得太快,你的服务器 IP 会被注册局暂时封禁。

你可以使用 GitHub 上最流行的 PHP 库:php-whois

安装

composer require io-developer/php-whois

代码

<?php
require 'vendor/autoload.php';

use Iodev\Whois\Factory;

// 创建实例
$whois = Factory::get()->createWhois();

// 查询
$info = $whois->loadDomainInfo("baidu.com");

if ($info) {
    echo "创建日期: " . date("Y-m-d", $info->creationDate) . "\n";
    echo "过期日期: " . date("Y-m-d", $info->expirationDate) . "\n";
    echo "注册商: " . $info->registrar . "\n";
} else {
    echo "域名可用或查询失败";
}
?>

方案三:第三方提供的免费层级 API(省心,但有额度)

如果你不想自己处理代码逻辑,可以使用第三方服务。虽然不是“开源”的,但只要额度够用也算是免费。

1. Ip2Whois (免费 500 次/月)

特点:数据非常结构化,支持 JSON。

网址https://www.ip2whois.com/developers

2. WhoisXML API (免费 500 次/月)

特点:业界最老牌,数据最全。

网址https://whois.whoisxmlapi.com/

总结建议

如果你是自己写工具:强烈建议使用 方案一 (RDAP)。这是未来的标准,完全免费且返回 JSON,不需要依赖第三方库,也不容易被封 IP(因为是 HTTP 请求)。

如果你需要查非主流后缀:部分冷门后缀不支持 RDAP,这时使用 方案二 (php-whois) 作为补充。

注意隐私保护:无论你用哪个 API,由于 GDPR 法规,现在所有合规的 Whois 查询都看不到域名所有者的邮箱、电话和姓名(除非是企业认证域名)。这一点是全球统一的,并非 API 的问题。

网友回复

我知道答案,我要回答