• 方法使用示例如下

    define('WEB_ROOT',dirname(__FILE__));
    echo convertip('111.63.244.69','full');
  • func convertip
    function convertip($ip,$integrity='simple'){
    
        $return='';
    
        $integrity=in_array($integrity,array('simple','full'))?$integrity:'simple';
    
        if(preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/",$ip)){
    
            $iparray=explode('.',$ip);
    
            if($iparray[0]==10||$iparray[0]==127||($iparray[0]==192&&$iparray[1]==168)||($iparray[0]==172&&($iparray[1]>=16&&$iparray[1]<=31))){
    
                $return = '- LAN';
    
            }elseif($iparray[0]>255||$iparray[1]>255||$iparray[2]>255||$iparray[3]>255){
    
                $return='- Invalid IP Address';
    
            }else{
    
                $tinyipfile=WEB_ROOT.'./tinyipdata.dat';//IP==地址数据包精简版
    
                $fullipfile=WEB_ROOT.'./wry.dat';//IP==地址数据包完整版
    
                if($integrity=='simple'&&@file_exists($tinyipfile)){
    
                    $return=convertip_tiny($ip,$tinyipfile);
    
                }elseif(@file_exists($fullipfile)){
    
                    $return=convertip_full($ip,$fullipfile);
    
                }
    }
    } return $return;
    }

func convertip_tiny

