• 方法使用示例如下

    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. Python3.x 基础练习题100例(11-20)

    练习11: 题目: 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析: 兔子的规律为数列1,1,2, ...

  2. 鸿蒙开源第三方件组件——轮播组件Banner

    目录: 1.功能展示 2.Sample解析 3.Library解析 4.<鸿蒙开源第三方组件>系列文章合集 前言 基于安卓平台的轮播组件Banner(https://github.com/ ...

  3. SpringBoot 开发提速神器 Lombok+MybatisPlus+SwaggerUI

    导读 Lombok:可以让你的POJO代码特别简洁,不止简单在BO/VO/DTO/DO等大量使用,还有设计模式,对象对比等 MybatisPlus:增加版Mybatis,基础的数据库CRUD.分页等可 ...

  4. Shiro反序列化<=1.2.4 复现

    Apache Shiro是一个Java安全框架,执行身份验证.授权.密码和会话管理.    shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到reme ...

  5. Apache配置 6. 访问日记切割

    日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件 (1)配置 (1)配置 # vim /usr/local/apache2 .4/conf/extra/httpd-vh ...

  6. Java8 Stream 中 List 转 Map 问题总结

    在使用 Java 的新特性 Collectors.toMap() 将 List 转换为 Map 时存在一些不容易发现的问题,这里总结一下备查. 空指针风险 java.lang.NullPointerE ...

  7. c++ 反汇编 继承

    单继承,父类中没有虚函数 单继承,父类存在虚函数,子类重写虚函数 单继承,父类存在虚函数,子类不新定义虚函数 单继承,父类存在虚函数,子类新定义虚函数 单继承,父类不存在虚函数,子类定义虚函数 多继承 ...

  8. Azure Front Door(三)启用 Web Application Firewall (WAF) 保护Web 应用程序,拒绝恶意攻击

    一,引言 上一篇我们利用 Azure Front Door 为后端 VM 部署提供流量的负载均衡.因为是演示实例,也没有实际的后端实例代码,只有一个 "Index.html" 的静 ...

  9. C# 8.0 宝藏好物 Async streams

    之前写<.NET gRPC 核心功能初体验>,利用gRPC双向流做了一个打乒乓的Demo,存储消息的对象是IAsyncEnumerable<T>,这个异步可枚举泛型接口支撑了g ...

  10. FFmpeg API的简单实践应用

    0. 前言 利用 FFmpeg 编译链接生成的可执行程序本身可以实现很多特定的功能,但如果我们有自己的个性化需求,想要在自己开发的项目中使用 ffmpeg 的一些功能,就需要理解并应用其已经实现好的A ...