最新IP地址数据库-iP138版 高性能查询iP归属地ip.dat详解
dat格式:文件小,速度快,格式规范
txt格式:可以导入自己熟悉的数据库:Mdb、Mysql、Mssql 等等
基于:国家、省、市区以及运营商
字段:起始iP 结束iP 国家 省份 城市 运营商 邮政编码 地区区号
运营商:电信、联通、移动、教育网、电信通、长城宽带、鹏博士宽带、阿里云、百度云、腾讯云…
准确率:中国 省准确度超过 99.95%,市准确度超过 98.88%
覆盖率:中国 省 99.992%、市 98.952%
覆盖率:覆盖全球240多个国家/地区;中国34个省份,393个城市

<?php
/***  ip138php ip查询***//**
*
*/
class Ip138{protected static $_instance = null;private static $ip     = NULL;private static $db     = NULL;private static $index  = array();private static $textData = NULL;private static $idx_start = NULL;private static $total = 0;private static $ipEndAddr = array();private static $textOffset = array();private static $textLen = array();public static function getInstance(){if (!self::$_instance instanceof self){self::$_instance = new self();self::init();}return self::$_instance;}public static function query($ip){if (empty($ip) === TRUE){return 'N/A';}$nip   = gethostbyname($ip);$ipdot = explode('.', $nip);if ($ipdot[0] < 0 || $ipdot[0] > 255 || count($ipdot) !== 4){return 'N/A';}$ip = ip2long($ip);if (self::$db === NULL){self::init();}$end = 0;//使用 self.find 函数查找ip的索引偏移if (($ip>>24)!=0xff){$end = self::$index[($ip>>24)+1];}if ($end == 0){$end = count(self::$ipEndAddr);}$i = self::find($ip, self::$index[$ip>>24], $end);$off = self::$textOffset[$i];$addr = substr(self::$textData,$off,self::$textLen[$i]);return  $addr;//IP记录偏移值+4可以丢弃前4字节的IP地址信息。//return self::$textData[off:off+self.textLen[i]]}private static function find($ip,$left, $right){//使用二分法查找网络字节编码的IP地址的索引记录if ($right <= $left){return $left;}$m = intval(($left + $right) / 2);$new_ip = self::$ipEndAddr[$m];if ($ip < $new_ip){return self::find($ip, $left, $m-1);}else{return self::find($ip, $m+1, $right);}}private static function init(){if (self::$db === NULL){self::$db = fopen(__DIR__ . '/../ip.dat', 'rb');if (self::$db === FALSE){throw new Exception('Invalid ip.dat file!');}self::read_data();}}private static function read_data(){fseek(self::$db,0);self::$idx_start = unpack('I', fread(self::$db, 4))[1];fseek(self::$db,self::$idx_start);self::$total = (self::$idx_start-4 -256*4) / 9;while (!feof(self::$db)){self::$textData.= fread(self::$db,4096);}fseek(self::$db,0);for($i=0;$i<256;$i++){$off = 4+4*$i;          fseek(self::$db,$off);self::$index[$i] =  unpack('I', fread(self::$db, 4))[1];}for($i=0;$i<self::$total;$i++){$off = 4 + 1024 + $i*9;fseek(self::$db,$off);self::$ipEndAddr[$i] =  unpack('I', fread(self::$db, 4))[1];fseek(self::$db,$off+4);self::$textOffset[$i] =  unpack('I', fread(self::$db, 4))[1];fseek(self::$db,$off+4+4);self::$textLen[$i] =  unpack('C', fread(self::$db, 1))[1];}return self::$index;}public function __destruct(){if (self::$db !== NULL){fclose(self::$db);}}
}function main(){$ip = '202.194.48.39';$ip138 = Ip138::getInstance();$a = $ip138->query($ip);$output = sprintf('%15s %s',$ip, $a);echo $output;
}
main();

开发:http://user.ip138.com/ip/lib/
参考代码 GitHub: https://github.com/ip138er/queryipbydat

iP138版 iP地址 离线iP数据库 ip.dat详解相关推荐

  1. IP地址及子网掩码介绍及计算详解

    一.ip地址与子网掩码 1.ip地址 ip地址是一种在internet上给主机编址的方式,也是网际协议地址.ip地址是ip协议提供的同一地址格式. ip地址用于表示连入internet上的每台主机,它 ...

  2. IP地址,子网掩码,网段 概念详解

    文章目录 1. 子网掩码 1.1 子网掩码的概念及作用 1.2 子网掩码的组成 1.3 子网掩码的表示方法 1.4 为什么要使用子网掩码? 1.5 子网掩码的分类 2. 子网掩码和IP地址的关系 2. ...