function convertip_tiny($ip,$ipdatafile){

    static $fp=NULL,$offset=array(),$index=NULL;

    $ipdot=explode('.',$ip);

    $ip=pack('N',ip2long($ip));

    $ipdot[0]=(int)$ipdot[0];

    $ipdot[1]=(int)$ipdot[1];

    if($fp===NULL&&$fp=@fopen($ipdatafile,'rb')){

        $offset=@unpack('Nlen',@fread($fp,4));

        $index=@fread($fp,$offset['len']-4);

    }elseif($fp==FALSE){

        return  '- Invalid IP data file';

    }

    $length=$offset['len']-1028;

    $start =@unpack('Vlen',$index[$ipdot[0]*4].$index[$ipdot[0]*4+1].$index[$ipdot[0]*4+2].$index[$ipdot[0]*4+3]);

    for ($start=$start['len']*8+1024;$start<$length;$start+=8){

        if ($index{$start}.$index{$start+1}.$index{$start+2}.$index{$start+3}>=$ip){

            $index_offset=@unpack('Vlen',$index{$start+4}.$index{$start+5}.$index{$start+6}."\x0");

            $index_length=@unpack('Clen',$index{$start+7});

            break;

        }
} @fseek($fp,$offset['len']+$index_offset['len']-1024); if($index_length['len']){ return '- '.@fread($fp,$index_length['len']); }else{ return '- Unknown'; }
}
  • func convertip_full

    function convertip_full($ip,$ipdatafile){
    
        if(!$fd=@fopen($ipdatafile,'rb')){
    
            return '- Invalid IP data file';
    
        }
    
        $ip=explode('.',$ip);
    
        $ipNum=$ip[0]*16777216+$ip[1]*65536+$ip[2]*256+$ip[3];
    
        if(!($DataBegin=fread($fd,4))||!($DataEnd=fread($fd,4))) return;
    
        @$ipbegin=implode('',unpack('L',$DataBegin));
    
        if($ipbegin<0) $ipbegin+=pow(2,32);
    
        @$ipend=implode('',unpack('L',$DataEnd));
    
        if($ipend<0) $ipend+=pow(2,32);
    
        $ipAllNum=($ipend-$ipbegin)/7+1;
    
        $BeginNum=$ip2num=$ip1num=0;
    
        $ipAddr1=$ipAddr2='';
    
        $EndNum=$ipAllNum;
    
        while($ip1num>$ipNum||$ip2num<$ipNum){
    
            $Middle= intval(($EndNum+$BeginNum)/2);
    
            fseek($fd,$ipbegin+7*$Middle);
    
            $ipData1=fread($fd,4);
    
            if(strlen($ipData1)<4){
    
            fclose($fd);
    
                return '- System Error';
    
            }
    
            $ip1num=implode('',unpack('L',$ipData1));
    
            if($ip1num<0) $ip1num+=pow(2,32);
    
            if($ip1num>$ipNum){
    
                $EndNum=$Middle;
    
                continue;
    
            }
    
            $DataSeek=fread($fd,3);
    
            if(strlen($DataSeek)<3){
    
                fclose($fd);
    
                return '- System Error';
    
            }
    $DataSeek=implode('',unpack('L',$DataSeek.chr(0)));
    fseek($fd,$DataSeek);
    $ipData2=fread($fd,4);
    if(strlen($ipData2)<4){
    fclose($fd);
    return '- System Error';
    }
    $ip2num=implode('',unpack('L',$ipData2)); if($ip2num<0) $ip2num+=pow(2,32); if($ip2num<$ipNum){ if($Middle==$BeginNum){ fclose($fd); return '- Unknown';
    } $BeginNum=$Middle;
    }
    } $ipFlag=fread($fd,1); if($ipFlag==chr(1)){ $ipSeek=fread($fd,3); if(strlen($ipSeek)<3){ fclose($fd); return '- System Error'; } $ipSeek=implode('',unpack('L',$ipSeek.chr(0))); fseek($fd,$ipSeek); $ipFlag=fread($fd,1); } if($ipFlag==chr(2)){ $AddrSeek=fread($fd,3); if(strlen($AddrSeek)<3){ fclose($fd); return '- System Error'; } $ipFlag=fread($fd,1); if($ipFlag==chr(2)){ $AddrSeek2=fread($fd,3); if(strlen($AddrSeek2)<3){ fclose($fd); return '- System Error'; } $AddrSeek2=implode('',unpack('L',$AddrSeek2.chr(0))); fseek($fd,$AddrSeek2); }else{ fseek($fd,-1,SEEK_CUR); } while(($char=fread($fd,1)) != chr(0)) $ipAddr2 .= $char; $AddrSeek=implode('',unpack('L',$AddrSeek.chr(0))); fseek($fd,$AddrSeek); while(($char=fread($fd,1)) != chr(0)) $ipAddr1 .= $char; }else{ fseek($fd,-1,SEEK_CUR); while(($char=fread($fd,1)) != chr(0)) $ipAddr1 .= $char; $ipFlag=fread($fd,1); if($ipFlag==chr(2)){ $AddrSeek2=fread($fd,3); if(strlen($AddrSeek2)<3){ fclose($fd); return '- System Error'; } $AddrSeek2=implode('',unpack('L',$AddrSeek2.chr(0))); fseek($fd,$AddrSeek2); }else{ fseek($fd,-1,SEEK_CUR); } while(($char=fread($fd,1)) != chr(0)) $ipAddr2 .= $char;
    } fclose($fd); if(preg_match('/http/i',$ipAddr2)){ $ipAddr2=''; } $ipaddr="$ipAddr1 $ipAddr2"; $ipaddr=preg_replace('/CZ88\.NET/is','',$ipaddr); $ipaddr=preg_replace('/^\s*/is','',$ipaddr); $ipaddr=preg_replace('/\s*$/is','',$ipaddr); if(preg_match('/http/i',$ipaddr)||$ipaddr==''){ $ipaddr='- Unknown'; } return '- '.$ipaddr; }

