PHP 获得IP 运营商 物理地址

1、第一种方式此方式查询结果相当精确
参考:http://www.lianyue.org/2013/2472/

<?php
/*
$ip = empty( $_GET['ip'] ) ? '' : (string) $_GET['ip'];
if ( !$ip || !filter_var( $ip, FILTER_VALIDATE_IP ) ) {
      die('error');
}
*/
$ip = "175.6.2.6";
print_r( whois_ip($ip) );


/**
*     ip whois 查询
*
*     1 参数 ip
*
*     返回值 数组
**/
function whois_ip( $ip ) {
      
       // http://www.icann.org/zh/about/learning/glossary 这是 介绍 IP等的,
       // inetnum =      IP段
       // netname =      公司名称
       // descr =        公司地址
       // country =      国家  中国 CN  美国US 日本JP
       // address =      IP 所在地址
       // whois =        查询的服务器
      
       // 非洲
      $whois[ 'whois.afrinic.net']['inetnum' ] = 'inetnum';
      $whois[ 'whois.afrinic.net']['netname' ] = 'netname';
      $whois[ 'whois.afrinic.net']['country' ] = 'country';
      $whois[ 'whois.afrinic.net']['address' ] = 'address';
      $whois[ 'whois.afrinic.net']['descr' ] = 'descr';
      
      
       // 美洲
      $whois[ 'whois.arin.net']['inetnum' ] = 'netrange';
      $whois[ 'whois.arin.net']['netname' ] = 'netname';
      $whois[ 'whois.arin.net']['country' ] = 'country';
      $whois[ 'whois.arin.net']['address' ] = 'address';
      $whois[ 'whois.arin.net']['descr' ] = 'orgname';
      
       // 亚太
      $whois[ 'whois.apnic.net']['inetnum' ] = 'inetnum';
      $whois[ 'whois.apnic.net']['netname' ] = 'netname';
      $whois[ 'whois.apnic.net']['country' ] = 'country';
      $whois[ 'whois.apnic.net']['address' ] = 'address';
      $whois[ 'whois.apnic.net']['descr' ] = 'descr';
      
       // 拉丁美洲和加勒比海
      $whois[ 'whois.lacnic.net']['inetnum' ] = 'inetnum';
      $whois[ 'whois.lacnic.net']['netname' ] = 'ownerid';
      $whois[ 'whois.lacnic.net']['country' ] = 'country';
      $whois[ 'whois.lacnic.net']['address' ] = 'address';
      $whois[ 'whois.lacnic.net']['descr' ] = 'owner';
      
       // 欧洲
      $whois[ 'whois.ripe.net']['inetnum' ] = 'inetnum';
      $whois[ 'whois.ripe.net']['netname' ] = 'netname';
      $whois[ 'whois.ripe.net']['country' ] = 'country';
      $whois[ 'whois.ripe.net']['address' ] = 'address';
      $whois[ 'whois.ripe.net']['descr' ] = 'descr';
      
       // 获得 ip 的查询地区
       if ( !$sock = fsockopen( 'whois.iana.org' , 43, $errNum, $errStr, 5 ) ) {
             return false;
      }
      
      fputs( $sock, $ip . "\n" );
      $r = array( );
       while( !feof( $sock ) ) {
            $a = explode( ':', fgets( $sock, 4096 ), 2 );
             if ( count( $a ) == 2 ) {
                  $a[1] = trim( $a[1] );
                   if ( in_array( $a[0], array'whois''refer' ) ) && in_array( $a[1], array_keys( $whois ) ) ) {
                        $refer = trim( $a[1] );
                         break;
                  }
            }
             if ( in_array( $a[0], array'inetnum''netname''descr' , 'address''country' ) ) ) {
                  $r[$a[0]] = $a[1];
            }
            
             if ( $a[0] == 'organisation' && empty( $r[ 'netname'] ) ) {
                  $r[ 'netname'] = $a[1];
            }
      }
      fclose( $sock );
       if ( $r && empty( $refer ) ) {
            $r = array_pad_value( $r, array_keys( reset( $whois ) ) );
            $r[ 'whois'] = 'whois.iana.org' ;
             return $r;
      }

       if ( empty ( $refer ) ) {
             return false;
      }
      
      $whois = $whois[$refer];

       if ( !$sock = fsockopen( $refer, 43, $errNum, $errStr, 5 ) ) {
             return false;
      }
      fputs( $sock, $ip . "\n" );
      $arr = array();
       while( !feof( $sock ) ) {
            $a = explode( ':', fgets( $sock, 4096 ), 2 );
            $a[0] = strtolower( trim( $a[0] ) );
             if ( strpos( $a[0], ' ' ) || count( $a ) != 2 ) {
                   continue;
            }
            $arr[] = $a;
      }
      
      $r = array();
      $all = array_flip( $whois );
       foreach ( $arr as $k => $v ) {
             if ( empty ( $all[$v[0]] ) ) {
                   continue;
            }
            $kk = $all[$v[0]];
             if ( empty ( $r[$kk] ) ) {
                  $r[$kk] = trim( $v[1] );
            } elseif ( $arr[$k-1][0] == $v[0] ) {
                  $r[$kk] .= "\n". trim( $v[1] );
            }
      }
      
      $r = array_pad_value( $r, array_keys( $whois ) );
      $r[ 'whois'] = $refer;
       return $r;
}


