php-whois

by io-developer

io-developer / php-whois

PHP WHOIS provides parsed and raw whois lookup of domains and ASN routes. PHP 5.4+ and 7+ compatible...

155 Stars 51 Forks Last release: 7 months ago (4.0.0) MIT License 413 Commits 35 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

PHP WHOIS

Build Status PHP version Packagist

PHP WHOIS client implementation. Sends the queries directly to the WHOIS services.

Use case

  • Raw and parsed domain lookup
  • Raw and parsed ASN routes lookup
  • Direct queries to TLD/ASN hosts
  • Extending and customizing the default hosts, parsers, etc.
  • Proxying via CurlLoader

Installation

System requirements:
  • PHP >= 7.2 (previous major version supports 5.4+)
  • php-curl
  • php-mbstring
  • Open port 43 in firewall

Optional: * php-intl * php-memcached + Memcached server

Project requirements:
  • PSR-4 autoloader
Composer:
composer require io-developer/php-whois

or composer.json:

"require": {
    "io-developer/php-whois": "^4.0"
}

Usage

Domain lookup

How to get summary about domain:
// 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, ]);

Exceptions on domain lookup:
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()}'";
}

Proxy with SOCKS5:
$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 hosts customization:
$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 default/fallback servers:
$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 lookup

How to get summary using ASN number:
$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, ]);
}

Response caching

Some TLD hosts are very limited for frequent requests. Use cache if in your case requests are repeating. ```php <?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... ```

Contributing

The project is open for pull requests, issues and feedback. Please read the CODEOFCONDUCT.md

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.