热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phpip地址库-PHP源码

ip地址库

类文件

>24; 
  if ($b1<0) $b1+=0x100; 
  $b2=($Int & 0x00ff0000)>>16; 
  if ($b2<0) $b2+=0x100; 
  $b3=($Int & 0x0000ff00)>>8; 
  if ($b3<0) $b3+=0x100; 
  $b4= $Int & 0x000000ff; 
  if ($b4<0) $b4+=0x100; 
  $Ip=$b1.&#39;.&#39;.$b2.&#39;.&#39;.$b3.&#39;.&#39;.$b4; 
  return $Ip; 
} 

class TQQwry 
{ 
  var $StartIP = 0; 
  var $EndIP = 0; 
  var $Country = &#39;&#39;; 
  var $Local = &#39;&#39;; 

  var $CountryFlag = 0; // 标识 Country位置 
                        // 0x01,随后3字节为Country偏移,没有Local 
                        // 0x02,随后3字节为Country偏移,接着是Local 
                        // 其他,Country,Local,Local有类似的压缩。可能多重引用。 
  var $fp; 

  var $FirstStartIp = 0; 
  var $LastStartIp = 0; 
  var $EndIpOff = 0 ; 

  function getStartIp ( $RecNo ) { 
      $offset = $this->FirstStartIp + $RecNo * 7 ; 
      @fseek ( $this->fp , $offset , SEEK_SET ) ; 
      $buf = fread ( $this->fp , 7 ) ; 
      $this->EndIpOff = ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])* 256*256); 
      $this->StartIp = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256); 	  	  
      return $this->StartIp ; 
  } 

  function getEndIp ( ) { 
      @fseek ( $this->fp , $this->EndIpOff , SEEK_SET ) ; 
      $buf = fread ( $this->fp , 5 ) ; 
      $this->EndIp = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256); 
      $this->CountryFlag = ord ( $buf[4] ) ; 
      return $this->EndIp ; 
  } 

  function getCountry ( ) { 

      switch ( $this->CountryFlag ) { 
          case 1: 
          case 2: 
              $this->Country = $this->getFlagStr ( $this->EndIpOff+4) ; 
              //echo sprintf(&#39;EndIpOffset=(%x)&#39;,$this->EndIpOff ); 
              $this->Local = ( 1 == $this->CountryFlag )? &#39;&#39; : $this->getFlagStr ( $this->EndIpOff+8); 
              break ; 
          default : 
              $this->Country = $this->getFlagStr ($this->EndIpOff+4) ; 
              $this->Local = $this->getFlagStr ( ftell ( $this->fp )) ; 

      } 
  } 

  function getFlagStr ( $offset ) 
  { 

      $flag = 0 ; 
      while ( 1 ){ 
          @fseek ( $this->fp , $offset , SEEK_SET ) ; 
          $flag = ord ( fgetc ( $this->fp ) ) ; 
          if ( $flag == 1 || $flag == 2 ) { 
              $buf = fread ($this->fp , 3 ) ; 
              if ($flag == 2 ){ 
                  $this->CountryFlag = 2 ; 
                  $this->EndIpOff = $offset - 4 ; 
              } 
              $offset = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])* 256*256); 
          }else{ 
              break ; 
          } 

      } 
      if ( $offset <12 ) 
          return &#39;&#39;; 
      @fseek($this->fp , $offset , SEEK_SET ) ; 
      return $this->getStr(); 
  } 
  function getStr ( ) 
  { 
      $str = &#39;&#39; ; 
      while ( 1 ) { 
          $c = fgetc ( $this->fp ) ; 
          if ( ord ( $c[0] ) == 0 ) 
             break ; 
          $str .= $c ; 
      } 
      return $str ; 
  } 

  function qqwry ($dotip) { 
      $nRet; 
      $ip = IpToInt ( $dotip ); 
      $this->fp= @fopen($_SERVER[&#39;DOCUMENT_ROOT&#39;]."ip/IPAddr.Dat", "r");
	  //var_dump($this->fp);exit;
      if ($this->fp == NULL) { 
            $szLocal= "OpenFileError"; 
		  return 1; 

        } 
        @fseek ( $this->fp , 0 , SEEK_SET ) ; 
      $buf = fread ( $this->fp , 8 ) ; 
      $this->FirstStartIp = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256); 
      $this->LastStartIp = ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])*256*256) + (ord($buf[7])*256*256*256); 

      $RecordCount= floor( ( $this->LastStartIp - $this->FirstStartIp ) / 7); 
      if ($RecordCount <= 1){ 
          $this->Country = "FileDataError"; 
          fclose ( $this->fp ) ; 
          return 2 ; 
      } 
		
        $RangB= 0; 
      $RangE= $RecordCount; 
      // Match ... 
      while ($RangB <$RangE-1) 
      { 
        $RecNo= floor(($RangB + $RangE) / 2); 
        $this->getStartIp ( $RecNo ) ; 

          if ( $ip == $this->StartIp ) 
          { 
              $RangB = $RecNo ; 
              break ; 
          } 
        if ( $ip > $this->StartIp) 
          $RangB= $RecNo; 
        else 
          $RangE= $RecNo; 
      } 
      $this->getStartIp ( $RangB ) ; 
      $this->getEndIp ( ) ; 

      if ( ( $this->StartIp <= $ip ) && ( $this->EndIp >= $ip ) ){ 
          $nRet = 0 ; 
          $this->getCountry ( ) ; 
		  
          //转换
          $this->Local = str_replace("(我们一定要解放台湾!!!)", "", $this->Local); 

      }else { 
          $nRet = 3 ; 
          $this->Country = &#39;未知&#39; ; 
          $this->Local = &#39;&#39; ; 
      } 
      fclose ( $this->fp ) ; 
      return $nRet ; 
  } 
} 

