123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- <?php
- defined('IS_INITPHP') || die('Access Denied!');
- class IpInit {
-
- public function get_ip() {
- static $realip = null;
- if (null !== $realip) {
- return $realip;
- }
- if (isset($_SERVER)) {
- if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
- $realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
- } else if (isset($_SERVER['HTTP_CLIENT_IP'])) {
- $realip = $_SERVER['HTTP_CLIENT_IP'];
- } else {
- $realip = $_SERVER['REMOTE_ADDR'];
- }
- } else {
- if (getenv('HTTP_X_FORWARDED_FOR')) {
- $realip = getenv('HTTP_X_FORWARDED_FOR');
- } else if (getenv('HTTP_CLIENT_IP')) {
- $realip = getenv('HTTP_CLIENT_IP');
- } else {
- $realip = getenv('REMOTE_ADDR');
- }
- }
-
- if (false !== strpos($realip, ',')) {
- $realip = reset(explode(',', $realip));
- }
-
- $realip = filter_var($realip, FILTER_VALIDATE_IP, null);
- if (false === $realip) {
- return '0.0.0.0';
- }
- return $realip;
- }
-
- public function ip_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;
- }
- }
- }
|