示例#1
0
 public function check($ip, $list)
 {
     $v4 = !nforum_is_ipv6($ip);
     foreach ((array) $list as $v) {
         if (!is_string($v[0])) {
             continue;
         }
         $tv4 = strpos($v[0], ':') === false;
         if ($v4 && $tv4) {
             if (mask_equal(ip2long($ip), ip2long($v[0]), $v[1])) {
                 return $v[2];
             }
         } else {
             if (!$v4 && !$tv4) {
                 $arr1 = ipv62long($ip);
                 $arr2 = ipv62long($v[0]);
                 if ($v[1] > MASK_NUM_V6) {
                     if (!mask_equal_v6($arr1[1], $arr2[1], $v[1] - MASK_NUM_V6)) {
                         continue;
                     }
                 }
                 $mask = $v[1] > MASK_NUM_V6 ? MASK_NUM_V6 : $v[1];
                 if (mask_equal_v6($arr1[0], $arr2[0], $mask)) {
                     return $v[2];
                 }
             }
         }
     }
     return true;
 }
示例#2
0
文件: iplib.php 项目: tilitala/nForum
/**
 * test whether $ip1 and $ip2 will include each other return the wide one
 * @param $ip1(array("ip", "mask")) number of ip
 * @param $ip2(array("ip", "mask")) number of ip
 * @param $type(int) max number of mask MASK_NUM_V4 default
 * @return the wide one or false
 * @author xw
 */
function ip_conflict($ip1, $ip2, $type = MASK_NUM_V4)
{
    /*{{{*/
    if ($ip1['mask'] > $ip2['mask']) {
        $mask = $ip2['mask'];
        if (mask_equal($ip1['ip'], $ip2['ip'], $mask, $type)) {
            return $ip1;
        }
    } else {
        if ($ip1['mask'] < $ip2['mask']) {
            $mask = $ip1['mask'];
            if (mask_equal($ip1['ip'], $ip2['ip'], $mask, $type)) {
                return $ip2;
            }
        } else {
            if ($ip1['ip'] == $ip2['ip']) {
                return $ip1;
            }
        }
    }
    return false;
}