Получение реального ip адреса посетителя при использовании CloudFlare
Список сетей с которых проксирует CloudFlare https://www.cloudflare.com/ips
<?php $cfIpRanges = [ '199.27.128.0/21', '173.245.48.0/20', '103.21.244.0/22', '103.22.200.0/22', '103.31.4.0/22', '141.101.64.0/18', '108.162.192.0/18', '190.93.240.0/20', '188.114.96.0/20', '197.234.240.0/22', '198.41.128.0/17', '162.158.0.0/15', '104.16.0.0/12', ]; $cidr_match = function ($ip, $range) { list ($subnet, $bits) = explode('/', $range); $ip = ip2long($ip); $subnet = ip2long($subnet); $mask = -1 << (32 - $bits); $subnet &= $mask; return ($ip & $mask) == $subnet; }; if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { foreach ($cfIpRanges as $cfIpRange) { if ($cidr_match($_SERVER['REMOTE_ADDR'], $cfIpRange)) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP']; break; } } } ?>
11 января 2015, 12:48