PHP获取给定IP网段信息

No Comments

刚写了段代码, 主要功能是通过给定的网段信息(如10.0.0.1/22), 获取该网段的起始IP地址, 掩码IP地址和广播地址等的信息. 写这段代码的目的是做IP地址查询, 主要用于查询大型集团式企业日志服务器中成百上千个设备中的某一个是归属于哪一个分支企业的(分支企业按一定规则划分了不同的网段). 代码如下:

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
    /*
    * Leon
    * http://nerrsoft.com
    * leon@nerrsoft.com
    * 2010-08-11
    */
    class ipInfo{
        //根据给定的IP字串获取IP信息
        public function getIpInfo($ipStr){
            if(!$this->valid($ipStr)){
                return false;    
            }
            $ipArr = explode('/', $ipStr);
            //information
            $info['ipStr'] = $ipStr;
 
            $info['bin']['mask'] = $this->getSubnetMask($ipArr[1]);
            $info['ip']['mask'] = $this->bin2ip($info['bin']['mask']);
            $info['long']['mask'] = ip2long($info['ip']['mask']);
 
            $info['bin']['net'] = $this->ip2bin($ipArr[0]) & $info['bin']['mask'];
            $info['ip']['net'] = $this->bin2ip($info['bin']['net']);
            $info['long']['net'] = ip2long($info['ip']['net']);
 
            $info['ip']['begin'] = long2ip($info['long']['net']+1);
            $info['bin']['begin'] = $this->ip2bin($ipArr[0]);
            $info['long']['begin'] = ip2long($info['ip']['begin']);
 
            $info['ip']['end'] = long2ip(abs($info['long']['mask'])+$info['long']['begin']-3);
            $info['bin']['end'] = $this->ip2bin($info['ip']['end']);
            $info['long']['end'] = ip2long($info['ip']['end']);
 
            $info['ip']['broacast'] = long2ip($info['long']['end']+1);
            $info['bin']['broacast'] = $this->ip2bin($info['ip']['broacast']);
            $info['long']['broacast'] = ip2long($info['ip']['broacast']);
 
            return $info;
        }
        //验证IP字串格式有效性 10.0.0.1/24
        private function valid($ipStr){
            if(preg_match("/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\/\d{1,2}$/", $ipStr)){
                return true;
            }else{
                return false;
            }    
        }
        //获取二进制
        private function get_bin($number){
            return str_pad(decbin($number),8,'0',STR_PAD_LEFT);
            return decbin($number);
        }
        //IP地址转二进制
        private function ip2bin($ip){
            $ip_octets = split("\.", $ip);
            unset($bin_sn);
            foreach($ip_octets as $val){
                $bin_sn[] = $this->get_bin($val);
            }
            return join(".", $bin_sn);
        }
        //二进制转IP地址
        private function bin2ip($ip){
            $ip_octets = split("\.", $ip);
            unset($bin_sn);
            foreach($ip_octets as $val){
                $bin_sn[] = bindec($val);    
            }
            return join(".", $bin_sn);
        }
        //获取子网掩码
        private function getSubnetMask($mask){
            for($i=1; $i<=32; $i++){
                if($i<=$mask){
                    $maskStr .= '1';
                }else{
                    $maskStr .= '0';
                }
                if($i%8==0){
                    $maskStr .= '.';
                }
            }
            $maskStr = substr($maskStr, 0, -1);
            return $maskStr;        
        }    
    }
 
    //example
    $ip = new ipInfo();
    $result = $ip->getIpInfo('10.229.8.10/22');
    print_r($result);
?>

深海探奇.OceanWorld3D.2009

No Comments

voyage-3d

昨天陪家人去看了《深海探奇》, 其实我本想看吕克贝松那部《阿黛拉的非凡冒险》来着,  但是因为家人没看过3D电影, 所以只好选这部了.

整部片子以一只雌性小海龟回游产卵为线索, 用海龟的第一人称视角, 为观众介绍了沿途遇到的形形色色的海洋生物. (各种鲸,各种鲨, 各种鱼)

话说这部纪录片还真是不给力呀, 全长81钟, 但我已经数不清自己睡了几次了.

另外, 我要说的是’左岸’的3D眼镜很差劲,  又大又松又模糊又没有偏振, 我认为还是正大的那种比较好

唯独比较赞的就是”大众点评“的这次团购活动, 的确挺划算的.

在Ubuntu下配置Apache基于AD的Kerberos验证

No Comments

kerberosloginwindow
前段时间因为项目需要在Ubuntu+Apache的环境下配置了基本Active Directory的Kerberos验证, 主要为了实现WEB应用基于AD的单点登陆SSO(即SingleSignOn).

下面将配置过程做简单记录:
0. 先说一下我的环境
Ubuntu9.04 + Apache2.2x + Win2k8 & AD

1.    因为Apache本身是不支持Kerberos的, 所以我们第一步是安装Kerberos Module for Apache即Mod_auth_kerb , 关于这个mod的文档资料和下载可以在官网找到. 在Ubuntu下不需要编译安装, 执行下面的apt-get搞定mod的安装. 安装后Apache的配置中会自动加载mod_auth_kerb.so, 不需要手工修改配置文件.

linux
# sudo apt-get install libapache2-mod-auth-kerb

2. 装好Mod_auth_kerb后, 我们来对Kerberos进行配置, 编辑/etc/krb5.conf, 这里建议将原配置文件备份(cp /etc/krb5.conf /etc/krb5_bak.conf), 然后清空原配置文件内容, 贴入如下配置信息并按实际需求进行相应修改(default_realm, kdc, example.com).
More

Starcraft2 Mouse Scheme (For Windows 7)

No Comments

Starcraft2 Mouse Scheme

sc2_mouse_scheme

下载地址 More

敢问路在何方?

2 Comments

媳妇产假休完了,这也意味着我要作出一个很重要的选择。

马上就要三十岁了,”上有老下有小“的形容曾经离我是那么的遥远,但现在用在我身上已经再合适不过了。感叹岁月无情的同时,我更想理清头绪,作出一个正确的抉择。为我的家人,为我爱的人。

仔细想想几年来的职场经历,似乎没有什么特别值得我骄傲的事情,所以有时我会问自己,我真的适合这样的环境吗?我不能确定,因为我不知道离开这样的环境以后我应该做些什么,外面的世界会更适合我吗,我不知道。不过我想,三十岁的时候尝试一下总比四十岁的时候再去尝试要容易一些吧。

有时我又想,身边那些比我优秀的人为什么没去尝试一下呢?他们承受着更大的工作压力和生活压力,却也心甘情愿的拿那点勉强过活的薪水吗?这让我实在想不通。

路在何方啊?谁能告诉我?

杯具,被Google给ban了

2 Comments

刚才写了个脚本,从google页面读取汇率,60秒更新一次,结果没更新几次就取不到数据了,开始也没想太多,但我回头再用google搜东西时杯具发生了,如下图…..

我还兴致勃勃的给旁边的同事看, 结果更悲剧, 他说他刚才google的时候也这情况, 不知原因……

额~~~~~~~~~~~~莫非公司内网都被影响了? 咳咳~~~~~低调处理~~~~~

googleban

下面是谷歌中国的截图

More

Older Entries Newer Entries