अपडेट : CloudFlare ने mod_cloudflare
अपाचे के लिए एक मॉड्यूल जारी किया है , यह मॉड्यूल क्लाउडफेयर द्वारा एक्सेस किए जाने के बजाय वास्तविक विज़िटर आईपी एड्रेस को लॉग इन और प्रदर्शित करेगा! https://www.cloudflare.com/resources-downloads#mod_cloudflare (द्वारा उत्तर: olimortimer )
यदि आपके पास अपाचे रनटाइम तक पहुंच नहीं है, तो आप नीचे दी गई स्क्रिप्ट का उपयोग कर सकते हैं, यह आपको यह जांचने की अनुमति देगा कि क्या कनेक्शन क्लाउडफेयर के माध्यम से था और उपयोगकर्ताओं को आईपी मिला।
मैं अपना उत्तर फिर से लिख रहा हूँ जिसका उपयोग मैंने एक और प्रश्न के लिए किया था " CloudFlare DNS / direct IP आइडेंटिफ़ायर "
Cloudflare के ips को सार्वजनिक रूप से संग्रहीत किया जाता है ताकि आप उन्हें यहां देख सकें, फिर जांचें कि क्या ipflflare से है (यह हमें http हेडर से वास्तविक आईपी प्राप्त करने की अनुमति देगा HTTP_CF_CONNECTING_IP
)।
यदि आप सभी गैर cf कनेक्शन या इसके विपरीत को निष्क्रिय करने के लिए इसका उपयोग कर रहे हैं, तो मैं आपको एक एकल php स्क्रिप्ट फ़ाइल रखने की सलाह देता हूं, जिसे हर दूसरी स्क्रिप्ट जैसे कि common.php या pagestart.php आदि से पहले कॉल किया जाता है।
function ip_in_range($ip, $range) {
if (strpos($range, '/') == false)
$range .= '/32';
list($range, $netmask) = explode('/', $range, 2);
$range_decimal = ip2long($range);
$ip_decimal = ip2long($ip);
$wildcard_decimal = pow(2, (32 - $netmask)) - 1;
$netmask_decimal = ~ $wildcard_decimal;
return (($ip_decimal & $netmask_decimal) == ($range_decimal & $netmask_decimal));
}
function _cloudflare_CheckIP($ip) {
$cf_ips = array(
'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',
);
$is_cf_ip = false;
foreach ($cf_ips as $cf_ip) {
if (ip_in_range($ip, $cf_ip)) {
$is_cf_ip = true;
break;
}
} return $is_cf_ip;
}
function _cloudflare_Requests_Check() {
$flag = true;
if(!isset($_SERVER['HTTP_CF_CONNECTING_IP'])) $flag = false;
if(!isset($_SERVER['HTTP_CF_IPCOUNTRY'])) $flag = false;
if(!isset($_SERVER['HTTP_CF_RAY'])) $flag = false;
if(!isset($_SERVER['HTTP_CF_VISITOR'])) $flag = false;
return $flag;
}
function isCloudflare() {
$ipCheck = _cloudflare_CheckIP($_SERVER['REMOTE_ADDR']);
$requestCheck = _cloudflare_Requests_Check();
return ($ipCheck && $requestCheck);
}
function getRequestIP() {
$check = isCloudflare();
if($check) {
return $_SERVER['HTTP_CF_CONNECTING_IP'];
} else {
return $_SERVER['REMOTE_ADDR'];
}
}
स्क्रिप्ट का उपयोग करने के लिए यह काफी सरल है:
$ip = getRequestIP();
$cf = isCloudflare();
if($cf) echo "Connection is through cloudflare: <br>";
else echo "Connection is not through cloudflare: <br>";
echo "Your actual ip address is: ". $ip;
echo "The server remote address header is: ". $_SERVER['REMOTE_ADDR'];
यह स्क्रिप्ट आपको वास्तविक आईपी पता दिखाएगी और यदि अनुरोध सीएफ है या नहीं!