/**
*     数组 填补值
*
*     1 参数 需要进行处理的数组
*     2 参数 只保留下哪些下标 和没有添加哪些下标 数组 或者 字符串 array( 'key', 'tmd' ) key,tmd
*     3 参数 添加的默认值
*     4 参数 是否进行过滤 过滤后只保留2参数里面有的值的KEY
*
*     返回值 处理后的数组
**/
function array_pad_value( $arr = array(), $pad = array(), $value = null, $intersect_key = true ) {
      $arr = (array) $arr;
       if( !is_array( $pad ) ) {
            $pad = explode( ',', $pad );
      }
      $p = array();
       foreach ( $pad as $v ) {
            $p[$v] = $value;
      }
      $arr += $p;
       if( $intersect_key ) {
             return array_intersect_key( $arr , $p );
      } else {
             return $arr;
      }
}

2、第二种方式
参考:http://blog.csdn.net/jiftlixu/article/details/7086969
<?php
$info = ip_Place("218.75.124.100");
list($IP,$Country,$Province,$City,$Net) = $info;
echo "IP:       ".$IP. "<br>";
echo "国家:".$Country. "<br>";
echo "省:    ".$Province. "<br>";
echo "城市:".$City. "<br>";
echo "运营商:".$Net. "<br>";

function ip_Place($ipAddr){
       // $ipAddr = "218.75.124.100";
    $ip138Addr = "http://counter.sina.com.cn/ip?ip=".$ipAddr;
    $contents = file_get_contents($ip138Addr);
    $intStart = strpos($contents, "new Array(")+10;
    $intEnd = strpos($contents, ");");
                      
    $Info = substr($contents,$intStart,$intEnd-$intStart);
    $Info = str_replace( "\"","" ,$Info);
           
    $place = explode( ",",$Info);
    return $place;
}        
?>


参考:http://blog.163.com/pcttcnc2007@126/blog/static/5175295820143215735175/

<?php
define('ISP_NONE',0); //未知
define('ISP_DIANXIN',1); //电信
define('ISP_LIANTONG',2); //联通
define('ISP_YIDONG',3); //移动
define('ISP_TIETONG',4); //铁通
define('ISP_YITONG',5); //移通
define('ISP_DIANXINTONG',6); //电信通
define('ISP_JIAOYUWANG',7); //教育网
define('ISP_CHANGCHENGKUANGDAI',8); //长城宽带
define('ISP_YOUXIANTONG',9); //有线通
define('ISP_GUANGDIAN',10); //广电
define('ISP_KUANGDAITONG',11); //宽带通
define('ISP_YOUTIANKUANGDAI',12); //油田宽带
define('ISP_GEHUA',13); //歌华
define('ISP_SHIJIHULIAN',14); //世纪互联
define('ISP_SHIXUNKUANGDAI',15); //视讯宽带
define('ISP_FANGZHENGKUANGDAI',16); //方正宽带
define('ISP_HUATONGKUANGDAI',17); //华通宽带
define('ISP_HANGSHUKUANGDAI',18); //航数宽网
define('ISP_HUAYUKUANGDAI',19); //华宇宽带
define('ISP_WANGTONG',20); //网通
define('ISP_WANGSU',21); //网宿
define('ISP_LANBOKUANGDAI',22); //蓝波宽带

