Source for file WHOIS.php
Documentation is available at WHOIS.php
* Project: oops\WHOIS :: WHOIS php gateway
* - {@link http://pear.oops.org/docs/li_myException.html oops/myException}
* oops\WHOIS class는 php로 작성된 WHOIS gateway이며, IP 주소 lookup을 지원하며
* 자동으로 recursion을 하여 최종 결과물을 출력한다.
* @author JoungKyun.Kim <http://oops.org>
* @copyright (c) 2018, OOPS.org
* @link https://github.com/OOPS-ORG-PHP/WHOIS
* @since File available since release 1.0.0
* @example WHOIS/tests/test.php WHOIS pear package 예제 코드
* import myException class
require_once 'myException.php';
* oops\WHOIS pear pcakge의 main class
* oops\WHOIS class는 php로 작성된 WHOIS gateway이며, IP 주소 lookup을 지원하며
* 자동으로 recursion을 하여 최종 결과물을 출력한다.
* @author JoungKyun.Kim <http://oops.org>
* @copyright (c) 2018, OOPS.org
* @link https://github.com/OOPS-ORG-PHP/WHOIS
* @since File available since release 1.0.0
* @example WHOIS/tests/test.php WHOIS pear 예제 코드
private $allows = array ('kr', 'jp');
// {{{ +-- public lookup ($domain, $server = '', $timeout = 5)
* 도메인 또는 IP 주소를 lookup 한다.
* 두번째 파라미터 Whois server를 지정하면, 자동 recursion 기능이 off가
* 된다. 만약 whois server를 지정하더라도 recursion이 동작하기를
* 바란다면 WHOIS::$recurse 의 값을 true로 설정하고 WOHIS::lookup을
* @return stdClass 최종 요청한 whois server와 결과를 stdClass로 반환
* - server 최종 요청을 처리한 whois server
* @param string $domain 검색할 도메인
* @param string $server (optional) WHOIS server
* @param string $timeout (optional) connection timeout [default 5sec]
function lookup ($domain, $server = '', $timeout = 5) {
$this->pnext = $this->next = '';
$domain = trim ($domain);
$server = $this->detect ($domain);
$buf = $this->query ($server, $domain, $timeout);
// {{{ +-- private query ($server, $domain, $timeout = 5)
private function query (&$server, $domain, $timeout = 5) {
'tcp://' . $server, $errno,
$errstr, $timeout, STREAM_CLIENT_CONNECT
$this->setError (sprintf ('%s (%s)', $errstr, $errno));
$query = $this->querySet ($domain, $server);
fwrite ($sock, $query. "\r\n");
while ( ($buf = fgets ($sock, 1024)) ) {
$this->nextServer ($buf);
fprintf (STDERR, "%-5s : %s\n", 'PNEXT', $this->pnext);
fprintf (STDERR, "%-5s : %s\n", 'NEXT', $this->next);
if ( $this->recurse && $this->next && $this->pnext != $this->next ) {
$this->next = sprintf ('%s.whois-servers.net', $this->next);
$this->pnext = $this->next;
$nval = $this->query ($nserver, $domain, $timeout);
if ( $nval && ! preg_match ('/no match|out of this regist/i', $nval) ) {
// {{{ +-- public (string) detect (&$v)
* 주어진 도메인의 whois server를 결정
public function detect (&$v) {
if ( ! preg_match ('/\.([a-zA-z]{2,})$/', $v, $m) )
return 'whois.crsnic.net';
return sprintf ('whois.nic.%s', $ext);
return 'whois.register.bg';
return 'whois.belizenic.bz';
return 'whois.nic.net.ng';
return 'whois.tcinet.ru';
return 'whois.adamsnames.tc';
return sprintf ('%s.whois-servers.net', $ext);
return 'whois.afilias.info';
return 'jobswhois.verisign-grs.com';
return 'whois.dotmobiregistry.net';
return 'whois.nic.travel';
if ( preg_match ('/((br|cn|eu|gb|hu|no|qc|sa|se|uk|us|uy|za)\.com|(gb|se|uk)\.net)$/', $v) )
return 'whois.centralnic.com';
return 'whois.crsnic.net';
return 'whois.crsnic.net';
// {{{ +-- private nextServer (&$v, &$next)
private function nextServer (&$v) {
if ( ! preg_match ('/(referralserver|whois server|country|country code):/', $v) )
// {{{ +-- private querySet (&$v, $server)
private function querySet (&$v, $server) {
if ( ip2long ($v) && $server == 'whois.arin.net' )
return sprintf ("%s%s\r\n", ($server == 'whois.crsnic.net') ? '=' : '', $v);
// {{{ +-- private setError (&$msg, $level = E_USER_ERROR)
private function setError (&$msg, $level = E_USER_ERROR) {
* vim600: noet sw=4 ts=4 fdm=marker
* vim<600: noet sw=4 ts=4
|