Home >Backend Development >PHP Tutorial >Implementing standard IP Whois query using PHP_PHP tutorial
Due to the historical reasons of the Internet, apin is responsible for the overall planning of the entire network IP and the IP allocation management in North America and parts of Africa. Correspondingly, whois.apin.net is the root server of IP whois, which is standard The IP whois query method is to first query whois.apin.net to query which region an IP belongs to, and then query the whois server of the region for the detailed whois information of this IP.
The regions currently responsible for IPV4
whois.arin.net Americas North America
whois.apnic.net Asia Pacific includes Asia and Australia
whois.ripe.net Europe Europe/Middle East (West Asia)/North Africa
whois.lacnic.net Latin America, Latin America and the Caribbean
The IP query of the African network is also on whois.arin.net
The process of submitting a whois query to a whois server
Open a connection to port 43 of the whois server, and then send the domain name to be queried and a carriage return and line feed. If you want to query multiple domain names, separate them with spaces and read the results from sokect. Finally the server will automatically disconnect.
Using PHP to implement
1. Verify IP (use ip2long instead of ereg)
2. Query whois.arin.net. If there is no relevant information in the database, a Referral Server URL will be given , the format is as follows
ReferralServer:
Then based on this information, continue to query
The code is as follows
whoisip.php
include_once " lang.inc.php";
$IP = isset($_GET['ip'])?$_GET['ip']:'blank';
if (-1 === ip2long ($ip))
die(str_replace('%IP%', $IP, $Text['ip_invalid']));
echo GetWhois($IP);
function GetWhois($IP)
{
global $Text;
$rootwhois = 'whois.arin.net';
$buffer = str_replace('%SERVER%', $rootwhois, $Text ['sock_connect']);
$buffer1 = ReadSocket($rootwhois,$IP);
if ($buffer1 !== '')
{
$whois = SubStrByTag("ReferralServer: whois://","n",$buffer1);
//remove port number ":43";
if ( ($pos=strpos($whois,":")) !== FALSE )
{
$whois = substr($whois, 0,$pos);
}
if ($whois !== '')
{
$buffer .= str_replace('%SERVER%', $whois, $Text['sock_connect']);
$buffer .= ReadSocket($whois,$IP);
}
else
{
$buffer .= $buffer1;
}
}
return nl2br($buffer);
}
function SubStrByTag($firstTag,$secondTag,&$longStr)
{
$firstPos = strpos ($longStr,$firstTag);
$ret = '';
if ($firstPos !== FALSE)
{
$secondPos = strpos ($longStr,$secondTag,$firstPos);
if ($secondPos !== FALSE)
{
$firstPos += strlen($firstTag);
$ret = substr($longStr ,$firstPos,$secondPos-$firstPos);
}
}
return $ret;
}
function ReadSocket($whois,$ip)
{
global $Text;
$buffer = '';
if (!$sock = fsockopen( $whois, 43, $errNum, $errStr, 20))
{
$buffer = str_replace('%SERVER%', $whois, $Text['sock_fail']);
}
else
{
fputs($sock,"$ipn");
/ /$buffer = fread($sock, 8192);
while(!feof($sock)) $buffer.=fgets($sock, 8192);
fclose($sock);
}
return $buffer;
}
?>
Language file:
lang.inc.php
$ Text = Array(
'ip_invalid'=>'I want to get a valid IP, but it is [%IP%].',
'sock_connect'=>'Ask %SERVER% ...
',
'sock_fail'=>'Cannot connect to the host:%SERVER%'
);
?>
Other famous whois servers
1.Tucows (whois.opensrs.net) can only have one connection at a time
dnsstuff is what you query
2.BulkRegister (whois.bulkregiter.net) Be careful because it temporarily blocks the IP , if there are a large number of connections
3.Network Solutions (whois.networksolutions.com) can only be checked 1000 times a day
4.Go Daddy (whois.godaddy.com)
5.whois.abuse.net