用PHP实现标准的IP Whois查询

不朽尊座

不朽尊座

2016-01-29 14:42

用PHP实现标准的IP Whois查询,用PHP实现标准的IP Whois查询
 

      由于Internet的历史原因,apin负责整个网络IP的整体规划以及北美区 还有部分非洲地区的IP分配管理,与此相应的是,whois.apin.net是IP whois的root server,标准的IP whois查询方法是,首先向whois.apin.net查询某个IP属于哪个大区,然后再向该区的whois 服务器查询此IP的whois详细信息。

      目前负责 IPV4的大区
      whois.arin.net 美洲区 北美
      whois.apnic.net 亚太区 包括亚洲和澳大利亚
      whois.ripe.net 欧洲区 欧洲/中东(西亚)/北非
      whois.lacnic.net 拉美区 拉丁美洲和加勒比海区域
      非洲网络的IP查询也在whois.arin.net
      向某个whois服务器提交whois查询的过程

   打开一个到whois服务器的43端口的连接,然后发送要查询的域名 和一个回车换行。如果要查询多个域名,请用空格分开然后从sokect中读取结果。最后服务器将自动断开连接。

用PHP实现
1.验证IP(用 ip2long代替 ereg)
2.向 whois.arin.net查询,如果数据库中没有相关信息,会给出一个Referral Server的URL,格式如下
    ReferralServer:
然后根据此信息,继续查询

代码如下

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;
}

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/php/)

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;
}

?

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/php/)

语言文件:
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%'
);

?

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/php/)

其他有名的whois服务器

1.Tucows (whois.ope

展开更多 50%)
分享

猜你喜欢

用PHP实现标准的IP Whois查询

PHP
用PHP实现标准的IP Whois查询

Whois 的PHP代码

PHP
Whois 的PHP代码

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

PHP下ereg实现匹配ip的正则

Web开发
PHP下ereg实现匹配ip的正则

如何查询电脑IP 查询电脑IP的方法

电脑
如何查询电脑IP 查询电脑IP的方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用Delphi实现IP地址的隐藏

Delphi
用Delphi实现IP地址的隐藏

用php实现广告轮播

PHP
用php实现广告轮播

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

在数据字典中直接修改表列的名称和顺序

在数据字典中直接修改表列的名称和顺序

数据库中如何使用SQL查询连续号码段

数据库中如何使用SQL查询连续号码段
下拉加载更多内容 ↓