datingvip / php-whois
PHP WHOIS提供域名和ASN路由的解析和原始WHOIS查询。兼容PHP 5.4+和7+
4.1.6
2022-01-24 10:18 UTC
Requires
- php: >=7.2
- ext-curl: *
- ext-json: *
- ext-mbstring: *
- true/punycode: ^2.1
Requires (Dev)
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-08-24 15:56:34 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...
贡献
项目欢迎pull requests、issues和反馈。请阅读CODE_OF_CONDUCT.md