From: Nicolas Boisselier Date: Fri, 24 Jun 2016 16:18:15 +0000 (+0100) Subject: cidr_range X-Git-Url: https://git.nbdom.net/?a=commitdiff_plain;h=1d31b8a867dd4c02d04255af178928542ccd6e3d;p=nb.git cidr_range --- diff --git a/lib/php/nb.php b/lib/php/nb.php index bc0171e0..8e9d0cd4 100644 --- a/lib/php/nb.php +++ b/lib/php/nb.php @@ -509,6 +509,26 @@ class NB { return self::object2array($rows); return $class->out2(self::object2array($rows),(is_scalar($rows) ? $name : array())); } + + public static function cidr_range( $cidr, $chkip=null ) { + // Assign IP / mask + if (empty($cidr)) return false; + list($ip,$mask) = explode("/",$cidr); + + // Sanitize IP + $ip1 = preg_replace( '_(\d+\.\d+\.\d+\.\d+).*$_', '$1', "$ip.0.0.0" ); + + // Calculate range + $ip2 = long2ip( ip2long( $ip1 ) - 1 + ( 1 << ( 32 - $mask) ) ); + + // are we cidr range cheking? + if ( $chkip != null && ! filter_var( $chkip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false ) { + return ip2long( $ip1 ) <= ip2long( $chkip ) && ip2long( $ip2 ) >= ip2long( $chkip ) ? true : false; + } else { + return "$ip1 - $ip2"; + } + } + } # < Class #die(self::ext2mime('csv')); ?>