码迷,mamicode.com
首页 > Web开发 > 详细

php根据ip段以及子网掩码,判断某ip是否处于某子网下

时间:2015-04-13 16:10:04      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

    为了检测客户端ip是否位于指定的网络里(如防火墙过滤有时候需要用到这个技术),我们需要知道三个参数:
    1、客户端ip,假设符号是D
    2、该网络下的ip地址段,假设符号是N
    3、该网络下的子网掩码,假设符号是M
    那么,如果客户端ip处于该网络下,应该会满足:
    N==(D&M)
 
    文字解释就是,用客户端ip和子网掩码进行与操作,所得结果应该与该网络下的ip段相等。不过注意一个问题,上面的公式,是用二进制进行计算的,并不是我们常见的点分十进制的ip地址。也就是说,我们获得客户端ip后,应该把它转换为32位二进制数字再进行计算。
    代码如下:
function ip_binay($ip)
{
        $ip_array = explode(".",$ip);
        $t = ‘‘;
        foreach($ip_array as $v)
        {
                $tmp = decbin($v);
                $tmp_len = strlen(decbin($v));
                if($tmp_len < 8)
                        $t .= str_repeat( "0",(8 - $tmp_len) ).$tmp;
                else
                        $t .= $tmp;
        }
        return $t;
}
$server_ip = "0.0.0.0"; //地址段
$mask_ip = "0.0.0.0"; //子网掩码
 
$client_ip=‘192.168.1.11‘;//客户端ip
 
$D=ip_binay($client_ip);
$is_ip_in=0;
$M = ip_binay($mask_ip);
$temp = $D & $M;
$N = ip_binay( $server_ip );
if( $temp == $N ){
    $is_ip_in=1;
}
 
if($is_ip_in){
    echo "你的ip处于该网络下!";
}else{
    echo ‘NO‘;
}

 

php根据ip段以及子网掩码,判断某ip是否处于某子网下

标签:

原文地址:http://www.cnblogs.com/rnckty/p/4422210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!