function get_responseText($url,$para){   
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
    curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1); // 显示输出结果
    curl_setopt($curl,CURLOPT_POST, true); // post传输数据
    curl_setopt($curl,CURLOPT_POSTFIELDS,$para); // post传输数据
    $responseText = curl_exec($curl);
    //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
    curl_close($curl);
    return $responseText;
}

function get_ips_num($ip){
    $ips_num = 0;
    $ip = trim($ip);
    $url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=" .$ip;//新浪接口
    $para = '';
    $response_text = get_responseText($url,$para);
    if($response_text && strlen($response_text) > 0){
        $response_object = json_decode($response_text);
        if(is_object($response_object)){
            if(isset ($response_object->isp)){
                $isp = trim($response_object-> isp);
                switch($isp){
                    case '电信':
                        $ips_num = ISP_DIANXIN;
                        break;
                    case '联通':
                        $ips_num = ISP_LIANTONG;
                        break;
                    case '移动':
                        $ips_num = ISP_YIDONG;
                        break;
                    case '铁通':
                        $ips_num = ISP_TIETONG;
                        break;
                    case '移通':
                        $ips_num = ISP_YITONG;
                        break;
                    case '电信通':
                        $ips_num = ISP_DIANXINTONG;
                        break;
                    case '教育网':
                        $ips_num = ISP_JIAOYUWANG;
                        break;
                    case '长城宽带':
                        $ips_num = ISP_CHANGCHENGKUANGDAI;
                        break;
                    case '有线通':
                        $ips_num = ISP_YOUXIANTONG;
                        break;
                    case '广电':
                        $ips_num = ISP_GUANGDIAN;
                        break;
                    case '宽带通':
                        $ips_num = ISP_KUANGDAITONG;
                        break;   
                    case '油田宽带':
                        $ips_num = ISP_YOUTIANKUANGDAI;
                        break;   
                    case '歌华':
                        $ips_num = ISP_GEHUA;
                        break;   
                    case '世纪互联':
                        $ips_num = ISP_SHIJIHULIAN;
                        break;
                    case '视讯宽带':
                        $ips_num = ISP_SHIXUNKUANGDAI;
                        break;
                    case '方正宽带':
                        $ips_num = ISP_FANGZHENGKUANGDAI;
                        break;
                    case '华通宽带':
                        $ips_num = ISP_HUATONGKUANGDAI;
                        break;
                    case '航数宽网':
                        $ips_num = ISP_HANGSHUKUANGDAI;
                        break;
                    case '华宇宽带':
                        $ips_num = ISP_HUAYUKUANGDAI;
                        break;
                    case '网通':
                        $ips_num = ISP_WANGTONG;
                        break;
                    case '网宿':
                        $ips_num = ISP_WANGSU;
                        break;
                    case '蓝波宽带':
                        $ips_num = ISP_LANBOKUANGDAI;
                        break;
                }
            }
        }
    }
    return $ips_num;
}

$ip = "220.181.90.240";
$ips_num = get_ips_num($ip);
var_dump($ips_num);

3、其它如腾讯、淘宝ip库、ip138

通过ip138获取客户端ip物理地址和运营商
function ip_Place($ipAddr) {
$ip138Addr = "http://www.ip138.com/ips1388.asp?ip=" . $ipAddr . "&action=2";
$ip138Html = iconv("GBK", "UTF-8", file_get_contents($ip138Addr));
preg_match("/本站主数据:(.+)<\/li><li>参考数据一/", $ip138Html, $subject);

$result = array();
$subject = isset($subject[1]) ? explode('  ', trim($subject[1])) : '';
$result['city'] = isset($subject[0]) ? $subject[0] : '';
$result['isp'] = isset($subject[1]) ? $subject[1] : '';
return $result;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值