  3. IP地址分类及子网掩码划分网段详解!!!

    IP地址的组成 网络位:表示IP地址所属的网段 主机位:用来唯一标识一个网段内的某一台设备 IP地址的作用 可以实现同一网段或跨网段的通信 IP地址的分类 A类地址:0.0.0.0 -- 127.25 ...

  4. IP地址与长整数之间的转换详解

    今天终于搞懂了ip地址和整数之间的转换, 在这里和大家分享一下心得,唠叨一把. 事件起因: 项目中用到通过ip地址获取城市名称,这样的原码网上一搜一大把,基本上都是lumaQQ的东西,在这里夸赞一番, ...

  5. Ip2region 离线IP地址定位库和IP定位数据管理框架

    老板要我做一个 IP 属地功能!我摸索了 1 天,搞定了.♥️ 细心的朋友应该会发现,最近,继新浪微博之后,头条.腾讯.抖音.知乎.快手.小红书等各大平台陆陆续续都上线了"网络用户IP地址显 ...

  6. php链接数据库地址填写ip地址,PHP使用IP地址联接MySQL数据库

    PHP使用IP地址连接MySQL数据库 我们通常测试的时候都是用mysql_connect("localhost","usrname","passwo ...

  7. php网站服务器ip地址吗,php 服务器ip地址吗

    php 服务器ip地址吗 内容精选 换一换 LAMP是由Linux.Apache.MySQL和PHP 建立的web应用平台.本文档指导用户使用华为云市场镜像"LNMP平台(CentOS7.4 ...

  8. python—简单数据抓取三(简单IP地址代理、利用蘑菇代理实现IP地址代理刷新本地ip地址、利用蘑菇代理实现IP地址代理抓取安居客信息并实现多线程)

    学习目标: python学习二十三 -数据抓取三. 学习内容: 1.简单IP地址代理 2.利用蘑菇代理实现IP地址代理刷新本地ip地址 3.利用蘑菇代理实现IP地址代理抓取安居客信息并实现多线程 1. ...

  9. 【新星计划-2023】IP地址是什么?IP地址的主要功能是什么?

    IP地址在生活中是很常见的,我们所使用的手机.电脑等等,都有一个IP地址,那么IP地址是什么?通过IP地址又能干什么?下文就来给大家详细的讲解一下. 一.什么是IP地址 通常我们说的IP地址多数是指互 ...

  10. linux设置静态ip地址_什么是静态IP地址,与动态IP地址比较以及如何为Windows和Linux设置?...

    linux设置静态ip地址 IP addresses are the core mechanism of Computer networks. The IP address is used to sp ...

最新文章

  1. robot简单功能测试脚本设计(例子)
  2. c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)
  3. 关于第十六届大学生智能汽车竞赛 华南赛区补赛办法
  4. 团队作业5——测试与发布(Alpha版本)
  5. [渝粤教育] 郑州商学院 商学概论 参考 资料
  6. android属性动画缩放和平移同时,Android 实现属性动画平移,旋转,缩放,渐变 《H》...
  7. C#基础知识(收藏)
  8. 电容触摸屏驱动(Linux驱动开发篇)
  9. win7计算机病毒制作教程,win7 64位旗舰版系统删除电脑病毒文件夹方法
  10. 脚本精灵for+android,脚本精灵 v3.0.8
  11. NTC功率型热敏电阻
  12. python pip语句
  13. 首批企业入驻“一县一店”:多元化方式助力农产外销
  14. html播放器怎么删除,风行如何完全删除?风行播放器彻底删除图文教程汇总
  15. iOS城市选择器-包含搜索功能
  16. K8S的节点报 “NotReady”错误
  17. Python 利用多线程进行爬虫(一)
  18. 基于canvas画布的星空效果
  19. Keras深度学习实战——信用预测
  20. Oracle 官网登录账号

热门文章

  1. 边境的悍匪—机器学习实战:第二章 端到端的机器学习项目
  2. math.floor()函数
  3. R语言【箱线图和茎叶图】
  4. gofpdf 学习笔记
  5. Linux/docker下mysql创表自动大写
  6. ie浏览器调用本地文件无反应_ie上传附件没有反应怎么办_解决ie浏览器上传附件没有反应的方法...
  7. 2015关于第十一届蓝狐网络杯湖南省大学生计算机程序设计竞赛的总结
  8. xshell生成xsh文件路径
  9. android基础知识1
  10. 计算机系统结构层次划分,网络的体系结构及其划分所遵循的原则