filtros - Filtrado IP de PHP
filtros wordpress (3)
Quiero permitir a los usuarios filtrar su inicio de sesión según su dirección IP (una nueva configuración en las preferencias de usuario que implementaré).
por lo tanto, si un usuario con un inicio de sesión de ip específico y no hay restricción, el inicio de sesión es exitoso.
en cualquier otro caso yo estaba pensando esto
si el usuario elige su IP completa como 67.31.85.47 y tiene esta IP, entonces el inicio de sesión es bueno si el usuario elige 67.31.85. * y tiene esta IP, entonces el inicio de sesión es bueno si un usuario elige 67.31. . y tiene esta IP, entonces el inicio de sesión es bueno si un usuario elige 67 .. . * y tiene esta IP, el inicio de sesión es bueno en cualquier otro caso, no es válido
El usuario puede elegir hasta 5 restricciones de IP. p.ej:
67.31.*.*
167.77.47.*
62.11.28.28
25.57.*.*
169.*.*.*
Estaba pensando en quitar la IP usando explotar y luego compararlo con todas las restricciones que configuró. esto puede ser lento ya que tengo que verificar 5 veces * 4 (4 = IP explotó en el punto)
¿Hay una manera más rápida de hacerlo? Gracias
Tal vez esta idea te ayude:
<?php
$ip_restrict = "67.31.*.*
167.77.47.*
62.11.28.28
25.57.*.*
169.*.*.*";
$ip_restrict = array_flip(explode("/n", $ip_restrict));
$ip = preg_match("!([0-9]+)/.([0-9]+)/.([0-9]+)/.([0-9]+)!", $_SERVER[''REMOTE_ADDR''], $ip_match);
$ip_in_blacklist = false;
$ip_check_1 = $ip_match[1] . ''.*.*.*'';
$ip_check_2 = $ip_match[1] . ''.'' . $ip_match[2] . ''.*.*'';
$ip_check_3 = $ip_match[1] . ''.'' . $ip_match[2] . ''.'' . $ip_match[3] . ''.*'';
$ip_check_4 = $ip_match[1] . ''.'' . $ip_match[2] . ''.'' . $ip_match[3] . ''.'' . $ip_match[4];
if (isset($ip_restrict[$ip_check_1]) || isset($ip_restrict[$ip_check_2]) || isset($ip_restrict[$ip_check_3]) || isset($ip_restrict[$ip_check_4])) {
$ip_in_blacklist = true;
}
var_dump($ip_in_blacklist);
;
$auth_ip=array();
$client_ip=array();
$client_ip=explode(".", $_SERVER[''REMOTE_ADDR'']);
$auth_ip=explode("/n", $patner_name_id[0][''client_ip'']);
$j=0;
$flag=0;
foreach ($auth_ip as $value) {
$i=0;
$value=explode(".", $value);
foreach ($value as $valueip) {
if($valueip!="*") {
if($valueip!=$client_ip[$i]){
$flag=1;
break;
}
$i++;
}
else {
$i++;
continue;
}
}
}
if($flag==1){
header("Location:".$default_company);
exit;
}
<?php
function testIP($ip) {
if($ip == ''*'' || $ip == ''*.*.*.*'') {
return TRUE;
}
if($_SERVER[''REMOTE_ADDR''] == $ip) {
return TRUE;
}
$mask = str_replace(''.*'', '''', $ip);
return strpos($_SERVER[''REMOTE_ADDR''], $mask) === 0;
}
$_SERVER[''REMOTE_ADDR''] = ''70.69.68.67'';
$ip = ''1.11.1.*'';
echo "Is $ip good: "; var_dump(testIP($ip));
$ip = ''2.34.9.1'';
echo "Is $ip good: "; var_dump(testIP($ip));
$ip = ''70.11.*.*'';
echo "Is $ip good: "; var_dump(testIP($ip));
$ip = ''70.69.68.*'';
echo "Is $ip good: "; var_dump(testIP($ip));
$ip = ''70.69.*.*'';
echo "Is $ip good: "; var_dump(testIP($ip));
$ip = ''70.*.*.*'';
echo "Is $ip good: "; var_dump(testIP($ip));
$ip = ''*.*.*.*'';
echo "Is $ip good: "; var_dump(testIP($ip));
$ip = ''*'';
echo "Is $ip good: "; var_dump(testIP($ip));
saldrá:
Is 1.11.1.* good: bool(false)
Is 2.34.9.1 good: bool(false)
Is 70.11.*.* good: bool(false)
Is 70.69.68.* good: bool(true)
Is 70.69.*.* good: bool(true)
Is 70.*.*.* good: bool(true)
Is *.*.*.* good: bool(true)
Is * good: bool(true)
Si está buscando una verificación específica de ip (sin comodines), puede usar:
function is_private_ip($ip) {
return filter_var($ip, FILTER_VALIDATE_IP) != FALSE;
}
var_dump (is_private_ip (''82 .237.3.3 '')); var_dump (is_private_ip (''748.1234.5.4''));