喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 帮助

RSS 订阅当前论坛  

喜悦证交所已经关闭

上一主题 下一主题
     
标题: 从DZ扣出来的通过ip判断省份、城市、线路、位置的代码  
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4863
帖子 1735
金钱 4853 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[广告]: q m
从DZ扣出来的通过ip判断省份、城市、线路、位置的代码

IP库是纯真的,挺全的,就是文件挺大,想用的话在自己找 QQWry.Dat ,这里不让传

<?php
/***************************************************************************
*                        CvIp.php
*                ------------------------------
*        Date                : Sep 7, 2007
*        Copyright        : [Discuz!] (C) Comsenz Inc.
*        Mail                :
*        Desc.                : IP地址获取真实地址函数
*        History                :
*                Date    :
*                Author  :
*                Modif.  :
*        Usage Example   :
                echo CvIp('218.56.198.104');
                //返回 山东省济南市 网通ADSL
                //如果参数为空则自动获取ip
***************************************************************************/

function CvIp($ip='')
{
        if(empty($ip)) $ip = _Cv_Get_Ip();
        if(!preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/", $ip)) { return false; }
        if($fd = @fopen(dirname(__FILE__).'/QQWry.Dat', 'rb'))
        {
                $ip        = explode('.', $ip);
                $ipNum     = $ip[0]*16777216 + $ip[1]*65536 + $ip[2]*256 + $ip[3];
                $DataBegin = fread($fd, 4);
                $DataEnd   = fread($fd, 4);
                $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 = 0;
                $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;
        }
}

function _Cv_Get_Ip()
{
        $_IpArray = array($_SERVER['HTTP_X_FORWARDED_FOR'], $_SERVER['HTTP_CLIENT_IP'], $_SERVER['REMOTE_ADDR'], getenv('REMOTE_ADDR'));
        rsort($_IpArray);
        reset($_IpArray);
        return $_IpArray[0];
}
[ 本帖最后由 剑枫 于 2007-9-12 03:00 PM 编辑 ]




在场外支持奥运.....
2007-9-12 02:56 PM#1
查看资料  访问主页  发短消息  QQ  顶部
 
henanren
中级会员
Rank: 3Rank: 3
中级会员



UID 64137
精华 0
积分 221
帖子 388
金钱 31 喜悦币
威望 0
人脉 190
阅读权限 30
注册 2005-5-16
状态 离线
[推荐阅读] (北京)高级PHP开发工程师(开源项目团队成员:http://kaiyuan.hoodong.com/)
帮你顶一下



http://www.zx66.com.cn新疆装修在线
2007-9-13 12:43 PM#2
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
FLASH百强
新手上路
Rank: 1


UID 88126
精华 0
积分 1
帖子 27
金钱 1 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2007-2-7
状态 离线
[推荐阅读] APACHE二级域名的设置
过滤没有
2007-9-16 10:09 AM#3
查看资料  发短消息  顶部
 
guo664
金牌会员
Rank: 6Rank: 6


UID 74604
精华 0
积分 2390
帖子 301
金钱 2390 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2006-6-7
状态 离线
[推荐阅读] 奶瓶要找工作了
有没有IP库呀
2007-9-16 06:43 PM#4
查看资料  Blog  发短消息  顶部
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4863
帖子 1735
金钱 4853 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[推荐阅读] web打印问题


QUOTE:
原帖由 guo664 于 2007-9-16 06:43 PM 发表
有没有IP库呀
搜索 “QQWry.Dat”  纯真的ip库,网上到处有下




在场外支持奥运.....
2007-9-16 08:54 PM#5
查看资料  访问主页  发短消息  QQ  顶部
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4863
帖子 1735
金钱 4853 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[推荐阅读] 诚聘PHP高手合作,汽配行业网站项目


QUOTE:
原帖由 FLASH百强 于 2007-9-16 10:09 AM 发表
过滤没有
过滤什么




在场外支持奥运.....
2007-9-16 08:54 PM#6
查看资料  访问主页  发短消息  QQ  顶部
 
wangweian
新手上路
Rank: 1



UID 77036
精华 0
积分 47
帖子 62
金钱 47 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-7-25
状态 离线
[推荐阅读] 求教
楼主把QQWry.Dat发一份到我邮箱,谢谢!

wwa@hanweb.com
2007-9-25 11:13 AM#7
查看资料  发短消息  顶部
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4863
帖子 1735
金钱 4853 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[推荐阅读] 表连接查询


QUOTE:
原帖由 wangweian 于 2007-9-25 11:13 AM 发表
wwa@hanweb.com
http://update.cz88.net/soft/qqwry.rar




在场外支持奥运.....
2007-9-25 04:48 PM#8
查看资料  访问主页  发短消息  QQ  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.026259 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP