1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
// Check for proxyserver
phpAds_proxyLookup();
// Reverse lookup
phpAds_reverseLookup();
/*********************************************************/
/* Do the proxy lookup */
/*********************************************************/
function phpAds_proxyLookup()
{
global $phpAds_config;
if (!$phpAds_config['proxy_lookup'])
return;
$proxy = false;
if (isset ($_SERVER['HTTP_VIA']) && $_SERVER['HTTP_VIA'] != '') $proxy = true;
if (isset ($_SERVER['REMOTE_HOST']))
{
if (is_int (strpos ($_SERVER['REMOTE_HOST'], 'proxy'))) $proxy = true;
if (is_int (strpos ($_SERVER['REMOTE_HOST'], 'cache'))) $proxy = true;
if (is_int (strpos ($_SERVER['REMOTE_HOST'], 'inktomi'))) $proxy = true;
}
if ($proxy)
{
$IP = '';
// Overwrite host address if a suitable header is found
if (isset($_SERVER['HTTP_FORWARDED']) && $_SERVER['HTTP_FORWARDED'] != '') $IP = $_SERVER['HTTP_FORWARDED'];
if (isset($_SERVER['HTTP_FORWARDED_FOR']) && $_SERVER['HTTP_FORWARDED_FOR'] != '') $IP = $_SERVER['HTTP_FORWARDED_FOR'];
if (isset($_SERVER['HTTP_X_FORWARDED']) && $_SERVER['HTTP_X_FORWARDED'] != '') $IP = $_SERVER['HTTP_X_FORWARDED'];
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] != '') $IP = $_SERVER['HTTP_X_FORWARDED_FOR'];
if (isset($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP'] != '') $IP = $_SERVER['HTTP_CLIENT_IP'];
// Get last item from list
$IP = explode (',', $IP);
$IP = trim($IP[count($IP) - 1]);
if ($IP && $IP != 'unknown' && !phpAds_PrivateSubnet($IP))
{
$_SERVER['REMOTE_ADDR'] = $IP;
$_SERVER['REMOTE_HOST'] = '';
}
}
}
/*********************************************************/
/* Do the reverse lookup */
/*********************************************************/
function phpAds_reverseLookup()
{
global $phpAds_config;
if (!isset($_SERVER['REMOTE_HOST']) || $_SERVER['REMOTE_HOST'] == '')
{
if ($phpAds_config['reverse_lookup'])
$_SERVER['REMOTE_HOST'] = @gethostbyaddr ($_SERVER['REMOTE_ADDR']);
else
$_SERVER['REMOTE_HOST'] = $_SERVER['REMOTE_ADDR'];
}
}
/*********************************************************/
/* Match an IP address against a subnet */
/*********************************************************/
function phpAds_matchSubnet($ip, $net, $mask)
{
if (!is_integer($ip)) $ip = ip2long($ip);
$net = ip2long($net);
if (!$ip || !$net)
return false;
if (is_integer($mask))
{
// Netmask notation x.x.x.x/y used
if ($mask > 32 || $mask <= 0)
return false;
elseif ($mask == 32)
$mask = ~0;
else
$mask = ~((1 << (32 - $mask)) - 1);
}
elseif (!($mask = ip2long($mask)))
return false;
return ($ip & $mask) == ($net & $mask) ? true : false;
}
/*********************************************************/
/* Check if an IP address is not publicly routable */
/*********************************************************/
function phpAds_PrivateSubnet($ip)
{
$ip = ip2long($ip);
if (!$ip) return false;
return (phpAds_matchSubnet($ip, '10.0.0.0', 8) ||
phpAds_matchSubnet($ip, '172.16.0.0', 12) ||
phpAds_matchSubnet($ip, '192.168.0.0', 16) ||
phpAds_matchSubnet($ip, '127.0.0.0', 24)
);
} |
Partager