bnsal / php-whois
PHP WHOIS提供域和ASN路由的解析和原始WHOIS查询。与PHP 5.4+和7+兼容
dev-master
2023-06-28 09:42 UTC
Requires
- php: >=7.2
- ext-curl: *
- ext-json: *
- ext-mbstring: *
- symfony/polyfill-intl-idn: ^1.27
Requires (Dev)
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-28 12:11:19 UTC
README
PHP WHOIS客户端实现。直接向WHOIS服务发送查询。
用例
- 原始和解析的域名查找
- 原始和解析的ASN路由查找
- 直接查询TLD/ASN主机
- 扩展和自定义默认主机、解析器等
- 通过CurlLoader代理
安装
系统要求
- PHP >= 7.2 (旧版本支持 5.4+)
- php-curl
- php-mbstring
- 在防火墙中打开端口号 43
可选
- php-intl
- php-memcached + Memcached服务器
项目要求
- PSR-4自动加载器
Composer
composer require io-developer/php-whois
或 composer.json
"require": {
"io-developer/php-whois": "^4.0"
}
用法
域名查找
如何获取域的摘要信息
<?php use Iodev\Whois\Factory; // Creating default configured client $whois = Factory::get()->createWhois(); // Checking availability if ($whois->isDomainAvailable("google.com")) { print "Bingo! Domain is available! :)"; } // Supports Unicode (converts to punycode) if ($whois->isDomainAvailable("почта.рф")) { print "Bingo! Domain is available! :)"; } // Getting raw-text lookup $response = $whois->lookupDomain("google.com"); print $response->text; // Getting parsed domain info $info = $whois->loadDomainInfo("google.com"); print_r([ 'Domain created' => date("Y-m-d", $info->creationDate), 'Domain expires' => date("Y-m-d", $info->expirationDate), 'Domain owner' => $info->owner, ]);
域名查找异常
<?php use Iodev\Whois\Factory; use Iodev\Whois\Exceptions\ConnectionException; use Iodev\Whois\Exceptions\ServerMismatchException; use Iodev\Whois\Exceptions\WhoisException; try { $whois = Factory::get()->createWhois(); $info = $whois->loadDomainInfo("google.com"); if (!$info) { print "Null if domain available"; exit; } print $info->domainName . " expires at: " . date("d.m.Y H:i:s", $info->expirationDate); } catch (ConnectionException $e) { print "Disconnect or connection timeout"; } catch (ServerMismatchException $e) { print "TLD server (.com for google.com) not found in current server hosts"; } catch (WhoisException $e) { print "Whois server responded with error '{$e->getMessage()}'"; }
通过SOCKS5代理
<?php use Iodev\Whois\Loaders\CurlLoader; use Iodev\Whois\Factory; $loader = new CurlLoader(); $loader->replaceOptions([ CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5, CURLOPT_PROXY => "127.0.0.1:1080", //CURLOPT_PROXYUSERPWD => "user:pass", ]); $whois = Factory::get()->createWhois($loader); var_dump([ 'ya.ru' => $whois->loadDomainInfo('ya.ru'), 'google.de' => $whois->loadDomainInfo('google.de'), ]);
TLD主机自定义
<?php use Iodev\Whois\Factory; use Iodev\Whois\Modules\Tld\TldServer; $whois = Factory::get()->createWhois(); // Define custom whois host $customServer = new TldServer(".custom", "whois.nic.custom", false, Factory::get()->createTldParser()); // Or define the same via assoc way $customServer = TldServer::fromData([ "zone" => ".custom", "host" => "whois.nic.custom", ]); // Add custom server to existing whois instance $whois->getTldModule()->addServers([$customServer]); // Now it can be utilized $info = $whois->loadDomainInfo("google.custom"); var_dump($info);
TLD默认/后备服务器
<?php use Iodev\Whois\Factory; use Iodev\Whois\Modules\Tld\TldServer; $whois = Factory::get()->createWhois(); // Add default servers $matchedServers = $whois->getTldModule() ->addServers(TldServer::fromDataList([ ['zone' => '.*.net', 'host' => 'localhost'], ['zone' => '.uk.*', 'host' => 'localhost'], ['zone' => '.*', 'host' => 'localhost'], ])) ->matchServers('some.uk.net'); foreach ($matchedServers as $s) { echo "{$s->getZone()} {$s->getHost()}\n"; } // Matched servers + custom defaults: // // .uk.net whois.centralnic.com // .uk.net whois.centralnic.net // .uk.* localhost // .*.net localhost // .net whois.crsnic.net // .net whois.verisign-grs.com // .* localhost
ASN查找
如何使用ASN号码获取摘要
<?php use Iodev\Whois\Factory; $whois = Factory::get()->createWhois(); // Getting raw-text lookup $response = $whois->lookupAsn("AS32934"); print $response->text; // Getting parsed ASN info $info = $whois->loadAsnInfo("AS32934"); foreach ($info->routes as $route) { print_r([ 'route IPv4' => $route->route, 'route IPv6' => $route->route6, 'description' => $route->descr, ]); }
响应缓存
某些TLD主机对于频繁请求非常有限。如果请求重复,请使用缓存。
<?php use Iodev\Whois\Factory; use Iodev\Whois\Loaders\SocketLoader; use Iodev\Whois\Loaders\MemcachedLoader; $m = new Memcached(); $m->addServer('127.0.0.1', 11211); $loader = new MemcachedLoader(new SocketLoader(), $m); $whois = Factory::get()->createWhois($loader); // do something...
开发
支持的PHP版本配置在docker-compose.yml
常见用例
- 设置并运行所有测试:
docker compose up --build
- 在特定PHP版本下运行测试:
docker compose up php-8.2_intl --build
- 运行脚本:
docker compose run php-8.2_intl bin/php-whois info google.com
另请参阅 TESTS.md
贡献
该项目接受拉取请求、问题反馈。请阅读CODE_OF_CONDUCT.md