Send statistics now check for IPv6 and send private network status as a boolean

git-svn-id: file:///svn/phpbb/branches/phpBB-3_0_0@10370 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
Nils Adermann 2009-12-23 02:53:56 +00:00
parent 04945c5432
commit 9ad40c8821
2 changed files with 45 additions and 10 deletions

View file

@ -130,6 +130,7 @@
<li>[Change] Alter ACP user quick tools interface to reduce confusion with the delete operation.</li>
<li>[Change] Remove item limit from &quot;All forums&quot; feed.</li>
<li>[Change] &quot;All topics&quot; feed now returns newest board topics.</li>
<li>[Change] Send statistics now check for IPv6 and send private network status as a boolean.</li>
</ul>
<a name="v305"></a><h3>1.ii. Changes since 3.0.5</h3>

View file

@ -162,7 +162,28 @@ class phpbb_questionnaire_system_data_provider
$server_address = $_SERVER['LOCAL_ADDR'];
}
$ip_address_ary = explode('.', $server_address);
return array(
'os' => PHP_OS,
'httpd' => $_SERVER['SERVER_SOFTWARE'],
// we don't want the real IP address (for privacy policy reasons) but only
// a network address to see whether your installation is running on a private or public network.
'private_ip' => is_private_ip($server_address),
'ipv6' => strpos($server_address, ':') !== false,
);
}
/**
* Checks whether the given IP is in a private network.
*
* @param string $ip IP in v4 dot-decimal or v6 hex format
* @return bool true if the IP is from a private network, else false
*/
function is_private_ip($ip)
{
// IPv4
if (strpos($ip, ':') === false)
{
$ip_address_ary = explode('.', $ip);
// build ip
if (!isset($ip_address_ary[0]) || !isset($ip_address_ary[1]))
@ -170,17 +191,30 @@ class phpbb_questionnaire_system_data_provider
$ip_address_ary = explode('.', '0.0.0.0');
}
return array(
'os' => PHP_OS,
'httpd' => $_SERVER['SERVER_SOFTWARE'],
// we don't want the real IP address (for privacy policy reasons) but only
// a network address to see whether your installation is running on a private or public network.
// IANA reserved addresses for private networks (RFC 1918) are:
// - 10.0.0.0/8
// - 172.16.0.0/12
// - 192.168.0.0/16
'ip' => $ip_address_ary[0] . '.' . $ip_address_ary[1] . '.XXX.YYY',
);
if ($ip_address_ary[0] == '10' ||
($ip_address_ary[0] == '172' && intval($ip_address_ary[1]) > 15 && intval($ip_address_ary[1]) < 32) ||
($ip_address_ary[0] == '192' && $ip_address_ary[1] == '168') ||
($ip_address_ary[0] == '192' && $ip_address_ary[1] == '168'))
{
return true;
}
}
// IPv6
else
{
// unique local unicast
$prefix = substr($ip, 0, 2);
if ($prefix == 'fc' || $prefix == 'fd')
{
return true;
}
}
return false;
}
}