首页
版块
教程
交流
话题
官网
搜索
登录
注册
首页
>
服务器运维
>
PHP搅拌机
>
php根据ip段子网掩码判断某ip是否处于某子网下
回复
« 返回列表
车神一小凯
U途骑士
UID
34914
粉丝
1
关注
0
发帖数
1
铜币
12枚
威望
12点
贡献
0点
加关注
写私信
阅读:
1901
回复:
0
php根据ip段子网掩码判断某ip是否处于某子网下
楼主
#
更多
只看楼主
倒序阅读
发布于:2014-04-24 10:38
保存
为了检测客户端ip是否位于指定的网络里(如防火墙过滤有时候需要用到这个技术),我们需要知道三个参数:
1、客户端ip,假设符号是D
2、该网络下的ip地址段,假设符号是N
3、该网络下的子网掩码,假设符号是M
那么,如果客户端ip处于该网络下,应该会满足:
N==(D&M)
文字解释就是,用客户端ip和子网掩码进行与操作,所得结果应该与该网络下的ip段相等。不过注意一个问题,上面的公式,是用二进制进行计算的,并不是我们常见的点分十进制的ip地址。也就是说,我们获得客户端ip后,应该把它转换为32位二进制数字再进行计算。
php代码如下:
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';
}
喜欢
28
评分
0
最新喜欢:
回复
发帖
回复
« 返回列表
普通帖
您需要登录后才可以回帖,
登录
或者
注册
返回顶部
关闭
最新喜欢