function get_address($ip) 
{ 
  $wry = new TQQwry ; 
  $nRet = $wry->qqwry ( $ip );
   print_r($nRet);exit;
  //可以利用 $nRet做一些事情,我是让他自动记录未知IP到一个表,代码就不写了。
  $strRet=$wry->Country.$wry->Local;
  $strRet=str_replace("ETE.CN","",$strRet);
  return  $strRet; 
  //return $wry->Country; 
} 

function get_country($ip)
{
  $wry = new TQQwry ; 
  $nRet = $wry->qqwry ( $ip ); 
 
  //可以利用 $nRet做一些事情,我是让他自动记录未知IP到一个表,代码就不写了。
  $strRet=$wry->Country;
  $strRet=str_replace("ETE.CN","",$strRet);
  return  $strRet; 
}

function get_ip_array($ip){
  $wry = new TQQwry ; 
  $nRet = $wry->qqwry ( $ip ); 
  //可以利用 $nRet做一些事情,我是让他自动记录未知IP到一个表,代码就不写了。
  $strRet=$wry->Country.$wry->Local;
  $strRet=str_replace("ETE.CN","",$strRet);
  $ar[&#39;country&#39;] = $wry->Country;
  $ar[&#39;address&#39;] = $strRet;
  $ar[&#39;local&#39;] = $wry->Local;
  return  $ar; 
}


// test

var_dump( get_ip_array(&#39;173.192.132.232&#39;));

var_dump( get_ip_array(&#39;183.129.146.234&#39;));

?>

解压文件 ~ 3MB

IPAddr.rar

淘宝的ip地址API

接口说明
1. 请求接口(GET):
https://www.php1.cn/[ip地址字串]
2. 响应信息:
(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商
3. 返回数据格式:
{"code":0,"data":{"ip":"210.75.225.254","country":"\u4e2d\u56fd","area":"\u534e\u5317",
"region":"\u5317\u4eac\u5e02","city":"\u5317\u4eac\u5e02","county":"","isp":"\u7535\u4fe1",
"country_id":"86","area_id":"100000","region_id":"110000","city_id":"110000",
"county_id":"-1","isp_id":"100017"}}
其中code的值的含义为,0:成功,1:失败。

推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 1、DashAPI文档Dash是一个API文档浏览器,使用户可以使用离线功能即时搜索无数API。程序员使用Dash可访问iOS,MacOS, ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
author-avatar
真正的爱情是什么2010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有