Projekt

Obecné

Profil

Stáhnout (9.64 KB) Statistiky
| Větev: | Tag: | Revize:
8baed187 Michal Kliment
<?php
/*
Whois.php PHP classes to conduct whois queries

Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic

Maintained by David Saez (david@ols.es)

For the most recent version of this package visit:

http://www.phpwhois.org

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

/* ipw.whois 1.00 David Saez 12/07/2001 */
/* 1.01 David Saez 06/07/2002 Added support for */
/* BRNIC, KRNIC, TWNIC and LACNIC */

/* Check with 218.165.121.114 (apnic) */
/* 62.97.102.115 (ripe) */
/* 207.217.120.54 (arin) */
/* 200.165.206.74 (brnic) */
/* 210.178.148.129 (krnic) */
/* 200.44.33.31 (lacnic) */

if (!defined('__IP_HANDLER__'))
define('__IP_HANDLER__', 1);

require_once('whois.ip.lib.php');

class ip_handler extends WhoisClient
{
// Deep whois ?
var $deep_whois = true;
var $HANDLER_VERSION = '1.0';

var $REGISTRARS = array(
'European Regional Internet Registry/RIPE NCC' => 'whois.ripe.net',
'RIPE Network Coordination Centre' => 'whois.ripe.net',
'Asia Pacific Network Information Center' => 'whois.apnic.net',
'Asia Pacific Network Information Centre' => 'whois.apnic.net',
'Latin American and Caribbean IP address Regional Registry' => 'whois.lacnic.net',
'African Network Information Center' => 'whois.afrinic.net'
);

var $HANDLERS = array(
'whois.krnic.net' => 'krnic',
'whois.apnic.net' => 'apnic',
'whois.ripe.net' => 'ripe',
'whois.arin.net' => 'arin',
'whois.registro.br' => 'bripw',
'whois.lacnic.net' => 'lacnic',
'whois.afrinic.net' => 'afrinic'
);

function parse($data, $query)
{
$result['regrinfo'] = array();
$result['regyinfo'] = array();
$result['regyinfo']['registrar'] = 'American Registry for Internet Numbers (ARIN)';
$result['rawdata'] = array();
if (!$this->deep_whois) return null;

$this->Query = array();
$this->Query['server'] = 'whois.arin.net';
$this->Query['query'] = $query;

reset($this->REGISTRARS);

$rawdata = $data['rawdata'];
if (empty($rawdata)) return $result;
$orgname = trim($rawdata[0]);

if ($orgname == '')
$orgname = trim($rawdata[1]);

while (list($string, $whois) = each($this->REGISTRARS))
if (strstr($orgname, $string) != '')
{
$this->Query['server'] = $whois;
$result['regyinfo']['registrar'] = $string;
break;
}

// More queries to get more accurated data
$more_data = array();
switch ($this->Query['server'])
{
case 'whois.apnic.net':
$rawdata = $this->GetRawData($query);
if (empty($rawdata)) break;
while (list($ln, $line) = each($rawdata))
{
if (strstr($line, 'KRNIC whois server at whois.krnic.net') ||
strstr($line, 'KRNIC-KR'))
{
$result = $this->set_whois_info($result);
$this->Query['server'] = 'whois.krnic.net';
$result['regyinfo']['registrar'] = 'Korea Network Information Center (KRNIC)';
$rawdata = $this->GetRawData($query);
break;
}
}
break;

case 'whois.arin.net':
$newquery = '';

while (list($ln, $line) = each($rawdata))
{
$s = strstr($line, '(NETBLK-');
if ($s == '')
$s = strstr($line, '(NET-');
if ($s != '')
{
$netname = substr(strtok($s, ') '), 1);
if ($newquery == '')
$newquery = $netname;
else
$more_data[] = array (
'query' => '!'.$netname,
'server' => 'whois.arin.net',
'handler' => 'arin'
);
}
}

if ($newquery != '')
{
//$result = $this->set_whois_info($result);
$result['regyinfo']['netname'] = $newquery;

if (strstr($newquery, 'BRAZIL-BLK'))
{
$this->Query['server'] = 'whois.registro.br';
$result['regyinfo']['registrar'] = 'Comite Gestor da Internet no Brasil';
$rawdata = $this->GetRawData($query);
break;
}
$rawdata = $this->GetRawData('!'.$newquery);
}
else
$rawdata = '';
break;

case 'whois.lacnic.net':
$rawdata = $this->GetRawData($query);
if (empty($rawdata)) break;
while (list($ln, $line) = each($rawdata))
{
$s = strstr($line, 'at whois.registro.br or ');
if ($s == '')
$s = strstr($line, 'Copyright registro.br');
if ($s == '')
$s = strstr($line, 'Copyright (c) Nic.br');
if ($s != '')
{
$result = $this->set_whois_info($result);
$this->Query['server'] = 'whois.registro.br';
$result['regyinfo']['registrar'] = 'Comite Gestor da Internet do Brazil';
$rawdata = $this->GetRawData($query);
break;
}
}
break;

case 'whois.ripe.net':
$rawdata = $this->GetRawData($query);
if (empty($rawdata)) break;
while (list($ln, $line) = each($rawdata))
{
if (strstr($line, 'AFRINIC-NET-TRANSFERRED-'))
{
$result = $this->set_whois_info($result);
$this->Query['server'] = 'whois.afrinic.net';
$result['regyinfo']['registrar'] = 'African Network Information Center';
$rawdata = $this->GetRawData($query);
break;
}
}
break;
default:
$rawdata = $this->GetRawData($query);
}
if (empty($rawdata))
$rawdata = $data['rawdata'];
else
$result = $this->set_whois_info($result);
$result['rawdata'] = $rawdata;

if (isset($this->HANDLERS[$this->Query['server']]))
$this->Query['handler'] = $this->HANDLERS[$this->Query['server']];

if (!empty($this->Query['handler']))
{
$this->Query['file'] = sprintf('whois.ip.%s.php', $this->Query['handler']);
$result['regrinfo'] = $this->Process($result['rawdata']);
}

// Arrange inetnum/cdir
if (isset($result['regrinfo']['network']['inetnum']) && strpos($result['regrinfo']['network']['inetnum'], '/') != false)
{
//Convert CDIR to inetnum
$result['regrinfo']['network']['cdir'] = $result['regrinfo']['network']['inetnum'];
$result['regrinfo']['network']['inetnum'] = cidr_conv($result['regrinfo']['network']['cdir']);
}

if (!isset($result['regrinfo']['network']['inetnum']) && isset($result['regrinfo']['network']['cdir']))
{
//Convert CDIR to inetnum
$result['regrinfo']['network']['inetnum'] = cidr_conv($result['regrinfo']['network']['cdir']);
}

// Try to find abuse email address
if (!isset($result['regrinfo']['abuse']['email']))
{
reset($result['rawdata']);

while (list($key, $line) = each($result['rawdata']))
{
$email_regex = "/([-_\w\.]+)(@)([-_\w\.]+)\b/i";
if (strpos($line,'abuse') !== false && preg_match($email_regex,$line,$matches)>0)
{
$result['regrinfo']['abuse']['email'] = $matches[0];
break;
}
}
}
//Check if Referral rwhois server has been reported

if (isset($result['regrinfo']['rwhois']))
{
$more_data[] = array (
'query' => $query,
'server' => $result['regrinfo']['rwhois'],
'handler' => 'rwhois'
);
$result['regyinfo']['rwhois'] = $result['regrinfo']['rwhois'];
unset($result['regrinfo']['rwhois']);
}
// more queries can be done to get more accurated data

reset($more_data);

while (list($key, $srv_data) = each ($more_data))
{
$this->Query['server'] = $srv_data['server'];
unset($this->Query['handler']);
$rwdata = $this->GetRawData($srv_data['query']);

if (!empty($rwdata))
{
// Merge rawdata results
$result['rawdata'][] = '';
foreach ($rwdata as $line)
$result['rawdata'][] = $line;
$result = $this->set_whois_info($result);
$this->Query['handler'] = $srv_data['handler'];
$this->Query['file'] = 'whois.'.$this->Query['handler'].'.php';
$rwres = $this->Process($rwdata);
if (isset($rwres['network']))
$result = $this->join_result($result,'network',$rwres);
if (isset($rwres['owner']))
$result = $this->join_result($result,'owner',$rwres);
if (isset($rwres['tech']))
$result = $this->join_result($result,'tech',$rwres);
if (isset($rwres['abuse']))
$result = $this->join_result($result,'abuse',$rwres);

if (isset($rwres['admin']))
$result = $this->join_result($result,'admin',$rwres);
if (isset($rwres['rwhois']))
{
$more_data[] = array (
'query' => $query,
'server' => $rwres['rwhois'],
'handler' => 'rwhois'
);
unset($rwres['rwhois']);
}
}
}

// IP or AS ?
if (isset($result['regrinfo']['AS']))
$result['regyinfo']['type'] = 'AS';
else
$result['regyinfo']['type'] = 'ip';
return $result;
}
function join_result($result, $key, $newres)
{
if (isset($result['regrinfo'][$key]) && !array_key_exists(0,$result['regrinfo'][$key]))
{
$r = $result['regrinfo'][$key];
$result['regrinfo'][$key] = array($r);
}

$result['regrinfo'][$key][] = $newres[$key];
return $result;
}
}
?>