php将IP地址转换为真实地址的方法的更多相关文章

  1. ip地址转换

    通常,我们用点分十进制字符串表示ipv4地址(192.168.1.1),用十六进制字符串表示ipv6地址(fe80::20c:29ff:fee9:4bcc). ipv4转换函数 #include &l ...

  2. [转]字符型IP地址转换成数字IP的SQL函数

    使用SQL函数可以实现许多的功能,下面为您介绍的是字符型IP地址转换成数字IP的SQL函数示例,供您参考,希望对您学习SQL函数能够有所帮助.      /**//*--调用示例       sele ...

  3. 华为上机:IP地址转换

    IP地址转换 描述: IP地址的长度为32,即有2^32-1个地址.IP地址一般采用点分十进制表示法,例如"192.168.1.1".IP地址也可以直接用一个32位的整数进行表示. ...

  4. IP地址转换成Long型数字的算法

    在应用程序开发中,涉及到IP地址的存储,大部分开发人员都将其存为String(或文本类型).能否将固定格式为m.n.x.y的IP地址转换成 Long型的数字呢?答案是肯定的.在数据库层面,可以直接将结 ...

  5. 四、IP地址转换

    IP地址与端口 TCP/IP(传输控制协议/网际协议)不是一个协议,而是一组协议的总称,包括IP.TCP.UDP.ICMP.ARP等.它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据 ...

  6. 字符串-06. IP地址转换

    /* * Main.c * D6-字符串-06. IP地址转换 * Created on: 2014年8月19日 *******测试通过******** *转载:http://blog.csdn.ne ...

  7. 套接字编程相关函数(1:套接字地址结构、字节序转换、IP地址转换)

    1. 套接字地址结构 1.1 IPv4套接字地址结构 IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中.下 ...

  8. python整数与IP地址转换

    python整数与IP地址转换 [转] 我们有时会将一个整数与IP地址进行互换,用python代码实现很简单将一个整数如2000000,变为一个IP地址的方式 >>> import ...

  9. IP地址转换函数

    只适用于IPV4 inet_addr函数将用点分十进制字符串表示的IPv4地址转化为用网络字节序整数表示的IPv4地址. 失败时返回INADDR_NONE. inet_aton函数完成和inet_ad ...

随机推荐

  1. es6 快速入门 系列 —— 变量声明:let和const

    其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' ...

  2. sqlyog如何增删改查?

    转: sqlyog如何增删改查? 下面是一道完整的 sqlyog 增删改查的练习, 顺着做下去,可以迅速掌握. 1. 创建部门表dept,并插入数据: 2. 创建emp员工表,并插入数据: sql 代 ...

  3. c++函数指针说明

    下面随笔说明函数指针用法. 函数指针的定义: 定义形式: 存储类型 数据类型 (*函数指针名)() 含义: 函数指针指向的是程序代码存储区 函数指针的典型用途-----实现函数回调 通过函数指针调用的 ...

  4. 医学图像配准 | Voxelmorph 微分同胚 | MICCAI2019

    文章转载:微信公众号「机器学习炼丹术」 作者:炼丹兄(已授权) 联系方式:微信cyx645016617(欢迎交流) 论文题目:'Unsupervised Learning for Fast Proba ...

  5. 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(Unified API篇)

    SDK 开发 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(理念与设计原则篇) 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(开发基础篇) 顶级开源项目 Sentry ...

  6. Python3中变量作用域nonlocal的总结

    最近,在工作中踩到了一个关于Python3中nonlocal语句指定的变量作用域的坑.今天趁周六休息总结记录一下. 众所周知,Python中最常见的作用域定义如下:   但是,为了更加方便地在闭包函数 ...

  7. Apache Pulsar 在能源互联网领域的落地实践

    关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储分离架构设计,支 ...

  8. Srping源码之BeanFactory.getBean

    本文是针对Srping的BeanFactory.getBean来进行源码解析,如果您是第一次看请先看一下XMLBeanFactory解析:https://www.cnblogs.com/technol ...

  9. PTA 递增的整数序列链表的插入

    6-4 递增的整数序列链表的插入 (15 分)   本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List ...

  10. ABP 适用性改造 - 精简 ABP CLI 生成的项目结构

    Overview 不管是公司或者个人都会有不同的开发习惯,通过建立项目模板,既可以使开发人员聚焦于业务功能的开发,也可以在一定程度上统一不同开发人员之间的开发风格.在使用 ABP 框架的过程中,对于 ...