Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/io-developer/php-whois
PHP WHOIS provides parsed and raw whois lookup of domains and ASN routes. PHP 8.0 compatible (5.4+ old versions)
https://github.com/io-developer/php-whois
asn asnumber curl domain info lookup php proxy routes socks5 tld whois
Last synced: 1 day ago
JSON representation
PHP WHOIS provides parsed and raw whois lookup of domains and ASN routes. PHP 8.0 compatible (5.4+ old versions)
- Host: GitHub
- URL: https://github.com/io-developer/php-whois
- Owner: io-developer
- License: mit
- Created: 2016-05-02T16:36:26.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2024-02-05T12:22:43.000Z (12 months ago)
- Last Synced: 2024-10-29T17:31:03.020Z (3 months ago)
- Topics: asn, asnumber, curl, domain, info, lookup, php, proxy, routes, socks5, tld, whois
- Language: PHP
- Homepage:
- Size: 1.17 MB
- Stars: 437
- Watchers: 24
- Forks: 117
- Open Issues: 37
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# PHP WHOIS
[![PHP version](https://img.shields.io/badge/php-%3E%3D7.2-8892BF.svg)](https://secure.php.net/)
[![Packagist](https://img.shields.io/packagist/v/io-developer/php-whois.svg)](https://packagist.org/packages/io-developer/php-whois)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__ (old versions supports __5.4+__)
* php-curl
* php-mbstring
* Open port __43__ in firewallOptional:
* 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:
```php
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:
```php
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:
```php
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:
```php
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:
```php
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:
```php
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
addServer('127.0.0.1', 11211);
$loader = new MemcachedLoader(new SocketLoader(), $m);$whois = Factory::get()->createWhois($loader);
// do something...
```## Develompment
Supported php versions are configured in `docker-compose.yml`Common use cases:
1. Set up & run all tests: `docker compose up --build`
2. Run tests under specific php version: `docker compose up php-8.2_intl --build`
3. Run scripts: `docker compose run php-8.2_intl bin/php-whois info google.com`Also see **TESTS.md**
## Contributing
The project is open for pull requests, issues and feedback. Please read the CODE_OF_CONDUCT.md