Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../plugins/wordfenc.../modules/login-se.../classes/model
File: ip.php
<?php
[0] Fix | Delete
[1] Fix | Delete
namespace WordfenceLS;
[2] Fix | Delete
[3] Fix | Delete
class Model_IP {
[4] Fix | Delete
/**
[5] Fix | Delete
* Returns the human-readable representation of a packed binary IP address.
[6] Fix | Delete
*
[7] Fix | Delete
* @param string $ip
[8] Fix | Delete
* @return bool|string
[9] Fix | Delete
*/
[10] Fix | Delete
public static function inet_ntop($ip) {
[11] Fix | Delete
if (Model_Crypto::strlen($ip) == 16 && Model_Crypto::substr($ip, 0, 12) == "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff") {
[12] Fix | Delete
$ip = Model_Crypto::substr($ip, 12, 4);
[13] Fix | Delete
}
[14] Fix | Delete
[15] Fix | Delete
if (self::has_ipv6()) {
[16] Fix | Delete
return @inet_ntop($ip);
[17] Fix | Delete
}
[18] Fix | Delete
[19] Fix | Delete
// IPv4
[20] Fix | Delete
if (Model_Crypto::strlen($ip) === 4) {
[21] Fix | Delete
return ord($ip[0]) . '.' . ord($ip[1]) . '.' . ord($ip[2]) . '.' . ord($ip[3]);
[22] Fix | Delete
}
[23] Fix | Delete
[24] Fix | Delete
// IPv6
[25] Fix | Delete
if (Model_Crypto::strlen($ip) === 16) {
[26] Fix | Delete
// IPv4 mapped IPv6
[27] Fix | Delete
if (Model_Crypto::substr($ip, 0, 12) == "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff") {
[28] Fix | Delete
return "::ffff:" . ord($ip[12]) . '.' . ord($ip[13]) . '.' . ord($ip[14]) . '.' . ord($ip[15]);
[29] Fix | Delete
}
[30] Fix | Delete
[31] Fix | Delete
$hex = bin2hex($ip);
[32] Fix | Delete
$groups = str_split($hex, 4);
[33] Fix | Delete
$in_collapse = false;
[34] Fix | Delete
$done_collapse = false;
[35] Fix | Delete
foreach ($groups as $index => $group) {
[36] Fix | Delete
if ($group == '0000' && !$done_collapse) {
[37] Fix | Delete
if ($in_collapse) {
[38] Fix | Delete
$groups[$index] = '';
[39] Fix | Delete
continue;
[40] Fix | Delete
}
[41] Fix | Delete
$groups[$index] = ':';
[42] Fix | Delete
$in_collapse = true;
[43] Fix | Delete
continue;
[44] Fix | Delete
}
[45] Fix | Delete
if ($in_collapse) {
[46] Fix | Delete
$done_collapse = true;
[47] Fix | Delete
}
[48] Fix | Delete
$groups[$index] = ltrim($groups[$index], '0');
[49] Fix | Delete
if (strlen($groups[$index]) === 0) {
[50] Fix | Delete
$groups[$index] = '0';
[51] Fix | Delete
}
[52] Fix | Delete
}
[53] Fix | Delete
$ip = join(':', array_filter($groups, 'strlen'));
[54] Fix | Delete
$ip = str_replace(':::', '::', $ip);
[55] Fix | Delete
return $ip == ':' ? '::' : $ip;
[56] Fix | Delete
}
[57] Fix | Delete
[58] Fix | Delete
return false;
[59] Fix | Delete
}
[60] Fix | Delete
[61] Fix | Delete
/**
[62] Fix | Delete
* Returns the packed binary representation of an IP address from the human readable version.
[63] Fix | Delete
*
[64] Fix | Delete
* @param string $ip
[65] Fix | Delete
* @return string
[66] Fix | Delete
*/
[67] Fix | Delete
public static function inet_pton($ip) {
[68] Fix | Delete
if (self::has_ipv6()) {
[69] Fix | Delete
$pton = @inet_pton($ip);
[70] Fix | Delete
if ($pton === false) {
[71] Fix | Delete
return false;
[72] Fix | Delete
}
[73] Fix | Delete
}
[74] Fix | Delete
else {
[75] Fix | Delete
if (preg_match('/^(?:\d{1,3}(?:\.|$)){4}/', $ip)) { // IPv4
[76] Fix | Delete
$octets = explode('.', $ip);
[77] Fix | Delete
$pton = chr($octets[0]) . chr($octets[1]) . chr($octets[2]) . chr($octets[3]);
[78] Fix | Delete
}
[79] Fix | Delete
else if (preg_match('/^((?:[\da-f]{1,4}(?::|)){0,8})(::)?((?:[\da-f]{1,4}(?::|)){0,8})$/i', $ip)) { // IPv6
[80] Fix | Delete
if ($ip === '::') {
[81] Fix | Delete
$pton = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
[82] Fix | Delete
}
[83] Fix | Delete
else {
[84] Fix | Delete
$colon_count = substr_count($ip, ':');
[85] Fix | Delete
$dbl_colon_pos = strpos($ip, '::');
[86] Fix | Delete
if ($dbl_colon_pos !== false) {
[87] Fix | Delete
$ip = str_replace('::', str_repeat(':0000', (($dbl_colon_pos === 0 || $dbl_colon_pos === strlen($ip) - 2) ? 9 : 8) - $colon_count) . ':', $ip);
[88] Fix | Delete
$ip = trim($ip, ':');
[89] Fix | Delete
}
[90] Fix | Delete
[91] Fix | Delete
$ip_groups = explode(':', $ip);
[92] Fix | Delete
$ipv6_bin = '';
[93] Fix | Delete
foreach ($ip_groups as $ip_group) {
[94] Fix | Delete
$ipv6_bin .= pack('H*', str_pad($ip_group, 4, '0', STR_PAD_LEFT));
[95] Fix | Delete
}
[96] Fix | Delete
[97] Fix | Delete
if (Model_Crypto::strlen($ipv6_bin) == 16) {
[98] Fix | Delete
$pton = $ipv6_bin;
[99] Fix | Delete
}
[100] Fix | Delete
else {
[101] Fix | Delete
return false;
[102] Fix | Delete
}
[103] Fix | Delete
}
[104] Fix | Delete
}
[105] Fix | Delete
else if (preg_match('/^(?:\:(?:\:0{1,4}){0,4}\:|(?:0{1,4}\:){5})ffff\:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i', $ip, $matches)) { // IPv4 mapped IPv6
[106] Fix | Delete
$octets = explode('.', $matches[1]);
[107] Fix | Delete
$pton = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff" . chr($octets[0]) . chr($octets[1]) . chr($octets[2]) . chr($octets[3]);
[108] Fix | Delete
}
[109] Fix | Delete
else {
[110] Fix | Delete
return false;
[111] Fix | Delete
}
[112] Fix | Delete
}
[113] Fix | Delete
[114] Fix | Delete
$pton = str_pad($pton, 16, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00", STR_PAD_LEFT);
[115] Fix | Delete
return $pton;
[116] Fix | Delete
}
[117] Fix | Delete
[118] Fix | Delete
/**
[119] Fix | Delete
* Verify PHP was compiled with IPv6 support.
[120] Fix | Delete
*
[121] Fix | Delete
* Some hosts appear to not have inet_ntop, and others appear to have inet_ntop but are unable to process IPv6 addresses.
[122] Fix | Delete
*
[123] Fix | Delete
* @return bool
[124] Fix | Delete
*/
[125] Fix | Delete
public static function has_ipv6() {
[126] Fix | Delete
return defined('AF_INET6');
[127] Fix | Delete
}
[128] Fix | Delete
[129] Fix | Delete
/**
[130] Fix | Delete
* Expands a compressed printable representation of an IPv6 address.
[131] Fix | Delete
*
[132] Fix | Delete
* @param string $ip
[133] Fix | Delete
* @return string
[134] Fix | Delete
*/
[135] Fix | Delete
public static function expand_ipv6_address($ip) {
[136] Fix | Delete
$hex = bin2hex(self::inet_pton($ip));
[137] Fix | Delete
$ip = substr(preg_replace("/([a-f0-9]{4})/i", "$1:", $hex), 0, -1);
[138] Fix | Delete
return $ip;
[139] Fix | Delete
}
[140] Fix | Delete
[141] Fix | Delete
/**
[142] Fix | Delete
* Returns whether or not the IP is a valid format.
[143] Fix | Delete
*
[144] Fix | Delete
* @param string $ip
[145] Fix | Delete
* @return bool
[146] Fix | Delete
*/
[147] Fix | Delete
public static function is_valid_ip($ip) {
[148] Fix | Delete
return filter_var($ip, FILTER_VALIDATE_IP) !== false;
[149] Fix | Delete
}
[150] Fix | Delete
[151] Fix | Delete
/**
[152] Fix | Delete
* Returns whether or not the range is a valid CIDR range.
[153] Fix | Delete
*
[154] Fix | Delete
* @param string $range
[155] Fix | Delete
* @return bool
[156] Fix | Delete
*/
[157] Fix | Delete
public static function is_valid_cidr_range($range) {
[158] Fix | Delete
$components = explode('/', $range);
[159] Fix | Delete
if (count($components) != 2) { return false; }
[160] Fix | Delete
[161] Fix | Delete
list($ip, $prefix) = $components;
[162] Fix | Delete
if (!self::is_valid_ip($ip)) { return false; }
[163] Fix | Delete
[164] Fix | Delete
if (!preg_match('/^\d+$/', $prefix)) { return false; }
[165] Fix | Delete
[166] Fix | Delete
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
[167] Fix | Delete
if ($prefix < 0 || $prefix > 32) { return false; }
[168] Fix | Delete
}
[169] Fix | Delete
else {
[170] Fix | Delete
if ($prefix < 1 || $prefix > 128) { return false; }
[171] Fix | Delete
}
[172] Fix | Delete
[173] Fix | Delete
return true;
[174] Fix | Delete
}
[175] Fix | Delete
[176] Fix | Delete
/**
[177] Fix | Delete
* Returns whether or not the IP is in the IPv6-mapped-IPv4 format.
[178] Fix | Delete
*
[179] Fix | Delete
* @param string $ip
[180] Fix | Delete
* @return bool
[181] Fix | Delete
*/
[182] Fix | Delete
public static function is_ipv6_mapped_ipv4($ip) {
[183] Fix | Delete
return preg_match('/^(?:\:(?:\:0{1,4}){0,4}\:|(?:0{1,4}\:){5})ffff\:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/i', $ip) > 0;
[184] Fix | Delete
}
[185] Fix | Delete
}
[186] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function