Example #1
0
/**
 * nv_getCountry_from_file()
 *
 * @param string $ip
 * @return
 */
function nv_getCountry_from_file($ip)
{
    global $countries;
    if (preg_match('/^([0-9]{1,3}+)\\.([0-9]{1,3}+)\\.([0-9]{1,3}+)\\.([0-9]{1,3}+)$/', $ip, $numbers)) {
        $code = $numbers[1] * 16777216 + $numbers[2] * 65536 + $numbers[3] * 256 + $numbers[4];
        $ranges = array();
        include NV_ROOTDIR . '/' . NV_IP_DIR . '/' . $numbers[1] . '.php';
        if (!empty($ranges)) {
            foreach ($ranges as $key => $value) {
                if ($key <= $code and $value[0] >= $code) {
                    return $value[1];
                }
            }
        }
    } else {
        $numbers = explode(':', $ip);
        if (file_exists(NV_ROOTDIR . '/' . NV_IP_DIR . '6/' . $numbers[0] . '.php')) {
            $ip = inet_pton($ip);
            $binaryip = inet_to_bits($ip);
            $ranges = array();
            include NV_ROOTDIR . '/' . NV_IP_DIR . '6/' . $numbers[0] . '.php';
            foreach ($ranges as $cidrnet => $country) {
                list($net, $maskbits) = explode('/', $cidrnet);
                $net = inet_pton($net);
                $binarynet = inet_to_bits($net);
                $ip_net_bits = substr($binaryip, 0, $maskbits);
                $net_bits = substr($binarynet, 0, $maskbits);
                if ($ip_net_bits === $net_bits) {
                    return $country;
                }
            }
        }
    }
    return 'ZZ';
}
Example #2
0
function ipCIDRCheck6($ip, $cidrnet)
{
    //$ip='21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A';
    //$cidrnet='21DA:00D3:0000:2F3B::/64';
    $ip = inet_pton($ip);
    $binaryip = inet_to_bits($ip);
    list($net, $maskbits) = explode('/', $cidrnet);
    $net = inet_pton($net);
    $binarynet = inet_to_bits($net);
    $ip_net_bits = substr($binaryip, 0, $maskbits);
    $net_bits = substr($binarynet, 0, $maskbits);
    return $ip_net_bits === $net_bits;
}
/**
 * Check if IPv6 address is in CIDR block
 * 
 * @param string $ip
 * @param string $cidr
 * @return boolean
 */
function ipv6_in_cidr($ip, $cidr)
{
    $inetIp = inet_pton($ip);
    $binaryIp = inet_to_bits($inetIp);
    if (strpos($cidr, '/') === false) {
        $net = $cidr;
        $mask = $cidr === '::' ? 0 : substr_count(rtrim($cidr, ':'), ':') * 16;
    } else {
        list($net, $mask) = explode('/', $cidr);
    }
    $inetNet = inet_pton($net);
    $binaryNet = inet_to_bits($inetNet);
    $ipNetBits = substr($binaryIp, 0, $mask);
    $netBits = substr($binaryNet, 0, $mask);
    return $ipNetBits === $netBits;
}
Example #4
0
/**
 * nv_getCountry_from_file()
 *
 * @param string $ip
 * @return
 */
function nv_getCountry_from_file($ip)
{
    global $countries;
    if (preg_match('#^(?:(?:\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(?:\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$#', $ip)) {
        $numbers = preg_split('/\\./', $ip);
        $code = $numbers[0] * 16777216 + $numbers[1] * 65536 + $numbers[2] * 256 + $numbers[3];
        $ranges = array();
        include NV_ROOTDIR . '/' . NV_DATADIR . '/ip_files/' . $numbers[0] . '.php';
        if (!empty($ranges)) {
            foreach ($ranges as $key => $value) {
                if ($key <= $code and $value[0] >= $code) {
                    return $value[1];
                }
            }
        }
    } else {
        $numbers = explode(':', $ip);
        if (file_exists(NV_ROOTDIR . '/' . NV_DATADIR . '/ip6_files/' . $numbers[0] . '.php')) {
            $ip = inet_pton($ip);
            $binaryip = inet_to_bits($ip);
            $ranges = array();
            include NV_ROOTDIR . '/' . NV_DATADIR . '/ip6_files/' . $numbers[0] . '.php';
            foreach ($ranges as $cidrnet => $country) {
                list($net, $maskbits) = explode('/', $cidrnet);
                $net = inet_pton($net);
                $binarynet = inet_to_bits($net);
                $ip_net_bits = substr($binaryip, 0, $maskbits);
                $net_bits = substr($binarynet, 0, $maskbits);
                if ($ip_net_bits === $net_bits) {
                    return $country;
                }
            }
        }
    }
    return 'ZZ';
}
Example #5
0
function matchCIDRv6($addr, $cidr)
{
    list($net, $mask) = explode('/', $cidr);
    $ip = inet_pton($addr);
    $binaryip = inet_to_bits($ip);
    $net = inet_pton($net);
    $binarynet = inet_to_bits($net);
    $ip_net_bits = substr($binaryip, 0, $mask);
    $net_bits = substr($binarynet, 0, $mask);
    if ($ip_net_bits !== $net_bits) {
        return false;
    }
    return true;
}
Example #6
0
function ip_v6_cidr_match($ip, $range)
{
    $ip = inet_pton($ip);
    $binaryip = inet_to_bits($ip);
    list($net, $maskbits) = explode('/', $range);
    $net = inet_pton($net);
    $binarynet = inet_to_bits($net);
    $ip_net_bits = substr($binaryip, 0, $maskbits);
    $net_bits = substr($binarynet, 0, $maskbits);
    return $ip_net_bits == $net_bits;
}
Example #7
0
function in_subnet_ipv6($ip, $array)
{
    if (!$ip) {
        return false;
    }
    if (!$array) {
        return false;
    }
    if (!is_array($array)) {
        //echo "Array is not array.\n";
        return false;
    }
    foreach ($array as $cidrnet) {
        if (!$cidrnet) {
            return false;
        }
        // echo "Looping through $cidrnet\n";
        $myip = inet_pton($ip);
        $binaryip = inet_to_bits($myip);
        list($net, $maskbits) = explode('/', $cidrnet);
        $net = inet_pton($net);
        $binarynet = inet_to_bits($net);
        $ip_net_bits = substr($binaryip, 0, $maskbits);
        $net_bits = substr($binarynet, 0, $maskbits);
        if ($ip_net_bits === $net_bits) {
            // echo "Found $ip in $cidrnet\n";
            return true;
            /* in subnet */
        }
    }
    return false;
}