File "ip_in_range.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/wp-rocket/inc/vendors/ip_in_range.php
File
size: 4.19 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
function rocket_decbin32($dec)
{
return str_pad(decbin($dec), 32, '0', STR_PAD_LEFT);
}
function rocket_ipv4_in_range($ip, $range)
{
if (strpos($range, '/') !== false) {
list($range, $netmask) = explode('/', $range, 2);
if (strpos($netmask, '.') !== false) {
$netmask = str_replace('*', '0', $netmask);
$netmask_dec = ip2long($netmask);
return (ip2long($ip) & $netmask_dec) == (ip2long($range) & $netmask_dec);
} else {
$x = explode('.', $range);
while (count($x) < 4) {
$x[] = '0';
}
list($a, $b, $c, $d) = $x;
$range = sprintf("%u.%u.%u.%u", empty($a) ? '0' : $a, empty($b) ? '0' : $b, empty($c) ? '0' : $c, empty($d) ? '0' : $d);
$range_dec = ip2long($range);
$ip_dec = ip2long($ip);
$wildcard_dec = pow(2, 32 - $netmask) - 1;
$netmask_dec = ~$wildcard_dec;
return ($ip_dec & $netmask_dec) == ($range_dec & $netmask_dec);
}
} else {
if (strpos($range, '*') !== false) {
$lower = str_replace('*', '0', $range);
$upper = str_replace('*', '255', $range);
$range = "{$lower}-{$upper}";
}
if (strpos($range, '-') !== false) {
list($lower, $upper) = explode('-', $range, 2);
$lower_dec = (float) sprintf("%u", ip2long($lower));
$upper_dec = (float) sprintf("%u", ip2long($upper));
$ip_dec = (float) sprintf("%u", ip2long($ip));
return $ip_dec >= $lower_dec && $ip_dec <= $upper_dec;
}
return false;
}
}
function rocket_ip2long6($ip)
{
if (substr_count($ip, '::')) {
$ip = str_replace('::', str_repeat(':0000', 8 - substr_count($ip, ':')) . ':', $ip);
}
$ip = explode(':', $ip);
$r_ip = '';
foreach ($ip as $v) {
$r_ip .= str_pad(base_convert(preg_replace("/[^0-9a-fA-F]/", "", $v), 16, 2), 16, 0, STR_PAD_LEFT);
}
return base_convert($r_ip, 2, 10);
}
function get_rocket_ipv6_full($ip)
{
$pieces = explode("/", $ip, 2);
$left_piece = $pieces[0];
$right_piece = null;
if (count($pieces) > 1) {
$right_piece = $pieces[1];
}
$ip_pieces = explode("::", $left_piece, 2);
$main_ip_piece = $ip_pieces[0];
$last_ip_piece = null;
if (count($ip_pieces) > 1) {
$last_ip_piece = $ip_pieces[1];
}
$main_ip_pieces = explode(":", $main_ip_piece);
foreach ($main_ip_pieces as $key => $val) {
$main_ip_pieces[$key] = str_pad($main_ip_pieces[$key], 4, "0", STR_PAD_LEFT);
}
$last_piece = "";
$size = count($main_ip_pieces);
if (trim($last_ip_piece) != "") {
$last_piece = str_pad($last_ip_piece, 4, "0", STR_PAD_LEFT);
for ($i = $size; $i < 7; $i++) {
$main_ip_pieces[$i] = "0000";
}
$main_ip_pieces[7] = $last_piece;
} else {
for ($i = $size; $i < 8; $i++) {
$main_ip_pieces[$i] = "0000";
}
}
$final_ip = implode(":", $main_ip_pieces);
return rocket_ip2long6($final_ip);
}
function rocket_ipv6_in_range($ip, $range_ip)
{
$pieces = explode("/", $range_ip, 2);
$left_piece = $pieces[0];
$right_piece = $pieces[1];
$ip_pieces = explode("::", $left_piece, 2);
$main_ip_piece = $ip_pieces[0];
$last_ip_piece = $ip_pieces[1];
$main_ip_pieces = explode(":", $main_ip_piece);
foreach ($main_ip_pieces as $key => $val) {
$main_ip_pieces[$key] = str_pad($main_ip_pieces[$key], 4, "0", STR_PAD_LEFT);
}
$first = $main_ip_pieces;
$last = $main_ip_pieces;
$last_piece = "";
$size = count($main_ip_pieces);
if (trim($last_ip_piece) != "") {
$last_piece = str_pad($last_ip_piece, 4, "0", STR_PAD_LEFT);
for ($i = $size; $i < 7; $i++) {
$first[$i] = "0000";
$last[$i] = "ffff";
}
$main_ip_pieces[7] = $last_piece;
} else {
for ($i = $size; $i < 8; $i++) {
$first[$i] = "0000";
$last[$i] = "ffff";
}
}
$first = rocket_ip2long6(implode(":", $first));
$last = rocket_ip2long6(implode(":", $last));
$in_range = $ip >= $first && $ip <= $last;
return $in_range;
}