Php 获取真实IP并与掩码进行比较
有个问题。以前,通过Php 获取真实IP并与掩码进行比较,php,Php,有个问题。以前,通过REMOTE\u ADDR,代码运行良好。我们决定安装DDOS保护。从这一刻起,我们将按照getUserIP()脚本的示例获得真正的IP,因为它返回代理IP。 但是为什么我的代码返回false,尽管在代码示例中,字符串稍微低一点,但却是100%相同的。 我做错了什么 <?php function getUserIP() { if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
REMOTE\u ADDR
,代码运行良好。我们决定安装DDOS保护。从这一刻起,我们将按照getUserIP()
脚本的示例获得真正的IP,因为它返回代理IP。
但是为什么我的代码返回false,尽管在代码示例中,字符串稍微低一点,但却是100%相同的。
我做错了什么
<?php
function getUserIP()
{
if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
$_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
}
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP))
{
$ip = $client;
}
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{
$ip = $forward;
}
else
{
$ip = $remote;
}
return $ip;
}
$real_ip = getUserIP();
echo $real_ip."<br>"; //my real IP from DDOS Protect == 109.237.13.17
function isAllowed($ip) {
global $link;
$whitelist = array('111.111.111.111', '109.237.13.*', '68.71.44.*');
if(in_array($ip, $whitelist)) {
return true;
}
else {
foreach($whitelist as $i){
$wildcardPos = strpos($i, "*");
if($wildcardPos !== false && substr($real_ip, 0, $wildcardPos) . "*" == $i)
return true;
}
}
return false;
}
echo isAllowed($real_ip) ? 'true' : 'false'."<br>"; // HERE IS FALSE
//FOR TEST ECHO
$whitelist = array('111.111.111.111', '109.237.13.*', '68.71.44.*');
if(in_array($ip, $whitelist)) {
echo "IP IN ARRAY == TRUE";
}
else {
foreach($whitelist as $i){
$wildcardPos = strpos($i, "*");
if($wildcardPos !== false && substr($real_ip, 0, $wildcardPos) . "*" == $i)
echo substr($real_ip, 0, $wildcardPos) . "*"." == ".$i."<br>"; // BUT HERE ALL IS TRUE
}
}
?>
在出口处:
109.237.13.17
假的
109.237.13.*==109.237.13.*
已修复:我添加了
global $real_ip;
内部是允许的
功能