快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

用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

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

?>

语言文件:
lang.inc.php

<?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%\\'
);

?>

其他著名的whois服务器

1.Tucows (whois.opensrs.net) 一次只能一个连接
   dnsstuff就是查询的它

2.BulkRegister (whois.bulkregiter.net) 小心它临时封IP,假如大量连接的话

3.Network Solutions (whois.networksolutions.com) 一天只能查1000次

4.Go Daddy (whois.godaddy.com)

5.whois.abuse.net


返回类别: 教程
上一教程: 智能跳转的404错误页面
下一教程: 一个个人网页自动化生成系统(4)

您可以阅读与"用PHP实现标准的IP Whois查询"相关的教程:
· PHP写的域名查询系统whois
· QQwry.dat格式分析和查询IP位置的PHP程序
· php写的域名查询系统whois
· JavaScript+PHP 应用一:网页制作中双下拉菜单的动态实现(转贴)
· PHP下实现端口复用/劫持
    微笑服务 优质保证 索取样品