/** * 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'; }
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; }
/** * 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'; }
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; }
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; }
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; }