1. 云栖社区>
  2. PHP教程>
  3. 正文

PHP 判断指定IP,是否在一个IP段里

作者:用户 来源:互联网 时间:2017-12-01 14:05:55

段里

PHP 判断指定IP,是否在一个IP段里 - 摘要: 本文讲的是PHP 判断指定IP,是否在一个IP段里, PHP 判断指定IP,是否在一个IP段里,有需要的朋友可以参考下。 先把 IP段的 IP转二进制 (192.168.1.1)子网掩码 转为二进制 (24)IP段的二进制 和 子网掩码二进制 按位与 (PHP 位与符号 &

PHP 判断指定IP,是否在一个IP段里,有需要的朋友可以参考下。




先把 IP段的 IP转二进制 (192.168.1.1)
子网掩码 转为二进制 (24)

IP段的二进制 和 子网掩码二进制 按位与 (PHP 位与符号 &)
得到结果保存起来;

把要查询的IP地址 转二进制 然后和 上面的 子网掩码二进制 按位与

得到的结果 和 上面 位与结果 对比,如果相同 就是 IP在此IP段内。

//$ip   要查询的IP地址//$network  IP 段  例: 192.168.1.1/24 function ip_in_network2($ip, $network){    $s = explode('/', $network);    $iper = decbin(ip2long($s['0']));    $maskBin = mask2binary($s['1']);    $ipnet = ($iper & $maskBin);    $cip = decbin(ip2long($ip));    $cipnet = ($cip & $maskBin);    if($ipnet == $cipnet){return true;    }else{return false;    }}//两位数 子网掩码 转 二进制function mask2binary($mask){    if ($mask > 32) {$this->error('错误的子网掩码。');    }    $str = array();    for ($i=0; $i < $mask; $i++) {$str['0']  .= '1';    }    $we = 32-$mask;    $str2 = array();    for ($i=0; $i < $we; $i++) {$str2['0']  .= '0';    }    $bin = $str['0'].$str2['0'];    return ($bin);   }

这是网上转载的,也可以使用。

####################################################别人写的方法:/*    判断指定IP 是否在一个IP段里    $ip     指定IP    $net    IP段  例:192.168.1.255/24*/function ip_in_network($ip, $network){    $ip = (double) (sprintf("%u", ip2long($ip)));    $s = explode('/', $network);    $network_start = (double) (sprintf("%u", ip2long($s[0])));    $network_len = pow(2, 32 - $s[1]);    $network_end = $network_start + $network_len - 1;     if ($ip >= $network_start && $ip <= $network_end)    {return true;    }    return false;}


版权声明:本文为博主原创文章,未经博主允许不得转载。业务联系QQ:727532459

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索段里 ,以便于您获取更多的相关知识。